From d9adae9639456e19f2970b366aac187d2ce3acf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=AD=90=E9=93=AD?= Date: Wed, 5 Mar 2025 15:54:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/zltx_v1/internal/zltx_v1_test.go | 4 ++-- utils/wechat/client.go | 5 +++++ utils/wechat/instance.go | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) 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 }