uni-app ios端无法唤起微信支付
uni-app ios端无法唤起微信支付
安卓微信支付是没有问题的,就iOS端使用微信支付没有任何反应,什么错也没报。
首先:既然安卓能微信支付说明后台返回的参数是没有问题的。
其次:iOS比安卓多了一个通用链接,我确定通用链接配置是没有问题的。
目前就完全不知道为什么iOS端的微信支付会不行,一点反应都没有,也没有报错。这个问题已经卡了几天了,哪位大佬能指教一下哦。
appid和package直接写确认的值,不用返回的结果值,其他返回值都是string类型,我这边这样改是可以了。这个问题也困扰我好几天,各种配置都排查了好几遍,没想到这样改成功了,-_-||,希望能帮助到大家
orderInfo: {
appid: “wx2******ad2f4”,
noncestr: String(this.massageData.noncestr),
package: “Sign=WXPay”, // 固定值
partnerid: this.massageData.partnerid, // 微信支付商户号
prepayid: this.massageData.prepayid, // 统一下单订单号
timestamp: this.massageData.timestamp, // 时间戳(单位:秒)
sign: String(this.massageData.sign), // 签名,这里用的 MD5 签名
},
解决了,签名和商户号加了个toString
同问
同问
同问
同问,我有报错是-2
同问
已经解决,注意时间戳的长度。当然前提是你的安卓端已经走通。
ios端支付界面首次进入的时候不会更改url,导致与公众号接口url不一致,我的解决方法是在支付的时候加一个平台判断:
if(uni.getSystemInfoSync().platform===“ios”){
uni.setStorageSync(‘reload’,‘true’);
location.reload();
}
当然还有本地存储付款信息;
然后在onload里面判断是否是ios重载的页面,重新付款,这时候url就正确了:
if(uni.getStorageSync(‘reload’)==‘true’){
uni.setStorageSync(‘reload’,’’);
that.submit();
}
究极解决办法:
if (location.href.indexOf(’?#’) < 0) {
location.href = location.href.replace(’#’, ‘?#’)
}
弯路走太多了,只JSAIP支付目录,只设置顶级域名就行,例:https://www.test.com/
同问,有人解决了吗
同问,有人解决了,告诉一下,谢谢!
1、安卓支付调通
2、IOS微信登陆/分享功能成功
3、微信支付不报错也不调起
console.log(“prepay”,1)
uni.requestPayment({
provider: ‘wxpay’,
orderInfo: {
sign: res.data.sign,
prepayid: res.data.prepayId,
partnerid: res.data.partnerId,
appid: res.data.appId,
packagevalue: res.data.packageValue,
timestamp: res.data.timeStamp,
noncestr: res.data.nonceStr
},
success:(res) => {
getApp().showToast(“支付成功”, ‘success’)
console.log(“prepay”,“success”, JSON.stringify(res))
res.orderId = orderId
uni.report(‘buyBbSuccess’, JSON.stringify(res))
this.reqPayStatus(orderId)
this.dismiss()
},
fail: function(err) {
console.log(‘fail:’ + JSON.stringify(err));
uni.report(‘buyBbFailWx’, JSON.stringify(err))
},
complete:(com)=>{
console.log(‘complete’ + JSON.stringify(com));
}
});
console.log(“prepay”,2)
prepay1和prepay2都打印了,支付中的success和fail、complete都不执行
【====================求救==================】
已解决,由于package在java中时保留字,后端返回packageValue,所以我以为就时叫这名字,关键是,安卓竟然过了
和楼上遇到一模一样的问题,谢谢
遇到同样的问题,排查后发现后端返回的是nonceStr而不是noncestr,但是最奇怪的是安卓能够调起支付,导致排查很久都没发现。希望能帮助到相同问题的人。
发起支付的orderInfo中的参数都是必填项,且参数名必须全小写,否则ios无法触发uni.requestPaymentAPI。
//订单对象,从服务器获取
var orderInfo = {
“appid”: “wx4997c70e", // 应用ID(AppID)
“partnerid”: "14852", // 商户号(PartnerID)
“prepayid”: "wx202254*fbe90000”, // 预支付交易会话ID
“package”: “Sign=WXPay”, // 固定值
“noncestr”: “c5sEwbaNPiXAF3iv”, // 随机字符串
“timestamp”: 1597935292, // 时间戳(单位:秒)
“sign”: “A842B45937F6EFF60DEC7A2EAA52D5A0” // 签名,这里用的 MD5 签名
};
// 大坑
const os = uni.getSystemInfoSync().osName
if (os === ‘android’) {
orderInfo[‘nonceStr’] = data.nonceStr
} else {
orderInfo[‘noncestr’] = data.nonceStr
}
{
“provider”: “wxpay”,
“orderInfo”: {
“sign”: “2D26F932D***********8B84D3”,
“prepayid”: “wx31047dea80001",
“partnerid”: "1696”,
“appid”: “wx90718",
“package”: “Sign=WXPay”,
“timestamp”: “1735625745”,
“noncestr”: "nxK4huH3i”
}
}
调试通过
在解决uni-app在iOS端无法唤起微信支付的问题时,通常涉及几个关键步骤:确保微信支付配置正确、集成微信支付SDK、以及正确的调用流程。以下是一个简化的代码案例,展示如何在uni-app中集成和调用微信支付。
1. 配置微信支付参数
首先,确保你已经在微信支付商户平台获取了必要的参数,包括appid
、mch_id
、key
、notify_url
等,并在uni-app的manifest.json
或对应的支付配置文件中正确设置。
2. 集成微信支付SDK
在uni-app中,你可能需要使用uni的插件机制或者原生代码桥接来集成微信支付SDK。这里假设你已经通过某种方式集成了微信支付SDK。
3. 调用微信支付
以下是一个简化的调用微信支付的示例代码,使用JavaScript在uni-app中实现:
// 假设已经通过某种方式获取了prepay_id等支付参数
const paymentParams = {
appId: 'your-app-id', // 微信开放平台AppID
timeStamp: 'timestamp', // 时间戳,字符串格式
nonceStr: 'nonceStr', // 随机字符串,不长于32位
package: 'prepay_id=your-prepay-id', // 统一下单接口返回的 prepay_id 参数值,参数格式如:prepay_id=***
signType: 'MD5', // 签名方式,默认为 'SHA1',使用 'MD5' 需要在微信商户平台设置
paySign: 'your-pay-sign' // 签名
};
// 调用微信支付
uni.requestPayment({
...paymentParams,
success: (res) => {
console.log('支付成功', res);
},
fail: (err) => {
console.error('支付失败', err);
}
});
4. 注意事项
- 签名校验:确保
paySign
是按照微信支付文档中的规则生成的,包括对所有参数(不包括sign
本身)进行字典序排序、拼接成字符串、使用商户密钥进行加密等步骤。 - 证书问题:iOS端调用微信支付可能需要配置证书,确保你的证书已经正确上传到微信支付商户平台,并且在代码中正确引用。
- 调试与日志:使用Xcode的调试工具查看具体的错误信息,微信支付失败时通常会返回详细的错误码和描述,这些信息对于定位问题非常关键。
如果以上步骤仍然无法解决问题,建议检查微信支付商户平台的配置,或者联系微信支付的技术支持获取更专业的帮助。