如何获取微信授权令牌?

Posted

技术标签:

【中文标题】如何获取微信授权令牌?【英文标题】:How to get Wechat authorization token? 【发布时间】:2015-01-15 09:28:22 【问题描述】:

目标:获取我需要发送到应用服务器的令牌

问题:已注册返回 true,请求完成返回 true,但 onReqonResp 没有被调用。代码如下:

public class WeChatActivity extends Activity implements IWXAPIEventHandler 

    private static final String APP_ID = ;
    private IWXAPI api;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signin);

        api = WXAPIFactory.createWXAPI(this, APP_ID, true);
        api.handleIntent(getIntent(), this);

        regToWx();
        getAuthToken();
    

    private void regToWx() 

        api.handleIntent(getIntent(), this);
        boolean registered = api.registerApp(APP_ID);

        L.e(this, "registered: " + registered);

    

    @Override
    protected void onNewIntent(Intent intent) 
        super.onNewIntent(intent);

        setIntent(intent);
        api.handleIntent(intent, this);
    

    public void getAuthToken() 
        SendAuth.Req req = new SendAuth.Req();
        req.scope = "post_timeline";
        req.state = "none";

        boolean requestDone = api.sendReq(req);
        L.e(this, "request done: " + requestDone);

        SendAuth.Resp resp = new SendAuth.Resp();
        requestDone = api.sendResp(resp);
        L.e(this, "request done: " + requestDone);
    

    @Override
    public void onReq(BaseReq baseReq) 
        L.e(this, "scope: " + ((SendAuth.Req) baseReq).scope);
    

    @Override
    public void onResp(BaseResp baseResp) 
        L.e(this, "token: " + ((SendAuth.Resp) baseResp).token);
    

日志猫输出:

D/MicroMsg.SDK.WXApiImplV10﹕ check signature:308202eb30820254a003020...
D/MicroMsg.SDK.WXApiImplV10﹕ pass
D/MicroMsg.SDK.WXApiImplV10﹕ register app cn.wegazine.wegazine
D/MicroMsg.SDK.MMessage﹕ send mm message, intent=Intent  act=com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER (has extras) , perm=com.tencent.mm.permission.MM_MESSAGE
E/WeChatActivity﹕ registered: true
D/MicroMsg.SDK.WXApiImplV10﹕ check signature:308202eb30820...
D/MicroMsg.SDK.WXApiImplV10﹕ pass
D/MicroMsg.SDK.MMessageAct﹕ send mm message, intent=Intent  flg=0x18000000 cmp=com.tencent.mm/.plugin.base.stub.WXEntryActivity (has extras) 
E/WeChatActivity﹕ request done: true
D/MicroMsg.SDK.WXApiImplV10﹕ check signature:308202eb30820...
D/MicroMsg.SDK.WXApiImplV10﹕ pass
D/MicroMsg.SDK.MMessageAct﹕ send mm message, intent=Intent  flg=0x18000000 cmp=com.tencent.mm/.plugin.base.stub.WXEntryActivity (has extras) 
E/WeChatActivity﹕ request done: true

【问题讨论】:

你能给我们看看 LogCat 的输出吗? 你找到答案了吗@Sinigami?我正在尝试做同样的事情并遇到类似的问题。 @iamronak 不,我离开了这个。 嘿,面临同样的问题。请帮助我摆脱困境:( 【参考方案1】:

我也遇到过同样的问题,分两步解决。

首先检查您是否成功跳转到微信应用并授权。 如果不是,请检查您是否使用与微信签名相同的签名密钥。 (例如,如果你用release key签名,用debug key编译,微信app打不开)

其次,wechat document,类名应该是WXEntryActivity,并且应该放在你在微信注册的名字的包下一个名为wxapi的包下。

文档中的例子:如果你注册了"net.sourceforge.simcpux",项目结构应该是这样的

另外,在sendReqsendResp 之后添加api.HandleIntent(getIntent(), this)

不确定类名是否必要,但我相信您可以在其他类中调用 sendReq 并使用 WXEntryActivity

处理响应

希望这有帮助。

【讨论】:

【参考方案2】:

有同样的问题! Edwards 的回答很有帮助。

WxEntryActivity需要在你在微信注册的名字的包里!

尤其是当您有多个构建变体(调试、发布)时: Wechat login - do not receive token

【讨论】:

【参考方案3】:

onReqonResp 将在 WXEntryActivity.java 中调用 JAVA reflection

假设包名io.github.you

你应该创建一个名为wxapi的目录,然后创建一个WXEntryActivity.java

你会得到io.github.you.wxapi.WXEntryActivity.java

androidManifest.xml

<activity
    android:name=".wxapi.WXEntryActivity"
    android:exported="true"
    android:label="@string/title_activity_wxentry"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.NoDisplay" > 

WXEntryActivity.java

public class WXEntryActivity implements IWXAPIEventHandler

@Override
public void onReq(BaseReq arg0) 
    SendAuth.Resp r = (SendAuth.Resp)resp;
    String code = r.code;



@Override
public void onResp(BaseResp arg0) 
    // TODO Auto-generated method stub
    

祝你好运

【讨论】:

感谢您的回答,我按照您说的做了,但问题仍然存在。可能的原因是:“api.handleIntent(getIntent(), this)”返回 false;

以上是关于如何获取微信授权令牌?的主要内容,如果未能解决你的问题,请参考以下文章

PHP开发,微信开放平台授权的问题

如何获取微信开放平台的预授权码

如何获取微信开放平台的预授权码

微信网页授权

微信如何获取openid

如何获取微信用户的Openid详解