这个问题困扰了我一天半快两天,网上各种资料找不到点子上,没办法只有自己调试,终于找到了结症所在。
注意:微信SDK版本为3.1.1
微信SDK详见官网:https://open.weixin.qq.com/
问题简述:
在 WXEntryActivity 中:
IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID);
api.registerApp(WEIXIN_APP_ID);
api.handleIntent(getIntent(), this);
}
@Override
public void onResp(BaseResp resp) {
if (resp instanceof SendAuth.Resp) {
String code = ((SendAuth.Resp) resp).code;
getWxToken(code);
}
}
此时会发现,授权流程正常,但是 code 却为空。去查看 class 文件,发现 SendAuth.Resp 类是通过 getIntent() 获取的 Bundle 参数来构造的,其中构造 code 部分的代码如下:
public void fromBundle(Bundle var1) {
super.fromBundle(var1);
this.code = var1.getString("_wxapi_sendauth_resp_code");
this.state = var1.getString("_wxapi_sendauth_resp_state");
}
但是。。。坑来了。。。调试可以看到返回数据的 Bundle 如下:
_wxapi_sendauth_resp_state = weixin_code
_wxapi_sendauth_resp_token = 041DTq9r1QtkRs0MbQ9r1K4x9r1DTq9x
这能拿到见鬼了-,-||
修复也很简单:
String code = ((SendAuth.Resp) resp).code;
if (TextUtils.isEmpty(code)) {
code = getIntent().getStringExtra("_wxapi_sendauth_resp_token");
}
喜欢的话,点个赞哟~