react-native-wechat-lib
react-native-wechat-lib copied to clipboard
安卓支付完成后拿不到回调
已按该文档进行了配置,RN端也按API文档写了:
DeviceEventEmitter.addListener('WeChat_Resp', resp => {
console.log('res:', resp)
if (resp.type === 'WXLaunchMiniProgramReq.Resp') { // 从小程序回到APP的事件
miniProgramCallback(resp.extMsg)
} else if (resp.type === 'SendMessageToWX.Resp') { // 发送微信消息后的事件
sendMessageCallback(resp.country)
} else if (resp.type === 'PayReq.Resp') { // 支付回调
payCallback(resp)
}
})
但是运行不到支付回调代码这儿。请问我是还漏了什么吗?
虽然我也在找问题,但是我觉得你监听的方法不对。因为
DeviceEventEmitter.addListener('WeChat_Req', resp => { emitter.emit(resp.type, resp); });
body[@"type"] = @"LaunchFromWX.Req";
body[@"lang"] = launchReq.lang;
然而我监听LaunchFromWX.Req 也获取不到。。
@vpjacob 其实这两个我都监听了😂只不过由于README中WeChat_Req'
的注释是“从小程序回到APP的事件”,我就没列在这个支付相关问题下
是啊,我都接收不到。。
你做微信打开APP没有,安卓冷启动不可以,后台运行着才能打开APP
onreq 难道只有自己写通讯了吗😀
是啊,我都接收不到。。
你做微信打开APP没有,安卓冷启动不可以,后台运行着才能打开APP
"做微信打开APP没有"是什么意思?
检查一下有添加 WXPayEntryActivity 吗?
按照 https://github.com/little-snow-fox/react-native-wechat-lib/blob/master/docs/build-setup-android.md 每一步配置了以后(WXPayEntryActivity 和 WXEntryActivity 和都包含),微信支付可以成功,并且可以跳转回 app。 但是
- Android 支付成功或者用户取消支付从微信跳转回 app 后,
then
和catch
都接收不到。iOS 没有碰到这个问题。
WeChat.pay(payload)
.then(res => {
console.log(res); // Not reach here
})
.catch(err => {
console.log(err); // Not reach here
});
- 另外,我尝试根据 https://github.com/little-snow-fox/react-native-wechat-lib#%E5%9B%9E%E8%B0%83%E4%BA%8B%E4%BB%B6%E8%AE%A2%E9%98%85
加了
DeviceEventEmitter.addListener('WeChat_Req', req => {
console.log(req); // Not reach here
});
DeviceEventEmitter.addListener('WeChat_Resp', resp => {
console.log(resp); // Not reach here
});
在 Android 用户支付成功或者用户取消支付时,这两个也同样没有返回任何东西。
测的是 Pixel 4a 实体机和 Pixel 4 的模拟器,都是 Android 11.0 (API level 30)。
取消支付收不到回调咋解决的老铁 @Hongbo-Miao
@gdoudeng 我当时卡在这里因为手机开发对我比较新。我同事 @SidneyTTW 后来用了个其他方法,我请他在这里帮着答下。
@gdoudeng 当时没调整这个库,而是直接监听了重新打开app的事件,然后从自己app的后台拿到最新的支付状态。
好处是除了这里的android微信支付成功并且点了微信里的按钮,也没回调
的问题,还能解决微信支付成功后直接关闭微信
或者刚转跳到微信就直接关闭微信
之类的情况。
坏处是对alipay有些极少见的正确支付的情况没法监测到,比如,转跳到支付宝后,没支付,手动切换回原来的app,过了一会儿想起来了又手动切换到alipay支付
。这类情况用户在自己的app里直接看到的一开始可能有问题,但只要app是以后台数据为准的,刷新后应该就没问题了
- 监听是用
react-native
的AppState
完成的,AppState.addEventListener("change", 你的回调函数);
- 打开app,回调函数的参数值是字符串
active
- 查询后台状态就根据你自己的后台来了
然后记得要注意的是:
- 这个回调函数被调用时,如果立刻问自己的后台要状态,可能因为微信支付通知后台是异步的,当时后台还不知道已经成功了。建议要么等一会儿再问后台要状态,要么带点间隔重试几次
- 如果对每次支付,都新加了listener
AppState.addEventListener("change", 你的回调函数);
,要记得每次新的支付前要AppState.removeEventListener("change", 你原来的回调函数);
,建议是上次支付成功/失败时立即removeEventListener
感谢🙏