Android 微信联合登录 code 为空

这个问题困扰了我一天半快两天,网上各种资料找不到点子上,没办法只有自己调试,终于找到了结症所在。

注意:微信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");
}

喜欢的话,点个赞哟~

你可能感兴趣的:(Android 微信联合登录 code 为空)