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));
}
});
- 发布:2024-03-30 11:22
- 更新:2024-04-01 11:24
- 阅读:139
产品分类: 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: '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¬ify_url=null&return_url=null&sign_type=RSA2×tamp=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));
}
});
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¬ify_url=null&return_url=null&sign_type=RSA2×tamp=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×tamp=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¬ify_url=null&version=1.0&app_auth_token=null&encrypt_type=null&return_url=null&auth_token=null&app_id=2021002117687436&sign_type=RSA2×tamp=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参数不一致,导致支付宝验签失败,无法发起支付。
5 个回复
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 (作者)
这个确实可以调通啊,orderInfos是老接口的格式,现在支付宝官方是2.0接口了,而且加密算法也不支持rsa,而是rsa2。能不能搞个2.0接口alipay.trade.app.pay的demo呢?
t***@163.com (作者)
我这边反复测试了,用老版本的方式也不行,因为密钥已经是rsa2格式的密钥,不是rsa,rsa格式的公钥和私钥支付宝后台不能设置了。用老版本参数传参,返回的是“系统繁忙”的错误,orderInfo示例值如下:_input_charset="UTF-8"&body="1"&it_b_pay="1d"¬ify_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
我们目前服务器端的代码是https://github.com/dcloudio/H5P.Server/blob/master/payment/alipay/index.php ,你那里可以参照一下
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 里面,您可以参照一下