微信登陸,微信SDK授權登陸經驗分享


From:http://www.eoeandroid.com/thread-547012-1-1.html

最近因為項目需要做了微信登陸,好像也是微信最近才放出來的接口。還需要申請才能有權限實現授權。
其實也比較簡單,跟新浪微博和qq授權登陸差不多。不過還是有點差別,不知道是微信sdk本身就沒有完善還是其他問題。
會有一點蛋疼的地方,下面會細說。
(由於等級不夠,不能發在經驗分享區,只能先寫在這里了。希望對要做微信登陸的朋友有幫助,如果有不對的地方還希望大家直言不諱)
<ignore_js_op> 
首先就是sdk了,不過要注意的是sdk要是最新的,老版本的sdk可能會沒有一些相關類(在官網上申請項目得到AppID和AppSecret就不多說了)附件已經上傳,吧zip改成jar


然后我們來看看官網上是怎么說的。
<ignore_js_op> 
1. 第三方發起微信授權登錄請求,微信用戶允許授權第三方應用后,微信會拉起應用或重定向到第三方網站,並且帶上授權臨時票據code參數;
2. 通過code參數加上AppID和AppSecret等,通過API換取access_token;
3. 通過access_token進行接口調用,獲取用戶基本數據資源或幫助用戶實現基本操作。



跟其他授權不一樣的是他這里多了一步得到臨時code的過程。應該也是為了安全考慮吧。


先做准備工作,不管是登陸授權還是分享到微信或者朋友圈,我們都需要在項目里建一個 WXEntryActivity類,這個文檔里面有說。demo里面也有這個類,在里面我們去實現IWXAPIEventHandler接口,然后會有幾個方法,
// 微信發送請求到第三方應用時,會回調到該方法
onReq(BaseReq req) 
// 第三方應用發送到微信的請求處理后的響應結果,會回調到該方法
onResp(BaseResp resp) 

還有
onNewIntent(Intent intent) 




下面我們來看看具體代碼。官網是這么說的
<ignore_js_op> 
我們看Android這部分,我這里是寫啊MyApplication里面的,這個大家可以用自己的方法去寫。首先我們要先定義要用的IWXAPI ,注冊好
public static IWXAPI WXapi;
WXapi = WXAPIFactory.createWXAPI(this, weixin_App_ID, true); (weixin_App_ID就是申請項目得到的AppID
WXapi.registerApp(weixin_App_ID);


好,我們在來看授權代碼。
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo";
MyApplication.WXapi.sendReq(req);


然后界面會跳到類似下面的界面
<ignore_js_op> 
同意授權會,會返回到 WXEntryActivity這個類,調用onResp(BaseResp resp) 方法,我們斷點看看BaseResp返回的是什么數據
<ignore_js_op> 
官方說明如下
<ignore_js_op> 
蛋疼的地方來了。。。
這里我們看到我們已經拿到code了,
正常情況下我們都會去resp.code得到String類型的code,不過這里就是點不出來。點不出來,得到不code,我們無法進行下一步。

后來我查了下他的父類才發現。我們可以吧resp強行轉成SendAuth.Resp類型。(在這里,我也迷茫了很久)
SendAuth.Resp sendResp = (SendAuth.Resp) resp;
這樣我們可以就可以通過sendResp來點出code。
sendResp.code    OK,得到code接下來就簡單多了。哈哈。。。

得到code后,我們再來看看官網怎么說的,
<ignore_js_op> 
下面就簡單了。我們只需要把得到code和申請號的id和secret拼接在一起去請求下面接口就行了,


https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

返回結果如下。
<ignore_js_op> 
ok,拿到這些數據,我們就可以去申請注冊賬號了。

微信開放平台鏈接
https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN&token=865d9ba02afbe23ac1e08cb5c324d011126683ea


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM