微信支付成功以后没有收到回调
源码index.js中,标记出来的地方没有执行。
需要添加WXPayEntry的相关代码来转发回调~
我也是碰到同样的问题,收不到回调, 请问你现在解决了吗?
@yorkie 我的Android的支付也遇到这个问题,跟着文档添加了WXPayEntryActivity 也不行、 能正常支付,就是回调不了。直接闪一下就没了。
const result = await WeChat.pay(
{
partnerId: res.partnerid, // 商家向财付通申请的商家id,备注:此处appid就是接口返回的商家id
prepayId: res.prepayid, // 预支付订单
timeStamp: res.timestamp.toString(), // 时间戳,防重发
nonceStr: res.noncestr, // 随机串,防重发
package: res.package?res.package:"Sign=WXPay", // 商家根据财付通文档填写的数据和签名
sign: res.sign // 商家根据微信开放平台文档对数据做的签名
}
);
alert('11111111111111111');// 走不到这一步
alert(JSON.stringify(result.errCode));
alert(result.errCode);
版本1.9.2 、1.9.4都试过了,回调失败。
@yorkie 调用了分享的,直接闪退了。但是支付是可以的,只是回调不了。、
仔细检查下 WXPayEntryActivity 中的类名与你自己的 gradle 的配置是否一致。
你是说这里的配置吗? Add following lines into android/settings.gradle
include ':RCTWeChat' project(':RCTWeChat').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-wechat/android') Add following lines into your android/app/build.gradle in section dependencies
dependencies { compile project(':RCTWeChat') // Add this line only. }
我使用react-native link 生成的和这个不一样,但是换成这个也是一样的。 都回调不了
react-native link生成的: dependencies { // react-native link 自动生成begin compile project(':react-native-wechat') // react-native link 自动生成end // 文档 // compile project(':RCTWeChat') ... }
settings.gradle : rootProject.name = 'fujj' // react-native link 自动生成 begin include ':react-native-wechat' project(':react-native-wechat').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-wechat/android') // react-native link 自动生成 end // 文档 //include ':RCTWeChat' //project(':RCTWeChat').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-wechat/android') include ':app'
@yorkie WXPayEntryActivity 就是按照文档编写的。import android.app.Activity; import android.os.Bundle; import com.theweflex.react.WeChatModule;
public class WXEntryActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WeChatModule.handleIntent(getIntent()); finish(); } }
@yorkie react-native-wechat的index.js 我加了弹框,发现DeviceEventEmitter.addListener 没有监听到,只弹出1111,2222没有弹出 alert('11111'); DeviceEventEmitter.addListener('WeChat_Resp', resp => { alert('2222'); emitter.emit(resp.type, resp); });
@chunecai 所以问题还是出在 Android 层,微信端的消息没有发送到应用这边,这中间可能存在的问题有很多,比如签名不正确、WXPayEntryActivity配置不正确等,你可以尝试在 Java 代码里定位下问题。
@yorkie
https://github.com/yorkie/react-native-wechat/issues/225
使用react-native link react-native-wechat 的时候支付还能回来自己的App,只是没继续往下走,使用文档的RCTWeChat 直接App闪退了。
能用 Android Studio 或者 adb 抓一下在支付的时候,系统的日志吗?这样方便分析问题
@yorkie 非debug模式,都是签名打包真机测试的。 使用react-native run-android 签名不一致,没找到debug 用签名的方式。
支付取消后直App 重启刷新了,没有走到这个方法 public void onResp(BaseResp baseResp)
没见到弹出数据
public class WXPayEntryActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// 位置1
super.onCreate(savedInstanceState);
WeChatModule.handleIntent(getIntent());
finish();
}
}
@chunecai 请问位置1处执行到了吗?
貌似一样没执行,直接闪一下,刷新了webview重新载入了
那就是 WXPayEntryActivity 没有配置成功,给我一个你的 AndroidManifest.xml 相关代码。

proguard-rules.pro文件里有添加下面的代码吗:
-keep class com.tencent.mm.sdk.** {
*;
}
另外:
貌似一样没执行,直接闪一下,刷新了webview重新载入了
这里为什么会有 WebView,你是说跳转到微信支付页面是 WebView 的页面吗?
@yorkie
proguard-rules.pro文件里有添加下面的代码吗:
-keep class com.tencent.mm.sdk.** { *; } 有添加; 微信支付的页面是webview页面,先使用webview调用rn方法,rn调用微信支付,成功后再调用webview的js方法。 现在的情况是: webview调用rn方法--成功; rn调用微信支付--成功; 微信支付回调--失败
在 wxapi 前面使用完整路径试试:com.fujiangjia.mm.wxapi.WXEntryActivity ?
另外检查下:build.gradle 中的applicationId 如 https://github.com/attentiveness/reading/blob/master/android/app/build.gradle#L97
这里找到一个相关的 issue 及解决方法:https://github.com/PingPlusPlus/pingpp-android/issues/29#issuecomment-227616396
@yorkie 试过了,还是不行,applicationId和package 都没有写错,都是一样的 com.fujiangjia.mm Activity 写全路径也不行。
@yorkie 有个问题, 我用chrome浏览器的Js debug 调试的时候,支付有回调了。但是打成apk包之后又不行了。 我加了监听。
componentWillMount() {
// 处理支付回调结果
WeChat.addListener('PayReq.Resp', (res) => {
alert('这里是支付回调====='+res);
if (res.errCode === 0) {
alert('===支付成功');
} else if (res.errCode === -1) {
alert('===支付失败,请稍后尝试');
} else if (res.errCode === -2) {
alert('===支付取消');
}
});
}
@chunecai 你是怎么在浏览器里 Debug 的呢?远程调试吗?会调用微信吗?
@yorkie 会调用,设置签名和打包的一样就可以了,我之前也不知道,折腾了好久,试了一下,也可以调试的。
@yorkie 配置如下: Android app 的build.gradle 配置:
// 添加签名:
signingConfigs {
// debug模式调试
debug {
keyAlias 'xxx'
keyPassword 'xxxx'
storeFile file('xxxx')
storePassword 'xxxx'
}
release {
keyAlias 'xxx'
keyPassword 'xxxx'
storeFile file('xxxx')
storePassword 'xxxx'
}
}
那是不是就是你的打包签名的问题呢?签好名后,应该需要在微信后台也更新的。