uni-app在APP端可以很方便地调起微信APP支付,官方给出的调用代码:
uni.requestPayment({
"provider": "wxpay",
"orderInfo": {
"appid": "wx499********7c70e", // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
"noncestr": "c5sEwbaNPiXAF3iv", // 随机字符串
"package": "Sign=WXPay", // 固定值
"partnerid": "148*****52", // 微信支付商户号
"prepayid": "wx202254********************fbe90000", // 统一下单订单号
"timestamp": 1597935292, // 时间戳(单位:秒)
"sign": "A842B45937F6EFF60DEC7A2EAA52D5A0" // 签名,这里用的 MD5 签名
},
success(res) {},
fail(e) {}
})
其中orderInfo
字段是由后台返回的。
后台先调用统一下单接口,成功则返回预支付订单信息。
需要注意的是,上面orderInfo
中的sign
既不是统一下单时传到微信的签名,也不是微信返回预支付订单中的那个签名,而是用微信返回的预支付订单中的信息,二次签名。签名不对的话在调起支付时会报支付验证签名失败
错误!
参与签名的字段有appid,noncestr,package,partnerid,timestamp
,重新排序后加上key
进行md5
签名,得到32位大写md5值,但是传回前端时,要截取前30位!要截取前30位!要截取前30位!
这是一个大坑,不然会一直报支付验证签名失败
错误!