t***@163.com
t***@163.com
  • 发布:2024-03-30 11:22
  • 更新:2024-04-01 11:24
  • 阅读:139

【报Bug】uni.requestPayment提交给支付宝的报文多了一些不必要的参数且sign似乎传参错误

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows server 2016 Data Center

HBuilderX类型: 正式

HBuilderX版本号: 4.07

手机系统: Android

手机系统版本号: Android 10

手机厂商: 荣耀play5

手机机型: 荣耀play5

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

uni.requestPayment({
provider: 'alipay',
orderInfo: this.str_pay,
success: function(res) {
console.log('success:' + JSON.stringify(res));
},
fail: function(err) {
console.log('fail:' + JSON.stringify(err));
}
});

操作步骤:

uni.requestPayment({
provider: 'alipay',
orderInfo: 'app_access_token=null&app_auth_token=null&app_id=2021002117687436&auth_token=null&biz_content={"body":"1","out_trade_no":"202403301100728","product_code":"QUICK_MSECURITY_PAY","seller_id":"","subject":"NIKEHOODLANDSUEDE","timeout_express":"30m","total_amount":"434.70"}&charset=utf-8&format=xml&method=alipay.trade.app.pay&notify_url=null&return_url=null&sign_type=RSA2&timestamp=2024-03-30 11:00:38&version=1.0&sign=dFfHFOMGN2xAMIR5n+CZ7qPx6DYXrIfKhi0sEbiyy22mlQo3uo2RSJmz37+bh4kzg6OwKgoY5visa7x/4mODpMyWFVLxyPn6Vs2pxNPZJXwD1BQJzNCPla0viiZgZ7nTaYTRjnBF8pRlOo9t81uqBggBvTlQduUMcr1HRLdyiiZ8r6x3vJR/LigfvJW3GBVoV1RWq/vEPkzg0qZmUDghsfsgXeoUTYlOFXwLzVf47gZHd5HZLFbJLpyF/w0Hy1YrTmUyxy2ziRF2vlg9CJ0LlaLB038KAjmH2rPgD5JC+1EuPcxfw/ZcCL0Ke0JqHiu/AByW/dYBON/Xxxl7jR9Z+A==',
success: function(res) {
console.log('success:' + JSON.stringify(res));
},
fail: function(err) {
console.log('fail:' + JSON.stringify(err));
}
});

预期结果:

正确发起支付

实际结果:

报错,提示商家订单参数异常

bug描述:

uni.requestPayment提交的支付宝orderInfo参数为:app_id=202100211768&biz_content={"body":"1","out_trade_no":"202403301100728","product_code":"QUICK_MSECURITY_PAY","seller_id":"","subject":"NIKEHOODLANDSUEDE","timeout_express":"30m","total_amount":"434.70"}&charset=utf-8&format=json&method=alipay.trade.app.pay&sign_type=RSA2&timestamp=2024-03-30 11:00:38&version=1.0&sign=dFfHFOMGN2xAMIR5n+CZ7qPx6DYXrIfKhi0sEbiyy22mlQo3uo2RSJmz37+bh4kzg6OwKgoY5visa7x/4mODpMyWFVLxyPn6Vs2pxNPZJXwD1BQJzNCPla0viiZgZ7nTaYTRjnBF8pRlOo9t81uqBggBvTlQduUMcr1HRLdyiiZ8r6x3vJR/LigfvJW3GBVoV1RWq/vEPkzg0qZmUDghsfsgXeoUTYlOFXwLzVf47gZHd5HZLFbJLpyF/w0Hy1YrTmUyxy2ziRF2vlg9CJ0LlaLB038KAjmH2rPgD5JC+1EuPcxfw/ZcCL0Ke0JqHiu/AByW/dYBON/Xxxl7jR9Z+A==
APP端发起支付请求,报错:商家订单参数异常,请重新发起支付
用支付宝诊断工具,报错:验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配
支付宝收到的报文是:
http://localhost:80?charset=utf-8&biz_content={\"body\":\"1\",\"out_trade_no\":\"202403301100728\",\"product_code\":\"QUICK_MSECURITY_PAY\",\"seller_id\":\"\",\"subject\":\"NIKEHOODLANDSUEDE\",\"timeout_express\":\"30m\",\"total_amount\":\"434.70\"}&method=alipay.trade.app.pay&app_access_token=null&sign=&format=xml&notify_url=null&version=1.0&app_auth_token=null&encrypt_type=null&return_url=null&auth_token=null&app_id=2021002117687436&sign_type=RSA2&timestamp=2024-03-30 11:00:38
比较之后发现:1、sign参数似乎变成了
,没有正确发送提供的sign
2、多了app_auth_token、encrypt_type、return_url、auth_token、app_access_token这几个参数
3、format原本是json,这里却变成了xml
综上,uni.requestPayment这个接口跟实际提供的orderInfo参数不一致,导致支付宝验签失败,无法发起支付。

2024-03-30 11:22 负责人:无 分享
已邀请:
DCloud_Android_MHF

DCloud_Android_MHF

以下是可以跑通的demo,请对比一下orderinfo返回值
pay() {
uni.showLoading({
title: "请求中..."
})
uni.request({
url: 'https://demo.dcloud.net.cn/payment/alipay/?total=0.01',
method: 'GET',
timeout: 6000,
success: (res) => {
console.log(res.data)
uni.hideLoading()
uni.requestPayment({
provider: "alipay",
orderInfo: res.data as string,
fail: (res : RequestPaymentFail) => {
console.log(JSON.stringify(res))
this.errorCode = res.errCode
uni.showToast({
icon: 'error',
title: 'errorCode:' + this.errorCode
});
},
success: (res : RequestPaymentSuccess) => {
console.log(JSON.stringify(res))
uni.showToast({
icon: 'success',
title: '支付成功'
});
}
} as RequestPaymentOptions)
},
fail: () => {
uni.hideLoading()
},
});
},

t***@163.com

t***@163.com (作者)

这个确实可以调通啊,orderInfos是老接口的格式,现在支付宝官方是2.0接口了,而且加密算法也不支持rsa,而是rsa2。能不能搞个2.0接口alipay.trade.app.pay的demo呢?

t***@163.com

t***@163.com (作者)

我这边反复测试了,用老版本的方式也不行,因为密钥已经是rsa2格式的密钥,不是rsa,rsa格式的公钥和私钥支付宝后台不能设置了。用老版本参数传参,返回的是“系统繁忙”的错误,orderInfo示例值如下:_input_charset="UTF-8"&body="1"&it_b_pay="1d"&notify_url="http://istock.goldbrantech.com"&out_trade_no="202403302031625"&partner="2021002117687436"&payment_type="1"&service="mobile.securitypay.pay"&show_url="http://istock.goldbrantech.com"&sign_type="RSA"&subject="NIKEHOODLANDSUEDE"&total_fee="434.70"&sign="TxWhpshga1mlU5HvDy+HYkWHqPAlaX3XDVPrMUQ5SIXMLYulnWveBn4pd50NGCofXbCMEC1CRaYAxunPPlvwdpM0Dbt0XkGeHF+AAMF5+yMCx8R0slQ3Ppp/vY/MI08+jTHCpwMp1ia8LdPp6W6mL6S2hQnPlrPoq/yDqlcHKqPJjwbHBXUwSaT3eKqmS8Da7atqEbcJ75oNfrkhT/82NLiBMBToln4folbUFyYBojPrGUh45Wa8pTcqHU+F/usmPsi7aPuKg3/Z+28RZySMIOft2LB2Jvss7bAe6B1bl+OSanEy9Ik57tSak9TTnzbu7VfogpnPN1R9BdwFw8+hVg=="

因此还希望能够给出2.0版本的支付调用示例,或者进一步帮助分析下上老版本调用出错的原因,非常感谢

DCloud_Android_MHF

DCloud_Android_MHF

我们目前服务器端的代码是https://github.com/dcloudio/H5P.Server/blob/master/payment/alipay/index.php ,你那里可以参照一下

DCloud_Android_MHF

DCloud_Android_MHF

另外https://demo.dcloud.net.cn/payment/alipayrsa2/?total=0.01 这个接口对应的是支付宝官方的2.0接口,demo也是可以调通过的,对应的服务器端代码在https://github.com/dcloudio/H5P.Server/blob/master/payment/alipayrsa2/index.php 里面,您可以参照一下

要回复问题请先登录注册