uni-app 报 “errMsg”: “requestPayment:fail errors”,调不起微信,返回 -1 大部分原因出在包名,签名,和参数部分为空。
var orderInfo = {
"appid":res.map.appid,
"noncestr":res.map.nonceStr,
"package":res.map.package,
"partnerid":res.map.partnerid,
"prepayid":res.map.prepayid,
"timestamp":res.map.timestamp,
"sign":res.map.sign
}
uni.requestPayment({
provider: 'wxpay',
orderInfo: orderInfo, //微信、支付宝订单数据
success: function (res) {
console.log("微信调起支付成功")
console.log(res);
},
fail: function (err) {
console.log("微信调起支付失败")
console.log(err);
}
});
首先,你必须确定appid,noncestr,package,partnerid,prepayid,timestamp,sign 都不为空或者不为undefind。
上传之前打印一下,确保每个参数都不为空(先不考虑其正确性)。
如果是微信支付,上传参数需要是 Object 对象,而不能是 String 类型。
不然可能只会出现一个加载框,就是不跳转到支付页面。
包名和签名需要在微信开放平台配置,不过这些一般后端来做,但是你需要为其提供正确的包名和签名。包名比较容易获取,如下图。
在微信开放平台配置。
下载签名获取工具:点击下载
下载完成后是一个app,安装到手机上。另外再安装上咱们这个需要测试的包。
输入包名,会自动获取到签名,复制下载配置到微信开放平台即可。
既是上面配置正确,也没办法调起支付,你需要打一个包测试,或者使用自定义基座测试(有打印信息)。
自定义基座配置教程地址:https://ask.dcloud.net.cn/article/35115
一般选择后会自动添加相应支付权限,老版本可能需要自己选择。
登录鉴权功能按需添加。
这里的 appid 和 appsecret 在微信开放平台获取。
个别时候,缓存也会造成支付失败,比如包名和签名之前测试过,后来又修改了等。
appid,noncestr,package,partnerid,prepayid,timestamp,sign 这些参数都为小写,注意大小写。
var orderInfo = {
"appid":res.map.appid,
"noncestr":res.map.nonceStr,
"package":res.map.package,
"partnerid":res.map.partnerid,
"prepayid":res.map.prepayid,
"timestamp":res.map.timestamp,
"sign":res.map.sign
}
像 签名失败 这类,还有商户号绑定,app支付开通等问题就需要配合后端人员一起解决了。