diff --git a/plugins/zltx_v1/internal/zltx_v1_test.go b/plugins/zltx_v1/internal/zltx_v1_test.go index 6fa6f5d..713a5bd 100644 --- a/plugins/zltx_v1/internal/zltx_v1_test.go +++ b/plugins/zltx_v1/internal/zltx_v1_test.go @@ -58,8 +58,8 @@ func TestOrder(t *testing.T) { Extra: []byte(`{}`), }, } - t.Logf("%s\n", request.String()) - return + //t.Logf("%s\n", request.String()) + //return t.Run("TestOrder", func(t *testing.T) { got, err := srv.Order(context.Background(), request) if err != nil { diff --git a/utils/wechat/client.go b/utils/wechat/client.go index bd8eec0..d5e048d 100644 --- a/utils/wechat/client.go +++ b/utils/wechat/client.go @@ -33,21 +33,25 @@ func newClient(ctx context.Context, c *Server) (*core.Client, error) { if err != nil { return nil, proto.ErrorConfigFail(fmt.Sprintf("MchID[%s] get current dir error:%v", c.MchID, err)) } + filePath := fmt.Sprintf("%s/%s/%s/%s", dir, "cert", "wechat", c.MchID) if !putils.FileExists(filePath) { return nil, proto.ErrorConfigFail(fmt.Sprintf("MchID[%s]微信密钥证书信息不存在,请联系技术人员处理", c.MchID)) } + // 商户相关配置,商户API私钥 mchPrivateKey, err := utils.LoadPrivateKeyWithPath(fmt.Sprintf("%s/%s", filePath, "wechat_private_key.pem")) if err != nil { return nil, proto.ErrorConfigFail(fmt.Sprintf("MchID[%s] load merchant private key error:%v", c.MchID, err)) } + var client *core.Client // 微信支付平台配置 wechatPayCertificate, err := utils.LoadCertificateWithPath(fmt.Sprintf("%s/%s", filePath, "wechat_cert.pem")) if err != nil { return nil, proto.ErrorConfigFail(fmt.Sprintf("平台证书有误:%v", err)) } + client, err = core.NewClient( ctx, option.WithMerchantCredential( @@ -60,5 +64,6 @@ func newClient(ctx context.Context, c *Server) (*core.Client, error) { if err != nil { return nil, proto.ErrorConfigFail(fmt.Sprintf("创建 Client 失败:%v", err)) } + return client, nil } diff --git a/utils/wechat/instance.go b/utils/wechat/instance.go index 6adf014..f4ce663 100644 --- a/utils/wechat/instance.go +++ b/utils/wechat/instance.go @@ -26,24 +26,30 @@ func init() { func GetClient(ctx context.Context, c *Server) (*core.Client, error) { instance.mutex.Lock() defer instance.mutex.Unlock() + if instance.clients[c.MchID] != nil { return instance.clients[c.MchID], nil } + var err error instance.once.Do(func() { instance.clients[c.MchID], err = newClient(ctx, c) }) + if err != nil { return nil, err } + return instance.clients[c.MchID], nil } func (s *Server) Verify(ctx context.Context, message, signature string) error { var verifier auth.Verifier verifier = verifiers.NewSHA256WithRSAVerifier(nil) + if err := verifier.Verify(ctx, s.MchCertificateSerialNumber, message, signature); err != nil { return proto.ErrorSignFail(err.Error()) } + return nil }