解决方法直接拉最后
最近在做微信支付时候,不不管支付成功或者取消支付,都能调起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);
}
这样就可以在微信处理失败的时候进行自己处理
网友评论