diff --git a/app/user/cmd/api/etc/main.dev.yaml b/app/user/cmd/api/etc/main.dev.yaml index 2dc81a2..923da8c 100644 --- a/app/user/cmd/api/etc/main.dev.yaml +++ b/app/user/cmd/api/etc/main.dev.yaml @@ -40,12 +40,10 @@ Alipay: ReturnURL: "http://192.168.10.13:5679/payment/result" Wxpay: - AppID: "wxa581992dc74d860e" - MchID: "1704330055" - MchPublicKeyID: "PUB_KEY_ID_0117043300552025010900447500000187" - MchPublicKeyPath: "etc/merchant/pub_key.pem" - MchCertificateSerialNumber: "434FE8C0FC8CFEF28B76B3EF35DD2297E977A3CB" - MchApiv3Key: "h6Jk9Qm7W1pXyFzA4bL2V8CzH0K3wDqw" + AppID: "wxba8424db4771cc18" + MchID: "1682635136" + MchCertificateSerialNumber: "5369B8AEEBDCF7AF274510252E6A8C0659C30F61" + MchApiv3Key: "e3ea4cf0765f1e71b01bb387dfcdbc9f" MchPrivateKeyPath: "etc/merchant/apiclient_key.pem" NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/wechat/callback" RefundNotifyUrl: "https://6m4685017o.goho.co/api/v1/wechat/refund_callback" diff --git a/app/user/cmd/api/etc/main.yaml b/app/user/cmd/api/etc/main.yaml index 50683db..127575d 100644 --- a/app/user/cmd/api/etc/main.yaml +++ b/app/user/cmd/api/etc/main.yaml @@ -41,15 +41,13 @@ Alipay: NotifyUrl: "https://www.quannengcha.com/api/v1/pay/alipay/callback" ReturnURL: "https://www.quannengcha.com/payment/result" Wxpay: - AppID: "wxa581992dc74d860e" - MchID: "1704330055" - MchPublicKeyID: "PUB_KEY_ID_0117043300552025010900447500000187" - MchPublicKeyPath: "etc/merchant/pub_key.pem" - MchCertificateSerialNumber: "434FE8C0FC8CFEF28B76B3EF35DD2297E977A3CB" - MchApiv3Key: "h6Jk9Qm7W1pXyFzA4bL2V8CzH0K3wDqw" + AppID: "wxba8424db4771cc18" + MchID: "1682635136" + MchCertificateSerialNumber: "5369B8AEEBDCF7AF274510252E6A8C0659C30F61" + MchApiv3Key: "e3ea4cf0765f1e71b01bb387dfcdbc9f" MchPrivateKeyPath: "etc/merchant/apiclient_key.pem" - NotifyUrl: "https://www.quannengcha.com/api/v1/pay/wechat/callback" - RefundNotifyUrl: "https://www.quannengcha.com/api/v1/wechat/refund_callback" + NotifyUrl: "https://www.tianyuancha.cn/api/v1/pay/wechat/callback" + RefundNotifyUrl: "https://www.tianyuancha.cn/api/v1/wechat/refund_callback" Applepay: ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt" SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt" diff --git a/app/user/cmd/api/etc/merchant/apiclient_key.pem b/app/user/cmd/api/etc/merchant/apiclient_key.pem index 1501ef0..246c1df 100644 --- a/app/user/cmd/api/etc/merchant/apiclient_key.pem +++ b/app/user/cmd/api/etc/merchant/apiclient_key.pem @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDBUq/9OV6FzRcl -vUReArEh6czC001MVzEsBbde88xpsZjQkCoECzJL7wHq9aWcom4yQjp6AiTHeHO1 -FvHoRN/dssxgVf28V3L2zF4U23FNcWOElScQksYESNAIVTQb5lKnRdgAS4LRY0OE -BzSnlYn+m6zQV6GRCOv0uCR7tgRFGdYW+RoHjHJqH4dX2cN/SrpuB01/BEkUJIp7 -bWswyh8Ogf9GZZumJlmJtld18ZDqd1RzQDk8VbYxJgsmcXcQPa1LouZsBVzU4IdV -Bz0/vNIJ2+D+shifPT7dL4IWCjL6zHxYdnHv9VDb1bS9JN6pk4Tpi4C3Tyhaq3kI -iRW0IPqFAgMBAAECggEAR9KMh6t0rokPfHngmHyvikXuSMNwCFiscAp/ocs5ulq8 -x1+H/JCcUxGsyLoSmSrPfeSVDRcWyvS5KCIqJXzRHvB6dZ/88KgckgxDN8R/R6JE -stEm/kVJQ/Y5M59UCLl9I6ATK6jiJSCXyMlUip5H8kur3Itx/wwtfXGcPEnXNERK -qM7AXRB2d6Ag0XkC9Cfdf6U7WNk1zKAr+1V1Iiav5mU7A8iHFsgK6RjVbxdh2ghJ -45LLU26YdoNoSWRefd1Wu/n0OMfyQdpySnyJcei2+5PlNbt6uHKrQLxtSE/HllcK -agv+FzfRYNpZ+ia7GMvTDNEuvnkKxs/K24Gk+aOwUQKBgQD48Qkns6gIN9yURMgc -KE8mDaerNeuCHY1cxymgriYUQAjrEysy51W41q+gvvJbXYMAmNM5RbrV+ktSWDZG -kljQaY0c/u0mYofuNYs/ul1TFcQTwxNnYUMmCWFzRgFM7Sp2H+sRO3W+Tvs9ctFJ -7a8HOYxqkQSfnHSgOuXAKXvy6wKBgQDGzfCF6DfRh3D/QQ9WCBi1JNWdLL6fHbmI -V4OrpQuQiTGGf/yY8ySOLq0QYXyc3pBxgTdOChliSNBjdr7/LXusIByZEvcKOds5 -pOalrjrFWoNf87zM38wMQjUeMprWQniBmq4H+TL7De29hR1QhdGb62uZCLo5V1u2 -k41gGvoMTwKBgC1blaRzOomMzBcD1UY0Hf+7+zHZ2DhT9B7UdwQ81tlXtYhHbNaQ -ifDsxQFP6U62Yhkov0uvJdS5DyJIylLfdWk74idHV6RnzYacoOuSpFBwJdLH93Ad -q6NxkBz1w2TlzZfKRwVTxSdQsrxGgFWtBfgWBzyfga0nT6SmNphltpzTAoGAML3l -Lq+Un+aZKbwFyo4JoL/7L6H8yn47MtZiDf9VKoa4gcV3ZPiYCdQf0lhUeRGIUIvh -x1xqhNJdZUWD5oR8QeNNn6oqr3Mn8KYhdpWVCzX559iWfZSRLqA87b5yf/2kFgKa -kJHkkfEETOcKHOfyUEwUAV1GazCj58udaeazT7kCgYB23ZTeqRsxw7jqEVz6KOSW -oWGYi0/lDmW6dtjcT3fDtyiYDlnE+53dIs2mcIvUyOwzcQ+e1rH+ZmGf/UpfWyXl -7aftUeDlPMLHi7wQUU04DaZU/Lyy0HGHMKVrPJF47gLKCgfk8I8HdUEtHSXNmYZb -hZ3T2j+d4u74saGGaxOlqw== +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCP6fWm1vXXybH +m3Ne6PjacGrN2+iMrzWZlzdHCZ31udDPqSUYaZ+78b441KZK/CJFQWeSJ/1h//A+ +BGsQDKvE/fj2QzN1KkOuQ8WJXNGpixE5uu5bv/QTN/ukurGdA1aO2aFCANumlOmB +HkB/B2so57ii8iQQjwK2xM4r3oOU/IfcFGKL+9/QjLGFFp9PJXCDBCgrxxlZGaj1 +3wowlfVOzlaX94gemQsCYVkuAFIYMAnFHs9cKNZQIU80somW/yy2Gy38N6n7NnbD +nvFSaq4GoDROqRgKbRZ5e706d/p7A3aS/2oRqq1jomUIugK8g++LmoHFTgfhfQkI +v1aG/nPzAgMBAAECggEAD2RN31J2J42xm/V0YdviBCUOQXugZK1peN8jkSxw6Myt +gBbuCo4sCw9vvD8VYjGyYXx6QXmLuV03YyKkfSQT5EsflBvlEu6jaEaUe3rwXhfX +6JQoWPrP00oHVZk5g7CFBlK2VW2N+hgonIOSJr6mvhoGZlr7gphiZasYjx9Vm9N3 +Pbnfru5ttzplYNniwH3DF6ph8VmdbD1nnbWSKLXvHCsXQT2wBcnsIagIH3vyq6K1 +pc5abWsQJrixOPebpI8jD5w0HxHAqVLx58H/OC2zW/roAw1WS2AkueJ1j7dQ7Z0C +mc9Xexz5gcAP0nMAQv+LP7iYqsa/niFhfcTFWfdxkQKBgQD5JkKNmInU2/IVYCwO +c483MCSv1+MnbRXlb7vut8T0IupHTU6hCge6C3q3HsjbKSBn8bRChtPUzvw9JFxK +QWKiQqQDPLDJ08AIKhfQD2JiLtoikkZN0bF6OTL+Soney1yGx51mlfHM194+PcCJ +jF7iWdMVbcBwHbgydNxxIS5cKQKBgQDHlvQ4lw6gvLILpGK494/vNYSJP/Jmd66V +3oSGYi84YRKTSwH4NlbBVVieb3Dv+pPugbsXEuFHBif7WsivbYgNTE9++8Yvt0gh +duB1G4yh7m/ylQeSuipgQU9tozrU/15cWwmcCRV50wWXBGoVEM0kf7mzEKSxmjYk +Qzko/zxSuwKBgQCY6Bc+SViFz3qSDdTcBaXma+CIHsmlH7ipd9px1kzEvEzl95cD +FGHLl1H34qfIgUQHJvrHPXHyEBoT+CW/2MMM7DM2XV/ubctT92ln4pkxwqlTQExv +Y/s1FLesAtj8Z/hgK0/5bprYab9WmZV5lTGCXzhB1XqeFE9AgCHuODv4iQKBgQC8 +g2uwd5ytXQydymokYk9klJvWNrvw5GHV1BJAC0Smb6lnzZTSqCBRAxdsrb1yLK7E +u2vGY2K7/qiM1DZw23eBd+4t9gg+0VIjqXBfq+GsoNTDvtckUwnrWER5PY831ut9 +N89fvYS3SAUjmlvIAdKBAtKWusWTqiAxJ/05J7oGOQKBgB5PSr5i0LlupIbKui9t +XtXnRqGPxxrZZUpTkyrGOAnlCz/zq2QiwFpBWo/NMHOp0KmxzJpQ8yEY2LWlRZ61 +Oc9m0J/HtPw3Ohi1treBosEVG/0NOI9Tq1Obny23N51MVibdW6zEIyGUp/DbFS8h +5DljdOYX9IYIHHn3Ig4GeTGe -----END PRIVATE KEY----- diff --git a/app/user/cmd/api/internal/config/config.go b/app/user/cmd/api/internal/config/config.go index dc5c452..8bfb617 100644 --- a/app/user/cmd/api/internal/config/config.go +++ b/app/user/cmd/api/internal/config/config.go @@ -53,8 +53,6 @@ type AlipayConfig struct { type WxpayConfig struct { AppID string MchID string - MchPublicKeyID string - MchPublicKeyPath string MchCertificateSerialNumber string MchApiv3Key string MchPrivateKeyPath string diff --git a/app/user/cmd/api/internal/service/apirequestService.go b/app/user/cmd/api/internal/service/apirequestService.go index 749fe98..dcd1c4e 100644 --- a/app/user/cmd/api/internal/service/apirequestService.go +++ b/app/user/cmd/api/internal/service/apirequestService.go @@ -210,6 +210,7 @@ var requestProcessors = map[string]func(*ApiRequestService, []byte) ([]byte, err "G10XM02": (*ApiRequestService).ProcessG10XM02Request, "G11BJ06": (*ApiRequestService).ProcessG11BJ06Request, "G29BJ05": (*ApiRequestService).ProcessG29BJ05Request, + "Marriage": (*ApiRequestService).ProcessMarriageRequest, } // PreprocessRequestApi 调用指定的请求处理函数 @@ -1854,6 +1855,21 @@ func (a *ApiRequestService) ProcessRIS031Request(params []byte) ([]byte, error) return []byte(Value.Raw), nil } + +// ProcessMarriageRequest 婚姻状态查询,优先使用西部数据G09XM02接口,失败时回退到羽山IDV044接口 +func (a *ApiRequestService) ProcessMarriageRequest(params []byte) ([]byte, error) { + // 首先尝试使用西部数据接口查询 + resp, err := a.ProcessG09XM02Request(params) + if err != nil { + // 西部数据接口查询失败,尝试使用羽山接口 + logx.Infof("西部数据婚姻查询失败,尝试使用羽山接口: %v", err) + resp, err = a.ProcessIDV044Request(params) + if err != nil { + return nil, err + } + } + return resp, nil +} func (a *ApiRequestService) ProcessG09XM02Request(params []byte) ([]byte, error) { idCard := gjson.GetBytes(params, "id_card") name := gjson.GetBytes(params, "name") @@ -1895,7 +1911,6 @@ func (a *ApiRequestService) ProcessG09XM02Request(params []byte) ([]byte, error) response := map[string]string{ "status": statusCode, } - // 序列化为JSON jsonResponse, err := json.Marshal(response) if err != nil { diff --git a/app/user/cmd/api/internal/service/wechatpayService.go b/app/user/cmd/api/internal/service/wechatpayService.go index f404cc9..daf98bf 100644 --- a/app/user/cmd/api/internal/service/wechatpayService.go +++ b/app/user/cmd/api/internal/service/wechatpayService.go @@ -47,22 +47,17 @@ func NewWechatPayService(c config.Config, userAuthModel model.UserAuthModel) *We mchID := c.Wxpay.MchID mchCertificateSerialNumber := c.Wxpay.MchCertificateSerialNumber mchAPIv3Key := c.Wxpay.MchApiv3Key - mchPublicKeyID := c.Wxpay.MchPublicKeyID + // 从文件中加载商户私钥 mchPrivateKey, err := utils.LoadPrivateKeyWithPath(c.Wxpay.MchPrivateKeyPath) if err != nil { logx.Errorf("加载商户私钥失败: %v", err) panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序 } - // 从文件中加载公钥 - mchPublicKey, err := utils.LoadPublicKeyWithPath(c.Wxpay.MchPublicKeyPath) - if err != nil { - logx.Errorf("加载商户私钥失败: %v", err) - panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序 - } + // 使用商户私钥和其他参数初始化微信支付客户端 opts := []core.ClientOption{ - option.WithWechatPayPublicKeyAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchPublicKeyID, mchPublicKey), + option.WithWechatPayAutoAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchAPIv3Key), } client, err := core.NewClient(context.Background(), opts...) if err != nil { @@ -71,14 +66,12 @@ func NewWechatPayService(c config.Config, userAuthModel model.UserAuthModel) *We } // 在初始化时获取证书访问器并创建 notifyHandler certificateVisitor := downloader.MgrInstance().GetCertificateVisitor(mchID) - //notifyHandler, err := notify.NewRSANotifyHandler(mchAPIv3Key, verifiers.NewSHA256WithRSAVerifier(certificateVisitor)) - //if err != nil { - // logx.Errorf("获取证书访问器失败: %v", err) - // panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序 - //} - notifyHandler := notify.NewNotifyHandler( - mchAPIv3Key, - verifiers.NewSHA256WithRSACombinedVerifier(certificateVisitor, mchPublicKeyID, *mchPublicKey)) + notifyHandler, err := notify.NewRSANotifyHandler(mchAPIv3Key, verifiers.NewSHA256WithRSAVerifier(certificateVisitor)) + if err != nil { + logx.Errorf("获取证书访问器失败: %v", err) + panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序 + } + logx.Infof("微信支付客户端初始化成功") return &WechatPayService{ config: c.Wxpay, wechatClient: client,