如何获取微信授权令牌?
Posted
技术标签:
【中文标题】如何获取微信授权令牌?【英文标题】:How to get Wechat authorization token? 【发布时间】:2015-01-15 09:28:22 【问题描述】:目标:获取我需要发送到应用服务器的令牌
问题:已注册返回 true,请求完成返回 true,但 onReq
和 onResp
没有被调用。代码如下:
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",项目结构应该是这样的
另外,在sendReq
和sendResp
之后添加api.HandleIntent(getIntent(), this)
不确定类名是否必要,但我相信您可以在其他类中调用 sendReq
并使用 WXEntryActivity
希望这有帮助。
【讨论】:
【参考方案2】:有同样的问题! Edwards 的回答很有帮助。
WxEntryActivity需要在你在微信注册的名字的包里!
尤其是当您有多个构建变体(调试、发布)时: Wechat login - do not receive token
【讨论】:
【参考方案3】:onReq
和 onResp
将在 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;以上是关于如何获取微信授权令牌?的主要内容,如果未能解决你的问题,请参考以下文章