Android 微信支付回調(diào)無反應(yīng) “微信支付回調(diào)無反應(yīng) handleIntent fail, intent not from weixin msg”

解決方法直接拉最后

最近在做微信支付時(shí)候,不不管支付成功或者取消支付,都能調(diào)起WXPayEntryActivity頁面,在無法在onResp(BaseResp resp) 方法中得到回調(diào)信息。按照網(wǎng)上的各種確認(rèn)后仍然無法接收。
在查看日志發(fā)現(xiàn)總是報(bào)"handleIntent fail, intent not from weixin msg"錯(cuò)誤。
定位后發(fā)現(xiàn)

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

老是返回false。
跟蹤進(jìn)去在WXApiImplV10的handleIntent()方法中發(fā)現(xiàn)

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

再跟蹤發(fā)現(xiàn)

 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()前進(jìn)行重新賦值

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

結(jié)果依然報(bào)錯(cuò)。
同時(shí)在WXPayEntryActivity中斷點(diǎn)調(diào)試是時(shí)候發(fā)現(xiàn)getIntent()中值都是存在的,于是我想是否能繞過微信自己進(jìn)行處理呢。

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;
                ...
                }

繼續(xù)看我們發(fā)現(xiàn),當(dāng)Type等于5時(shí)候,就是支付相關(guān)的回調(diào)處理。看到這,OK我們就可以自己進(jìn)行處理。

以下是處理方式

1 創(chuàng)建自己的處理類

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

這樣就可以在微信處理失敗的時(shí)候進(jìn)行自己處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容