微信红包 todo 插件加载证书
This commit is contained in:
parent
8003c6b67d
commit
740d48d4fe
18
Makefile
18
Makefile
|
@ -48,15 +48,15 @@ alipay_redpack:
|
||||||
make build-mac name=alipay_redpack && \
|
make build-mac name=alipay_redpack && \
|
||||||
make build-linux name=alipay_redpack
|
make build-linux name=alipay_redpack
|
||||||
|
|
||||||
.PHONY: weixin_cpn
|
.PHONY: wechat_cpn
|
||||||
weixin_cpn:
|
wechat_cpn:
|
||||||
make build-mac name=weixin_cpn && \
|
make build-mac name=wechat_cpn && \
|
||||||
make build-linux name=weixin_cpn
|
make build-linux name=wechat_cpn
|
||||||
|
|
||||||
.PHONY: weixin_redpack
|
.PHONY: wechat_redpack
|
||||||
weixin_redpack:
|
wechat_redpack:
|
||||||
make build-mac name=weixin_redpack && \
|
make build-mac name=wechat_redpack && \
|
||||||
make build-linux name=weixin_redpack
|
make build-linux name=wechat_redpack
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: zltx union_pay_cpn union_pay_redpack alipay_cpn alipay_redpack weixin_cpn weixin_redpack
|
all: zltx union_pay_cpn union_pay_redpack alipay_cpn alipay_redpack wechat_cpn wechat_redpack
|
|
@ -3,4 +3,5 @@ package main
|
||||||
// main 这只是一个演示
|
// main 这只是一个演示
|
||||||
func main() {
|
func main() {
|
||||||
wechatCpn()
|
wechatCpn()
|
||||||
|
//wechatRedPack()
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,19 +7,19 @@ import (
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/manage"
|
"gitea.cdlsxd.cn/sdk/plugin/manage"
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||||
"log"
|
"log"
|
||||||
"plugins/utils/weixin"
|
"plugins/utils/wechat"
|
||||||
)
|
)
|
||||||
|
|
||||||
var wechatCpnConf = &manage.Config{
|
var wechatCpnConf = &manage.Config{
|
||||||
Cmd: "pkg/mac/weixin_cpn.so",
|
Cmd: "pkg/mac/wechat_cpn.so",
|
||||||
Tag: "alipay_redpack",
|
Tag: "alipay_redpack",
|
||||||
Version: 1,
|
Version: 1,
|
||||||
CookieKey: "weixin_cpn",
|
CookieKey: "wechat_cpn",
|
||||||
CookieValue: "weixin_cpn",
|
CookieValue: "wechat_cpn",
|
||||||
}
|
}
|
||||||
|
|
||||||
func getWechatCpnConf() []byte {
|
func getWechatCpnConf() []byte {
|
||||||
c := &weixin.Server{
|
c := &wechat.Server{
|
||||||
MchID: "1605446142", // 证书所属商户
|
MchID: "1605446142", // 证书所属商户
|
||||||
MchCertificateSerialNumber: "4D081089DEB385316CBDCB55C070287E4920AC76",
|
MchCertificateSerialNumber: "4D081089DEB385316CBDCB55C070287E4920AC76",
|
||||||
MchAPIv3Key: "ChengDuLanSeXiongDi1234567890123",
|
MchAPIv3Key: "ChengDuLanSeXiongDi1234567890123",
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"gitea.cdlsxd.cn/sdk/plugin/instance"
|
||||||
|
"gitea.cdlsxd.cn/sdk/plugin/manage"
|
||||||
|
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||||
|
"log"
|
||||||
|
"plugins/utils/wechat"
|
||||||
|
)
|
||||||
|
|
||||||
|
var wechatRedPackConf = &manage.Config{
|
||||||
|
Cmd: "pkg/mac/wechat_redpack.so",
|
||||||
|
Tag: "wechat_redpack",
|
||||||
|
Version: 1,
|
||||||
|
CookieKey: "wechat_redpack",
|
||||||
|
CookieValue: "wechat_redpack",
|
||||||
|
}
|
||||||
|
|
||||||
|
func getWechatRedPackConf() []byte {
|
||||||
|
c := &wechat.Server{
|
||||||
|
MchID: "1629276485",
|
||||||
|
MchCertificateSerialNumber: "3C7E21B74C04BE6227A690EB44184F219D763F92",
|
||||||
|
MchAPIv3Key: "ChengDuBale0123456789qwertyuiopa",
|
||||||
|
}
|
||||||
|
marshal, _ := json.Marshal(c)
|
||||||
|
return marshal
|
||||||
|
}
|
||||||
|
|
||||||
|
func wechatRedPack() {
|
||||||
|
err := manage.Add(wechatRedPackConf)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
queryRequest := &proto.QueryRequest{
|
||||||
|
Config: getWechatRedPackConf(),
|
||||||
|
Order: &proto.QueryRequest_Order{
|
||||||
|
OrderNo: "",
|
||||||
|
TradeNo: "69445765514",
|
||||||
|
Account: "oO3vO5AxRWgTjmMD38FTvnB5Rq6o",
|
||||||
|
Extra: []byte(`{"app_id":"wx9ed74283ad25bca1"}`),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
resQuery, err := instance.Query(context.Background(), wechatRedPackConf.Tag, queryRequest)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
log.Printf("Query res:%+v", resQuery)
|
||||||
|
}
|
|
@ -18,9 +18,9 @@ union_pay_cpn:
|
||||||
alipay_cpn:
|
alipay_cpn:
|
||||||
make build name=alipay_cpn
|
make build name=alipay_cpn
|
||||||
|
|
||||||
.PHONY: weixin_cpn
|
.PHONY: wechat_cpn
|
||||||
weixin_cpn:
|
wechat_cpn:
|
||||||
make build name=weixin_cpn
|
make build name=wechat_cpn
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all:
|
all:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
module plugins/weixin_cpn
|
module plugins/wechat_cpn
|
||||||
|
|
||||||
go 1.22.2
|
go 1.22.2
|
||||||
|
|
|
@ -7,12 +7,12 @@ import (
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/core"
|
"github.com/wechatpay-apiv3/wechatpay-go/core"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/services/cashcoupons"
|
"github.com/wechatpay-apiv3/wechatpay-go/services/cashcoupons"
|
||||||
"go/types"
|
"go/types"
|
||||||
"plugins/utils/weixin"
|
"plugins/utils/wechat"
|
||||||
"plugins/weixin_cpn/internal/vo"
|
"plugins/wechat_cpn/internal/vo"
|
||||||
)
|
)
|
||||||
|
|
||||||
func transConfig(config []byte) (*weixin.Server, error) {
|
func transConfig(config []byte) (*wechat.Server, error) {
|
||||||
var c weixin.Server
|
var c wechat.Server
|
||||||
err := json.Unmarshal(config, &c)
|
err := json.Unmarshal(config, &c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
|
@ -3,11 +3,11 @@ package internal
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/services/cashcoupons"
|
"github.com/wechatpay-apiv3/wechatpay-go/services/cashcoupons"
|
||||||
"plugins/utils/weixin"
|
"plugins/utils/wechat"
|
||||||
)
|
)
|
||||||
|
|
||||||
func srv(ctx context.Context, c *weixin.Server) (*cashcoupons.CouponApiService, error) {
|
func srv(ctx context.Context, c *wechat.Server) (*cashcoupons.CouponApiService, error) {
|
||||||
client, err := weixin.GetClient(ctx, c)
|
client, err := wechat.GetClient(ctx, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ func srv(ctx context.Context, c *weixin.Server) (*cashcoupons.CouponApiService,
|
||||||
return &svc, nil
|
return &svc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func verify(ctx context.Context, c *weixin.Server) error {
|
func verify(ctx context.Context, c *wechat.Server) error {
|
||||||
err := c.Verify(ctx, "", "")
|
err := c.Verify(ctx, "", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
|
@ -3,20 +3,20 @@ package internal
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||||
"plugins/weixin_cpn/internal/vo"
|
"plugins/wechat_cpn/internal/vo"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 插件通信信息,若不对应则会报错panic
|
// 插件通信信息,若不对应则会报错panic
|
||||||
const (
|
const (
|
||||||
Tag = "weixin_cpn"
|
Tag = "wechat_cpn"
|
||||||
Version = 1
|
Version = 1
|
||||||
CookieKey = "weixin_cpn"
|
CookieKey = "wechat_cpn"
|
||||||
CookieValue = "weixin_cpn"
|
CookieValue = "wechat_cpn"
|
||||||
)
|
)
|
||||||
|
|
||||||
type WeiXinCpnService struct{}
|
type WeChatCpnService struct{}
|
||||||
|
|
||||||
func (p *WeiXinCpnService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
|
func (p *WeChatCpnService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
|
||||||
config, err := transConfig(request.Config)
|
config, err := transConfig(request.Config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -39,7 +39,7 @@ func (p *WeiXinCpnService) Order(ctx context.Context, request *proto.OrderReques
|
||||||
return orderResp(request.GetOrder(), *resp.CouponId), nil
|
return orderResp(request.GetOrder(), *resp.CouponId), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *WeiXinCpnService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
|
func (p *WeChatCpnService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
|
||||||
config, err := transConfig(request.Config)
|
config, err := transConfig(request.Config)
|
||||||
svc, err := srv(ctx, config)
|
svc, err := srv(ctx, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -59,7 +59,7 @@ func (p *WeiXinCpnService) Query(ctx context.Context, request *proto.QueryReques
|
||||||
return queryResp(request, resp), nil
|
return queryResp(request, resp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *WeiXinCpnService) Notify(ctx context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) {
|
func (p *WeChatCpnService) Notify(ctx context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) {
|
||||||
config, err := transConfig(request.Config)
|
config, err := transConfig(request.Config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
|
@ -6,14 +6,14 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"plugins/utils/weixin"
|
"plugins/utils/wechat"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
var server = &WeiXinCpnService{}
|
var server = &WeChatCpnService{}
|
||||||
|
|
||||||
func config() []byte {
|
func config() []byte {
|
||||||
c := &weixin.Server{
|
c := &wechat.Server{
|
||||||
MchID: "1605446142", // 证书所属商户
|
MchID: "1605446142", // 证书所属商户
|
||||||
MchCertificateSerialNumber: "4D081089DEB385316CBDCB55C070287E4920AC76",
|
MchCertificateSerialNumber: "4D081089DEB385316CBDCB55C070287E4920AC76",
|
||||||
MchAPIv3Key: "ChengDuLanSeXiongDi1234567890123",
|
MchAPIv3Key: "ChengDuLanSeXiongDi1234567890123",
|
|
@ -3,13 +3,13 @@ package main
|
||||||
import (
|
import (
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/shared"
|
"gitea.cdlsxd.cn/sdk/plugin/shared"
|
||||||
"github.com/hashicorp/go-plugin"
|
"github.com/hashicorp/go-plugin"
|
||||||
"plugins/weixin_cpn/internal"
|
"plugins/wechat_cpn/internal"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
plugin.Serve(&plugin.ServeConfig{
|
plugin.Serve(&plugin.ServeConfig{
|
||||||
HandshakeConfig: shared.HandshakeConfig(internal.Version, internal.CookieKey, internal.CookieValue),
|
HandshakeConfig: shared.HandshakeConfig(internal.Version, internal.CookieKey, internal.CookieValue),
|
||||||
Plugins: shared.PluginSet(shared.NewPlugin(&internal.WeiXinCpnService{}, internal.Tag)),
|
Plugins: shared.PluginSet(shared.NewPlugin(&internal.WeChatCpnService{}, internal.Tag)),
|
||||||
GRPCServer: plugin.DefaultGRPCServer,
|
GRPCServer: plugin.DefaultGRPCServer,
|
||||||
})
|
})
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
module plugins/weixin_redpack
|
module plugins/wechat_redpack
|
||||||
|
|
||||||
go 1.22.2
|
go 1.22.2
|
||||||
|
|
|
@ -6,12 +6,12 @@ import (
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/core"
|
"github.com/wechatpay-apiv3/wechatpay-go/core"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/services/transferbatch"
|
"github.com/wechatpay-apiv3/wechatpay-go/services/transferbatch"
|
||||||
"plugins/utils/weixin"
|
"plugins/utils/wechat"
|
||||||
"plugins/weixin_redpack/internal/vo"
|
"plugins/wechat_redpack/internal/vo"
|
||||||
)
|
)
|
||||||
|
|
||||||
func transConfig(config []byte) (*weixin.Server, error) {
|
func transConfig(config []byte) (*wechat.Server, error) {
|
||||||
var c weixin.Server
|
var c wechat.Server
|
||||||
err := json.Unmarshal(config, &c)
|
err := json.Unmarshal(config, &c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
|
@ -0,0 +1,33 @@
|
||||||
|
package internal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/wechatpay-apiv3/wechatpay-go/services/transferbatch"
|
||||||
|
"plugins/utils/wechat"
|
||||||
|
)
|
||||||
|
|
||||||
|
func transferBatchApiService(ctx context.Context, c *wechat.Server) (*transferbatch.TransferBatchApiService, error) {
|
||||||
|
client, err := wechat.GetClient(ctx, c)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
svc := transferbatch.TransferBatchApiService{Client: client}
|
||||||
|
return &svc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func transferDetailApiService(ctx context.Context, c *wechat.Server) (*transferbatch.TransferDetailApiService, error) {
|
||||||
|
client, err := wechat.GetClient(ctx, c)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
svc := transferbatch.TransferDetailApiService{Client: client}
|
||||||
|
return &svc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func verify(ctx context.Context, c *wechat.Server) error {
|
||||||
|
err := c.Verify(ctx, "", "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -3,20 +3,20 @@ package internal
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||||
"plugins/weixin_redpack/internal/vo"
|
"plugins/wechat_redpack/internal/vo"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 插件通信信息,若不对应则会报错panic
|
// 插件通信信息,若不对应则会报错panic
|
||||||
const (
|
const (
|
||||||
Tag = "weixin_redpack"
|
Tag = "wechat_redpack"
|
||||||
Version = 1
|
Version = 1
|
||||||
CookieKey = "weixin_redpack"
|
CookieKey = "wechat_redpack"
|
||||||
CookieValue = "weixin_redpack"
|
CookieValue = "wechat_redpack"
|
||||||
)
|
)
|
||||||
|
|
||||||
type WeiXinRedPackService struct{}
|
type WeChatRedPackService struct{}
|
||||||
|
|
||||||
func (p *WeiXinRedPackService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
|
func (p *WeChatRedPackService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
|
||||||
config, err := transConfig(request.Config)
|
config, err := transConfig(request.Config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -39,7 +39,7 @@ func (p *WeiXinRedPackService) Order(ctx context.Context, request *proto.OrderRe
|
||||||
return orderResp(request.GetOrder(), *resp.BatchId), nil
|
return orderResp(request.GetOrder(), *resp.BatchId), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *WeiXinRedPackService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
|
func (p *WeChatRedPackService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
|
||||||
req, err := queryReq(request.GetOrder())
|
req, err := queryReq(request.GetOrder())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -62,6 +62,6 @@ func (p *WeiXinRedPackService) Query(ctx context.Context, request *proto.QueryRe
|
||||||
return queryResp(request, resp), nil
|
return queryResp(request, resp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *WeiXinRedPackService) Notify(_ context.Context, _ *proto.NotifyRequest) (*proto.NotifyResponse, error) {
|
func (p *WeChatRedPackService) Notify(_ context.Context, _ *proto.NotifyRequest) (*proto.NotifyResponse, error) {
|
||||||
return notifyResp(), nil
|
return notifyResp(), nil
|
||||||
}
|
}
|
|
@ -6,19 +6,17 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"plugins/utils/weixin"
|
"plugins/utils/wechat"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
var server = &WeiXinRedPackService{}
|
var server = &WeChatRedPackService{}
|
||||||
|
|
||||||
func config() []byte {
|
func config() []byte {
|
||||||
c := &weixin.Server{
|
c := &wechat.Server{
|
||||||
MchID: "1629276485",
|
MchID: "1629276485",
|
||||||
MchCertificateSerialNumber: "3C7E21B74C04BE6227A690EB44184F219D763F92",
|
MchCertificateSerialNumber: "3C7E21B74C04BE6227A690EB44184F219D763F92",
|
||||||
MchAPIv3Key: "ChengDuBale0123456789qwertyuiopa",
|
MchAPIv3Key: "ChengDuBale0123456789qwertyuiopa",
|
||||||
// 商户API私钥
|
|
||||||
PrivateKeyPath: "/Users/lsxd/code/php/yxxt/market/config/wechatcash/apiclient_key.pem",
|
|
||||||
}
|
}
|
||||||
marshal, _ := json.Marshal(c)
|
marshal, _ := json.Marshal(c)
|
||||||
return marshal
|
return marshal
|
|
@ -3,13 +3,13 @@ package main
|
||||||
import (
|
import (
|
||||||
"gitea.cdlsxd.cn/sdk/plugin/shared"
|
"gitea.cdlsxd.cn/sdk/plugin/shared"
|
||||||
"github.com/hashicorp/go-plugin"
|
"github.com/hashicorp/go-plugin"
|
||||||
"plugins/weixin_redpack/internal"
|
"plugins/wechat_redpack/internal"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
plugin.Serve(&plugin.ServeConfig{
|
plugin.Serve(&plugin.ServeConfig{
|
||||||
HandshakeConfig: shared.HandshakeConfig(internal.Version, internal.CookieKey, internal.CookieValue),
|
HandshakeConfig: shared.HandshakeConfig(internal.Version, internal.CookieKey, internal.CookieValue),
|
||||||
Plugins: shared.PluginSet(shared.NewPlugin(&internal.WeiXinRedPackService{}, internal.Tag)),
|
Plugins: shared.PluginSet(shared.NewPlugin(&internal.WeChatRedPackService{}, internal.Tag)),
|
||||||
GRPCServer: plugin.DefaultGRPCServer,
|
GRPCServer: plugin.DefaultGRPCServer,
|
||||||
})
|
})
|
||||||
}
|
}
|
|
@ -1,53 +0,0 @@
|
||||||
package internal
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"crypto/x509"
|
|
||||||
"fmt"
|
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/core"
|
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/core/option"
|
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/services/transferbatch"
|
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/utils"
|
|
||||||
"plugins/utils/weixin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func transferBatchApiService(ctx context.Context, c *weixin.Server) (*transferbatch.TransferBatchApiService, error) {
|
|
||||||
client, err := weixin.GetClient(ctx, c)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
svc := transferbatch.TransferBatchApiService{Client: client}
|
|
||||||
return &svc, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func transferDetailApiService(ctx context.Context, c *weixin.Server) (*transferbatch.TransferDetailApiService, error) {
|
|
||||||
mchPrivateKey, err := utils.LoadPrivateKeyWithPath(c.PrivateKeyPath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("MchID[%s] load merchant private key error:%v", c.MchID, err)
|
|
||||||
}
|
|
||||||
opts := []core.ClientOption{
|
|
||||||
option.WithWechatPayAutoAuthCipher(c.MchID, c.MchCertificateSerialNumber, mchPrivateKey, c.MchAPIv3Key),
|
|
||||||
}
|
|
||||||
if c.CertificatePath != "" {
|
|
||||||
payCert, err := utils.LoadCertificateWithPath(c.CertificatePath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("MchID[%s] load pay certificate error:%v", c.MchID, err)
|
|
||||||
}
|
|
||||||
opts = append(opts, option.WithWechatPayCertificate([]*x509.Certificate{payCert}))
|
|
||||||
}
|
|
||||||
client, err := core.NewClient(ctx, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("MchID[%s] %v", c.MchID, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
svc := transferbatch.TransferDetailApiService{Client: client}
|
|
||||||
return &svc, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func verify(ctx context.Context, c *weixin.Server) error {
|
|
||||||
err := c.Verify(ctx, "", "")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
|
@ -3,6 +3,7 @@ package alipay
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"plugins/utils"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,8 +49,8 @@ func GetCert(appId string) (*CertConfig, error) {
|
||||||
return nil, fmt.Errorf("get current dir error: %v", err)
|
return nil, fmt.Errorf("get current dir error: %v", err)
|
||||||
}
|
}
|
||||||
filePath := fmt.Sprintf("%s/%s/%s/%s", dir, "cert", "alipay", appId)
|
filePath := fmt.Sprintf("%s/%s/%s/%s", dir, "cert", "alipay", appId)
|
||||||
if !fileExists(filePath) {
|
if !utils.FileExists(filePath) {
|
||||||
return nil, fmt.Errorf("[%s]授权文件信息不存在,请联系技术人员处理", appId)
|
return nil, fmt.Errorf("appId[%s]支付宝密钥文件信息不存在,请联系技术人员处理", appId)
|
||||||
}
|
}
|
||||||
mchCertPath := fmt.Sprintf("%s/%s_%s.crt", filePath, "appCertPublicKey", appId)
|
mchCertPath := fmt.Sprintf("%s/%s_%s.crt", filePath, "appCertPublicKey", appId)
|
||||||
mchCertSN, err := getMchCertSN(mchCertPath)
|
mchCertSN, err := getMchCertSN(mchCertPath)
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"encoding/pem"
|
"encoding/pem"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// md5Hash 计算 MD5 哈希值
|
// md5Hash 计算 MD5 哈希值
|
||||||
|
@ -37,8 +36,3 @@ func getCert(certData []byte) (*x509.Certificate, error) {
|
||||||
|
|
||||||
return cert, nil
|
return cert, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func fileExists(filePath string) bool {
|
|
||||||
_, err := os.Stat(filePath)
|
|
||||||
return err == nil || os.IsExist(err)
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func FileExists(filePath string) bool {
|
||||||
|
_, err := os.Stat(filePath)
|
||||||
|
return err == nil || os.IsExist(err)
|
||||||
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package weixin
|
package wechat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/x509"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/core"
|
"github.com/wechatpay-apiv3/wechatpay-go/core"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/core/option"
|
"github.com/wechatpay-apiv3/wechatpay-go/core/option"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/utils"
|
"github.com/wechatpay-apiv3/wechatpay-go/utils"
|
||||||
"os"
|
"os"
|
||||||
|
putils "plugins/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
|
@ -22,6 +22,10 @@ func newClient(ctx context.Context, c *Server) (*core.Client, error) {
|
||||||
return nil, fmt.Errorf("MchID[%s] get current dir error:%v", c.MchID, err)
|
return nil, fmt.Errorf("MchID[%s] get current dir error:%v", c.MchID, err)
|
||||||
}
|
}
|
||||||
filePath := fmt.Sprintf("%s/%s/%s/%s", dir, "cert", "wechat", c.MchID)
|
filePath := fmt.Sprintf("%s/%s/%s/%s", dir, "cert", "wechat", c.MchID)
|
||||||
|
if !putils.FileExists(filePath) {
|
||||||
|
return nil, fmt.Errorf("MchID[%s]微信密钥证书信息不存在,请联系技术人员处理", c.MchID)
|
||||||
|
}
|
||||||
|
// 商户相关配置,商户API私钥
|
||||||
mchPrivateKey, err := utils.LoadPrivateKeyWithPath(fmt.Sprintf("%s/%s", filePath, "wechat_private_key.pem"))
|
mchPrivateKey, err := utils.LoadPrivateKeyWithPath(fmt.Sprintf("%s/%s", filePath, "wechat_private_key.pem"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("MchID[%s] load merchant private key error:%v", c.MchID, err)
|
return nil, fmt.Errorf("MchID[%s] load merchant private key error:%v", c.MchID, err)
|
||||||
|
@ -29,11 +33,13 @@ func newClient(ctx context.Context, c *Server) (*core.Client, error) {
|
||||||
opts := []core.ClientOption{
|
opts := []core.ClientOption{
|
||||||
option.WithWechatPayAutoAuthCipher(c.MchID, c.MchCertificateSerialNumber, mchPrivateKey, c.MchAPIv3Key),
|
option.WithWechatPayAutoAuthCipher(c.MchID, c.MchCertificateSerialNumber, mchPrivateKey, c.MchAPIv3Key),
|
||||||
}
|
}
|
||||||
payCert, err := utils.LoadCertificateWithPath(fmt.Sprintf("%s/%s", filePath, "wechat_cert.pem"))
|
// 微信支付平台配置
|
||||||
if err != nil {
|
////payCert, err := utils.LoadCertificateWithPath(fmt.Sprintf("%s/%s", filePath, "wechat_cert.pem"))
|
||||||
return nil, fmt.Errorf("MchID[%s] load pay certificate error:%v", c.MchID, err)
|
//payCert, err := utils.LoadCertificateWithPath(fmt.Sprintf("%s/%s", filePath, "wechatpay_2C10BB073B55C2191DF46CE443DA8B9064AB7F60.pem"))
|
||||||
}
|
//if err != nil {
|
||||||
opts = append(opts, option.WithWechatPayCertificate([]*x509.Certificate{payCert}))
|
// return nil, fmt.Errorf("MchID[%s] load pay certificate error:%v", c.MchID, err)
|
||||||
|
//}
|
||||||
|
//opts = append(opts, option.WithWechatPayCertificate([]*x509.Certificate{payCert}))
|
||||||
client, err := core.NewClient(ctx, opts...)
|
client, err := core.NewClient(ctx, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("MchID[%s] %v", c.MchID, err)
|
return nil, fmt.Errorf("MchID[%s] %v", c.MchID, err)
|
|
@ -1,4 +1,4 @@
|
||||||
package weixin
|
package wechat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
Loading…
Reference in New Issue