解決方法直接拉最后
最近在做微信支付時(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)行自己處理