Android 微信支付回调无反应 “微信支付回调无反应 han

2019-09-25  本文已影响0人  午潮山下人

解决方法直接拉最后

最近在做微信支付时候,不不管支付成功或者取消支付,都能调起WXPayEntryActivity页面,在无法在onResp(BaseResp resp) 方法中得到回调信息。按照网上的各种确认后仍然无法接收。
在查看日志发现总是报"handleIntent fail, intent not from weixin msg"错误。
定位后发现

boolean addhandle = api.handleIntent(getIntent(), this);

老是返回false。
跟踪进去在WXApiImplV10的handleIntent()方法中发现

if(!WXApiImplComm.isIntentFromWx(var1, "com.tencent.mm.openapi.token")) {
                Log.i("MicroMsg.SDK.WXApiImplV10", "handleIntent fail, intent not from weixin msg");
                return false;
            }

再跟踪发现

 public static boolean isIntentFromWx(Intent var0, String var1) {
        String var2;
        return var0 == null?false:(var2 = var0.getStringExtra("wx_token_key")) != null && var2.equals(var1);
    }

只要Intent.getStringExtra("wx_token_key")的值和"com.tencent.mm.openapi.token"一致即可。
于是在WXPayEntryActivity中handleIntent()前进行重新赋值

getIntent().putExtra("wx_token_key","com.tencent.mm.openapi.token");

结果依然报错。
同时在WXPayEntryActivity中断点调试是时候发现getIntent()中值都是存在的,于是我想是否能绕过微信自己进行处理呢。

int var16 = var1.getIntExtra("_wxapi_command_type", 0);
            Log.i("MicroMsg.SDK.WXApiImplV10", "handleIntent, cmd = " + var16);
            switch(var16) {
            ...
            case 5:
                PayResp var18 = new PayResp(var1.getExtras());
                var2.onResp(var18);
                return true;
                ...
                }

继续看我们发现,当Type等于5时候,就是支付相关的回调处理。看到这,OK我们就可以自己进行处理。

以下是处理方式

1 创建自己的处理类

 public static boolean handleIntent(Intent data, IWXAPIEventHandler callback) {
        if (data == null || callback == null) {
            return false;
        }

        int type = data.getIntExtra("_wxapi_command_type", 0);

        if (type != 5) {
            return false;
        }

        PayResp resp = new PayResp(data.getExtras());

        callback.onResp(resp);
        return true;
    }

2 在中修改处理逻辑

   boolean addhandle = api.handleIntent(getIntent(), this);
        if (!addhandle) {
            MyWXPayHandler.handleIntent(getIntent(), this);
        }

这样就可以在微信处理失败的时候进行自己处理

上一篇下一篇

猜你喜欢

热点阅读