2015-01-15 6 views
6

Цель: получить маркер, который мне нужно отправить с сервером приложенийКак получить токен авторизации Wechat?

Проблема: зарегистрированные возвращает истину, запросы, сделанные возвращает истину, но 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 
+0

Можете ли вы показать нам выход LogCat? – Raptor

+0

done ........... – Sinigami

+0

Вы выяснили ответ @ Синигами? Я пытаюсь сделать то же самое и иметь похожие проблемы. – iamronak

ответ

-2

onReq и onResp будет называться в WXEntryActivity.java в JAVA reflection

Предположим имя пакета io.github.you

Вы должны создать каталог named 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 
    } 
} 

Good Luck

+0

Спасибо за ваш ответ, я сделал, как вы говорите, но проблема все еще существует. Возможная причина в этом: «api.handleIntent (getIntent(), this)« returs false; – Sinigami

4

Я сталкиваются с той же проблемой и решить два этапа.

Сначала проверьте, успешно ли вы прыгнули в приложение wechat и авторизированы. Если нет, проверьте, используете ли вы один и тот же ключ для подписания, который вы подписали для wechat. (напр., Если вы подписали с ключом выпуска и компилировать с ключом отладки, то WeChat приложение не открывается)

Во-вторых, wechat document, имя класса должно быть WXEntryActivity и должны быть поставлены под пакет с именем wxapi под пакет с именем, которое вы зарегистрировали на wechat.

Пример в документе: Если вы регистрируетесь "net.sourceforge.simcpux", структура проекта должна выглядеть следующим образом

Кроме того, добавьте api.HandleIntent(getIntent(), this) после sendReq и sendResp

Не уверен, что имя класса является обязательным, но я уверен, что вы можете позвонить sendReq в другом классе и обработать ответ с помощью WXEntryActivity

Надеюсь, это полезно.

1

был такой же вопрос! Ответ Эдвардс очень помог.

WxEntryActivity должен быть в пакете с именем, которое вы зарегистрировали в wechat!

Особенно, когда у вас есть несколько вариантов сборки (Debug, релиз): Wechat login - do not receive token

Смежные вопросы