uni-app 安卓微信支付完成app自动返回且不走支付成功回调
uni-app 安卓微信支付完成app自动返回且不走支付成功回调
微信支付问题
正常情况下在完成微信支付后,会跳转到微信内带有返回商户的按钮页面,然后用户点击返回商户按钮,然后将会跳转回uni-app并执行支付成功的回调函数
但目前使用微信支付完成后(扣款成功),微信没有跳转到带有返回商户按钮的页面而是直接返回了uni-app且uni-app未执行支付成功的回调函数
同时测试了支付宝支付,发现支付宝在支付成功后也自动返回了,但是执行了支付成功回调,现在时一点头绪也没有,支付完成后自动返回尚不清楚是uni-app内部问题还是我写的代码有问题(但我感觉我的上层代码应该影响不到底层代码吧)
求大佬能指点一二
信息表
类别 | 详情 |
---|---|
开发环境 | uni-app |
版本号 | 未知 |
项目创建 | 未知 |
问题得到解决,我app使用了uni-push,uni-push有个强制唤醒的参数配置,配置此参数后,app在后台的情况下会被强制唤醒到前台。
我app在支付成功后,后台收到微信支付成功通知后会推送一条带有强制唤醒参数的通知消息给app,导致app直接被唤醒到前台,而微信支付成功后会进入带有返回商户按钮的页面,并需要用户点击返回商户按钮时,uni-app才能正常收到支付成功的事件并执行回调函数
亲,您报bug/咨询问题的姿势好像不对哦,详情:https://ask.dcloud.net.cn/article/38139
什么版本的编辑器,什么手机,什么安卓/苹果版本这些都需要提供清楚。
问题已经解决,是因为后台在收到微信服务器支付成功通知时给我发送了一条带有强制唤醒app的通知消息,导致app直接被唤醒到前台
在处理 uni-app 中安卓微信支付完成后自动返回且不走支付成功回调的问题时,通常这涉及到支付结果的通知和处理。微信支付通常有两种方式来确认支付结果:前端主动轮询和后端异步通知。
首先,确保你已经正确配置了微信支付的参数,并且前端和后端都能正确处理这些参数。以下是一些可能的代码示例和思路,帮助你解决这个问题。
前端代码(uni-app)
在 uni-app 中,你可以使用 uni.requestPayment
方法发起支付请求。支付完成后,理论上应该触发支付结果的回调,但如果你遇到没有触发回调的情况,可以尝试使用轮询的方式来检查支付状态。
uni.requestPayment({
...paymentOptions, // 包含appId, timeStamp, nonceStr, package, signType, paySign等参数
success: (res) => {
console.log('支付成功:', res);
// 在这里处理支付成功后的逻辑
},
fail: (err) => {
console.error('支付失败:', err);
// 支付失败处理
// 可以尝试轮询支付状态
checkPaymentStatus();
}
});
function checkPaymentStatus() {
// 假设你有一个后端接口可以查询支付状态
uni.request({
url: 'https://your-backend-api/checkPaymentStatus',
method: 'POST',
data: {
orderId: 'your-order-id' // 订单号
},
success: (response) => {
if (response.data.status === 'SUCCESS') {
// 支付成功,处理支付成功逻辑
} else {
// 支付未完成,继续轮询
setTimeout(checkPaymentStatus, 5000); // 每5秒轮询一次
}
},
fail: (error) => {
console.error('查询支付状态失败:', error);
}
});
}
后端代码(示例,Node.js)
后端需要处理微信支付的异步通知,并且提供一个接口供前端轮询支付状态。
// 假设你使用的是Express框架
app.post('/notify', async (req, res) => {
const xmlData = parseXML(req.body); // 解析XML数据
// 验证签名等安全性检查
if (verifySignature(xmlData)) {
// 根据返回的数据更新订单状态
updateOrderStatus(xmlData.out_trade_no, 'SUCCESS');
// 返回微信服务器成功响应
res.send(generateSuccessXML());
} else {
res.send(generateFailXML());
}
});
app.post('/checkPaymentStatus', async (req, res) => {
const orderStatus = await getOrderStatus(req.body.orderId);
res.json({ status: orderStatus });
});
注意:以上代码仅为示例,实际开发中需要根据具体的业务逻辑和安全要求进行调整。确保在生产环境中妥善处理错误和异常情况,以及保护好敏感信息。