Closed hujiahuan closed 5 months ago
在支付宝一侧,已经取消了,接口内容加密,依然报这个错
签名验证的问题,确认验证签名的证书都是正常的
签名验证的问题,确认验证签名的证书都是正常的
我使用的是公钥模式初始化的支付宝.配置了app ID, 应用私钥和支付宝公钥. 收款是没问题的.证明配置的是对的应该.
没有配置证书, 你说的验证签名证书,是在哪里配置? 是什么证书.
提供个我的代码给你借鉴,也是只开了公钥和私钥
func (i *Instance) loadAlipayClient(_ context.Context) (*alipay.Client, error) {
// 加载应用私钥
appPrivateKey, err := fs.ReadFile("crt/alipay/app_private_key.txt")
if err != nil {
return nil, fmt.Errorf("应用私钥加载失败 Err=%v", err)
}
// 加载支付宝公钥
alipayPublicKey, err := fs.ReadFile("crt/alipay/alipay_public_key.txt")
if err != nil {
return nil, fmt.Errorf("支付宝公钥加载失败 Err=%v", err)
}
// HTTP客户端
httpClient := &http.Client{
Timeout: 30 * time.Second,
Transport: otelhttp.NewTransport(
http.DefaultTransport,
otelhttp.WithSpanNameFormatter(func(operation string, r *http.Request) string {
return r.Method + " " + r.URL.Path
}),
),
}
// 初始化支付宝客户端
client, err := alipay.New(i.cfg.Alipay.AppId, string(appPrivateKey), true, alipay.WithHTTPClient(httpClient))
if err != nil {
return nil, fmt.Errorf("支付宝客户端初始化失败 Err=%v", err)
}
err = client.LoadAliPayPublicKey(string(alipayPublicKey))
if err != nil {
return nil, fmt.Errorf("支付宝客户端加载公钥失败 Err=%v", err)
}
log.Printf("[INFO] 支付宝客户端 初始化成功")
return client, nil
}
提供个我的代码给你借鉴,也是只开了公钥和私钥
func (i *Instance) loadAlipayClient(_ context.Context) (*alipay.Client, error) { // 加载应用私钥 appPrivateKey, err := fs.ReadFile("crt/alipay/app_private_key.txt") if err != nil { return nil, fmt.Errorf("应用私钥加载失败 Err=%v", err) } // 加载支付宝公钥 alipayPublicKey, err := fs.ReadFile("crt/alipay/alipay_public_key.txt") if err != nil { return nil, fmt.Errorf("支付宝公钥加载失败 Err=%v", err) } // HTTP客户端 httpClient := &http.Client{ Timeout: 30 * time.Second, Transport: otelhttp.NewTransport( http.DefaultTransport, otelhttp.WithSpanNameFormatter(func(operation string, r *http.Request) string { return r.Method + " " + r.URL.Path }), ), } // 初始化支付宝客户端 client, err := alipay.New(i.cfg.Alipay.AppId, string(appPrivateKey), true, alipay.WithHTTPClient(httpClient)) if err != nil { return nil, fmt.Errorf("支付宝客户端初始化失败 Err=%v", err) } err = client.LoadAliPayPublicKey(string(alipayPublicKey)) if err != nil { return nil, fmt.Errorf("支付宝客户端加载公钥失败 Err=%v", err) } log.Printf("[INFO] 支付宝客户端 初始化成功") return client, nil }
非常感谢您的回答. 现在的问题是初始化支付宝没有问题,可以收款. 问题是不能使用查询接口去查询交易信息.退款接口也无法使用.报的都是同样的错 {"error": "crypto/rsa: verification error"}
提供个我的代码给你借鉴,也是只开了公钥和私钥
func (i *Instance) loadAlipayClient(_ context.Context) (*alipay.Client, error) { // 加载应用私钥 appPrivateKey, err := fs.ReadFile("crt/alipay/app_private_key.txt") if err != nil { return nil, fmt.Errorf("应用私钥加载失败 Err=%v", err) } // 加载支付宝公钥 alipayPublicKey, err := fs.ReadFile("crt/alipay/alipay_public_key.txt") if err != nil { return nil, fmt.Errorf("支付宝公钥加载失败 Err=%v", err) } // HTTP客户端 httpClient := &http.Client{ Timeout: 30 * time.Second, Transport: otelhttp.NewTransport( http.DefaultTransport, otelhttp.WithSpanNameFormatter(func(operation string, r *http.Request) string { return r.Method + " " + r.URL.Path }), ), } // 初始化支付宝客户端 client, err := alipay.New(i.cfg.Alipay.AppId, string(appPrivateKey), true, alipay.WithHTTPClient(httpClient)) if err != nil { return nil, fmt.Errorf("支付宝客户端初始化失败 Err=%v", err) } err = client.LoadAliPayPublicKey(string(alipayPublicKey)) if err != nil { return nil, fmt.Errorf("支付宝客户端加载公钥失败 Err=%v", err) } log.Printf("[INFO] 支付宝客户端 初始化成功") return client, nil }
非常感谢您的回答. 现在的问题是初始化支付宝没有问题,可以收款. 问题是不能使用查询接口去查询交易信息.退款接口也无法使用.报的都是同样的错 {"error": "crypto/rsa: verification error"}
那就说明初始化应该是有问题的呀,公私钥是不是弄反了诸如此类的,我这边都是没问题的,查询接口、退款接口都是要请求支付宝后台的,alipay.TradeAppPay 调用成功只是本地生成的,并没有请求
提供个我的代码给你借鉴,也是只开了公钥和私钥
func (i *Instance) loadAlipayClient(_ context.Context) (*alipay.Client, error) { // 加载应用私钥 appPrivateKey, err := fs.ReadFile("crt/alipay/app_private_key.txt") if err != nil { return nil, fmt.Errorf("应用私钥加载失败 Err=%v", err) } // 加载支付宝公钥 alipayPublicKey, err := fs.ReadFile("crt/alipay/alipay_public_key.txt") if err != nil { return nil, fmt.Errorf("支付宝公钥加载失败 Err=%v", err) } // HTTP客户端 httpClient := &http.Client{ Timeout: 30 * time.Second, Transport: otelhttp.NewTransport( http.DefaultTransport, otelhttp.WithSpanNameFormatter(func(operation string, r *http.Request) string { return r.Method + " " + r.URL.Path }), ), } // 初始化支付宝客户端 client, err := alipay.New(i.cfg.Alipay.AppId, string(appPrivateKey), true, alipay.WithHTTPClient(httpClient)) if err != nil { return nil, fmt.Errorf("支付宝客户端初始化失败 Err=%v", err) } err = client.LoadAliPayPublicKey(string(alipayPublicKey)) if err != nil { return nil, fmt.Errorf("支付宝客户端加载公钥失败 Err=%v", err) } log.Printf("[INFO] 支付宝客户端 初始化成功") return client, nil }
非常感谢您的回答. 现在的问题是初始化支付宝没有问题,可以收款. 问题是不能使用查询接口去查询交易信息.退款接口也无法使用.报的都是同样的错 {"error": "crypto/rsa: verification error"}
那就说明初始化应该是有问题的呀,公私钥是不是弄反了诸如此类的,我这边都是没问题的,查询接口、退款接口都是要请求支付宝后台的,alipay.TradeAppPay 调用成功只是本地生成的,并没有请求
公私钥反了,应该不会初始化成功. 是不是咱俩用的版本不同? 我这个版本有bug? 我用是比较新的版本上个月clone的
就是最新版呀,v3.2.21
就是最新版呀,v3.2.21
那就奇怪了,你的查询接口代码可以看一下嘛
辛苦有时间的时候帮忙看一下,是哪里的问题.查询和退款接口都不能用,只有付款接口是正常的.验证签名的证书在哪里获取如何配置.非常感谢
苯猪 @.***
------------------ 原始邮件 ------------------ 发件人: "smartwalle/alipay" @.>; 发送时间: 2024年5月22日(星期三) 上午8:28 @.>; @.**@.>; 主题: Re: [smartwalle/alipay] 调用支付宝支付查询接口TradeQuery (Issue #202)
签名验证的问题,确认验证签名的证书都是正常的
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
结合上文给你的client代码
func queryAlipayPay(ctx context.Context, item *model.UserPayInfo) (payStatus uint16, err error) {
// 获取支付宝客户端
client := common.Pay.GetAlipayClient(ctx)
// 查询订单
body := alipay.TradeQuery{
OutTradeNo: item.TradeNo,
}
query, err := client.TradeQuery(ctx, body)
common.Logger.Infof(ctx, "支付宝支付查询结果: %v", tool.JsonMarshalString(query))
if err != nil {
common.Logger.Error(ctx, fmt.Sprintf("支付宝支付查询接口失败 Err=%v", err))
return 0, errcode.ThirdPartError.ReplaceMessage("支付宝支付查询接口失败")
}
if query.IsFailure() && query.SubCode == "ACQ.TRADE_NOT_EXIST" { // 订单不存在,支付宝业务返回码为ACQ.TRADE_NOT_EXIST
return consts.AlipayOrderStateToStatus("TRADE_NOT_EXIST"), nil
}
return consts.AlipayOrderStateToStatus(string(query.TradeStatus)), nil
}
确定你的支付宝公钥是正确的,是从支付宝开放平台获取的,不是你自己生成的。
是公钥问题.重新去支付宝开放平台复制粘贴了一遍可以了.非常感谢二位的耐心解答.🙏
在调用支付宝查询接口的时候, 设置了正确的接口加密内容密钥 SetEncryptKey("SEopbMx8+owerwW098oGEg==") 返回结果还是报错 {"error": "crypto/rsa: verification error"} 使用的支付宝公钥模式,不是证书模式.收款没有问题.就是无法查询订单信息.