react-native-wechat icon indicating copy to clipboard operation
react-native-wechat copied to clipboard

微信支付成功以后没有收到回调

Open xiaomilii opened this issue 9 years ago • 40 comments

qq 20161220140229 源码index.js中,标记出来的地方没有执行。

xiaomilii avatar Dec 20 '16 06:12 xiaomilii

需要添加WXPayEntry的相关代码来转发回调~

yorkie avatar Dec 28 '16 14:12 yorkie

我也是碰到同样的问题,收不到回调, 请问你现在解决了吗?

zzzeee avatar May 12 '17 12:05 zzzeee

@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);

chunecai avatar Jun 13 '17 09:06 chunecai

版本1.9.2 、1.9.4都试过了,回调失败。

chunecai avatar Jun 13 '17 10:06 chunecai

@yorkie 调用了分享的,直接闪退了。但是支付是可以的,只是回调不了。、

chunecai avatar Jun 13 '17 10:06 chunecai

仔细检查下 WXPayEntryActivity 中的类名与你自己的 gradle 的配置是否一致。

yorkie avatar Jun 13 '17 10:06 yorkie

你是说这里的配置吗? 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 生成的和这个不一样,但是换成这个也是一样的。 都回调不了

chunecai avatar Jun 13 '17 11:06 chunecai

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'

chunecai avatar Jun 13 '17 11:06 chunecai

@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(); } }

chunecai avatar Jun 13 '17 11:06 chunecai

@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 avatar Jun 13 '17 12:06 chunecai

@chunecai 所以问题还是出在 Android 层,微信端的消息没有发送到应用这边,这中间可能存在的问题有很多,比如签名不正确、WXPayEntryActivity配置不正确等,你可以尝试在 Java 代码里定位下问题。

yorkie avatar Jun 13 '17 13:06 yorkie

@yorkie
https://github.com/yorkie/react-native-wechat/issues/225 使用react-native link react-native-wechat 的时候支付还能回来自己的App,只是没继续往下走,使用文档的RCTWeChat 直接App闪退了。

chunecai avatar Jun 14 '17 03:06 chunecai

能用 Android Studio 或者 adb 抓一下在支付的时候,系统的日志吗?这样方便分析问题

yorkie avatar Jun 14 '17 03:06 yorkie

@yorkie 非debug模式,都是签名打包真机测试的。 使用react-native run-android 签名不一致,没找到debug 用签名的方式。

chunecai avatar Jun 14 '17 03:06 chunecai

image 支付取消后直App 重启刷新了,没有走到这个方法 public void onResp(BaseResp baseResp) 没见到弹出数据

chunecai avatar Jun 14 '17 03:06 chunecai

public class WXPayEntryActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // 位置1
    super.onCreate(savedInstanceState);
    WeChatModule.handleIntent(getIntent());
    finish();
  }
}

@chunecai 请问位置1处执行到了吗?

yorkie avatar Jun 14 '17 03:06 yorkie

貌似一样没执行,直接闪一下,刷新了webview重新载入了

chunecai avatar Jun 14 '17 04:06 chunecai

那就是 WXPayEntryActivity 没有配置成功,给我一个你的 AndroidManifest.xml 相关代码。

yorkie avatar Jun 14 '17 04:06 yorkie

image

chunecai avatar Jun 14 '17 05:06 chunecai

proguard-rules.pro文件里有添加下面的代码吗:

-keep class com.tencent.mm.sdk.** {
   *;
}

另外:

貌似一样没执行,直接闪一下,刷新了webview重新载入了

这里为什么会有 WebView,你是说跳转到微信支付页面是 WebView 的页面吗?

yorkie avatar Jun 14 '17 06:06 yorkie

@yorkie
proguard-rules.pro文件里有添加下面的代码吗:

-keep class com.tencent.mm.sdk.** { *; } 有添加; 微信支付的页面是webview页面,先使用webview调用rn方法,rn调用微信支付,成功后再调用webview的js方法。 现在的情况是: webview调用rn方法--成功; rn调用微信支付--成功; 微信支付回调--失败

chunecai avatar Jun 14 '17 06:06 chunecai

在 wxapi 前面使用完整路径试试:com.fujiangjia.mm.wxapi.WXEntryActivity ?

yorkie avatar Jun 14 '17 06:06 yorkie

另外检查下:build.gradle 中的applicationId 如 https://github.com/attentiveness/reading/blob/master/android/app/build.gradle#L97

yorkie avatar Jun 14 '17 06:06 yorkie

这里找到一个相关的 issue 及解决方法:https://github.com/PingPlusPlus/pingpp-android/issues/29#issuecomment-227616396

yorkie avatar Jun 14 '17 06:06 yorkie

@yorkie 试过了,还是不行,applicationId和package 都没有写错,都是一样的 com.fujiangjia.mm Activity 写全路径也不行。

chunecai avatar Jun 14 '17 06:06 chunecai

@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 avatar Jun 15 '17 06:06 chunecai

@chunecai 你是怎么在浏览器里 Debug 的呢?远程调试吗?会调用微信吗?

yorkie avatar Jun 15 '17 06:06 yorkie

@yorkie 会调用,设置签名和打包的一样就可以了,我之前也不知道,折腾了好久,试了一下,也可以调试的。

chunecai avatar Jun 15 '17 06:06 chunecai

@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'
        }
    }

chunecai avatar Jun 15 '17 06:06 chunecai

那是不是就是你的打包签名的问题呢?签好名后,应该需要在微信后台也更新的。

yorkie avatar Jun 15 '17 06:06 yorkie