美文网首页
Android 微信支付回调无反应 “微信支付回调无反应 han

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

作者: 午潮山下人 | 来源:发表于2019-09-25 10:32 被阅读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);
            }
    

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

    相关文章

      网友评论

          本文标题:Android 微信支付回调无反应 “微信支付回调无反应 han

          本文链接:https://www.haomeiwen.com/subject/lkpiuctx.html