【第三方】微信授權(quán)登錄


在進(jìn)行微信OAuth2.0授權(quán)登錄接入之前,在微信開(kāi)放平臺(tái)注冊(cè)開(kāi)發(fā)者帳號(hào),并擁有一個(gè)已審核通過(guò)的移動(dòng)應(yīng)用,并獲得相應(yīng)的AppID和AppSecret数尿,申請(qǐng)微信登錄且通過(guò)審核后,可開(kāi)始接入流程惶楼。我是從產(chǎn)品那里得到的右蹦,所以就不寫這個(gè)步驟了诊杆。。何陆。

1晨汹、下載SDK

下載地址

下載地址

2、將SDK放入工程

將SDK放入工程

我選擇的無(wú)模擬器版甲献,即“WeChatSDK_1.5_OnlyIphone”,這大約可以省一半的體積(OnlyPhone體積2.2M宰缤,兼容模擬器的體積4.2M)

3颂翼、觀察微信API

通過(guò)我的觀察晃洒,微信API大概可以分為兩部分,一部分是第三方APP發(fā)送信息(文本朦乏,圖片球及,音頻,鏈接等等)到微信的會(huì)話呻疹、朋友圈或者收藏吃引,還有就是微信授權(quán)登錄(API中多以Resp,response作結(jié)尾)刽锤,這是我常用的镊尺;另一部分是微信發(fā)送信息給第三方APP,這一部分沒(méi)嘗試過(guò)(API中多以Req,request作結(jié)尾)并思。

4庐氮、補(bǔ)充一些框架

添加一些框架

我在使用SDK時(shí)需要添加libc++.dylib ,否則編譯報(bào)錯(cuò),可是官方文檔并沒(méi)有提示宋彼,不知為何弄砍。

5、添加URL scheme

添加URL TYPE

Identifier中填寫自定義的文本输涕。

6音婶、向微信終端程序注冊(cè)第三方應(yīng)用,并在第三方應(yīng)用實(shí)現(xiàn)從微信返回

在AppDelegate.m中引入"WXApi.h"頭文件莱坎,然后

向微信終端程序注冊(cè)第三方應(yīng)用衣式,并在第三方應(yīng)用實(shí)現(xiàn)從微信返回

7、請(qǐng)求CODE

在要微信授權(quán)登錄的controller中引入"WXApi.h"頭文件檐什,編寫請(qǐng)求code的代碼瞳收,如下圖:

請(qǐng)求CODE

執(zhí)行該方法后,如果客戶端安裝了微信厢汹,那么就會(huì)向微信請(qǐng)求相應(yīng)的授權(quán)螟深,如圖:

向微信請(qǐng)求相應(yīng)的授權(quán)
向微信請(qǐng)求相應(yīng)的授權(quán)

當(dāng)然,實(shí)際使用中烫葬,還要結(jié)合需求做一些變化界弧。因?yàn)槭跈?quán)后凡蜻,諸如token之類的字段,是有有效期的垢箕,在有效期范圍內(nèi)划栓,我們是沒(méi)必要讓用戶再次授權(quán)的,所以条获,很可能你的實(shí)現(xiàn)忠荞,會(huì)如我下面所寫的:

請(qǐng)求Code會(huì)結(jié)合需求擴(kuò)展變化

相關(guān)情況,參見(jiàn)刷新或續(xù)期access_token使用

讓AppDelegate遵守<WXApiDelegate>協(xié)議帅掘,并實(shí)現(xiàn)協(xié)議方法onResp:委煤,我們?cè)谠摲椒ㄖ薪邮照?qǐng)求回來(lái)的數(shù)據(jù),如下圖:

實(shí)現(xiàn)onResp:方法修档,接收返回的響應(yīng)

參數(shù)說(shuō)明

參數(shù) 是否必須 說(shuō)明
appid 應(yīng)用唯一標(biāo)識(shí)碧绞,在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
scope 應(yīng)用授權(quán)作用域,如獲取用戶個(gè)人信息則填寫snsapi_userinfo(什么是授權(quán)域
state 用于保持請(qǐng)求和回調(diào)的狀態(tài)吱窝,授權(quán)請(qǐng)求后原樣帶回給第三方讥邻。該參數(shù)可用于防止csrf攻擊(跨站請(qǐng)求偽造攻擊),建議第三方帶上該參數(shù)院峡,可設(shè)置為簡(jiǎn)單的隨機(jī)數(shù)加session進(jìn)行校驗(yàn)

返回說(shuō)明

用戶點(diǎn)擊授權(quán)后兴使,微信客戶端會(huì)被拉起,跳轉(zhuǎn)至授權(quán)界面照激,用戶在該界面點(diǎn)擊允許或取消发魄,SDK通過(guò)SendAuth的Resp返回?cái)?shù)據(jù)給調(diào)用方。

返回值 說(shuō)明
ErrCode ERR_OK = 0(用戶同意),ERR_AUTH_DENIED = -4(用戶拒絕授權(quán)),ERR_USER_CANCEL = -2(用戶取消)
code 用戶換取access_token的code实抡,僅在ErrCode為0時(shí)有效
state 第三方程序發(fā)送時(shí)用來(lái)標(biāo)識(shí)其請(qǐng)求的唯一性的標(biāo)志欠母,由第三方程序調(diào)用sendReq時(shí)傳入,由微信終端回傳吆寨,state字符串長(zhǎng)度不能超過(guò)1K
lang 微信客戶端當(dāng)前語(yǔ)言
country 微信用戶當(dāng)前國(guó)家信息

8赏淌、通過(guò)code獲取access_token

獲取第一步的code后,請(qǐng)求以下鏈接獲取access_token:

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

相關(guān)代碼參見(jiàn)圖片實(shí)現(xiàn)onResp:方法啄清,接收返回的響應(yīng)圖六水。

參數(shù)說(shuō)明

參數(shù) 是否必須 說(shuō)明
appid 應(yīng)用唯一標(biāo)識(shí),在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
secret 應(yīng)用密鑰AppSecret辣卒,在微信開(kāi)放平臺(tái)提交應(yīng)用審核通過(guò)后獲得
code 填寫第一步獲取的code參數(shù)
grant_type 填authorization_code

返回說(shuō)明

正確的返回:

{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE",
"unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"
}  
參數(shù) 說(shuō)明
access_token 接口調(diào)用憑證
expires_in access_token接口調(diào)用憑證超時(shí)時(shí)間掷贾,單位(秒)
refresh_token 用戶刷新access_token
openid 授權(quán)用戶唯一標(biāo)識(shí)
scope 用戶授權(quán)的作用域,使用逗號(hào)(,)分隔
unionid 只有在用戶將公眾號(hào)綁定到微信開(kāi)放平臺(tái)帳號(hào)后荣茫,才會(huì)出現(xiàn)該字段

錯(cuò)誤返回樣例:

{"errcode":40029,"errmsg":"invalid code"}  

9想帅、獲取用戶個(gè)人信息(UnionID機(jī)制)

獲取用戶個(gè)人信息

10、最后

最后啡莉,你應(yīng)該還會(huì)有上傳用戶響應(yīng)標(biāo)識(shí)到公司后臺(tái)的需求港准,這具體的實(shí)現(xiàn)就要靠自己的實(shí)現(xiàn)了旨剥。

有的同學(xué)可能已經(jīng)發(fā)現(xiàn),一個(gè)微信授權(quán)需要涉及兩個(gè)大類浅缸,一個(gè)登錄的controller轨帜,一個(gè)是AppDelegate,這兩個(gè)類之間通信,需要代理或者其他設(shè)計(jì)模式來(lái)支持.

大致流程就是這樣衩椒,如有錯(cuò)誤或不足蚌父,歡迎斧正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毛萌,一起剝皮案震驚了整個(gè)濱河市苟弛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朝聋,老刑警劉巖嗡午,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囤躁,死亡現(xiàn)場(chǎng)離奇詭異冀痕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)狸演,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門言蛇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人宵距,你說(shuō)我怎么就攤上這事腊尚。” “怎么了满哪?”我有些...
    開(kāi)封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵婿斥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我哨鸭,道長(zhǎng)民宿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任像鸡,我火速辦了婚禮活鹰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘只估。我一直安慰自己志群,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布蛔钙。 她就那樣靜靜地躺著锌云,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吁脱。 梳的紋絲不亂的頭發(fā)上桑涎,一...
    開(kāi)封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天子漩,我揣著相機(jī)與錄音,去河邊找鬼石洗。 笑死幢泼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讲衫。 我是一名探鬼主播缕棵,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涉兽!你這毒婦竟也來(lái)了招驴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤枷畏,失蹤者是張志新(化名)和其女友劉穎别厘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拥诡,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡触趴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渴肉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冗懦。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仇祭,靈堂內(nèi)的尸體忽然破棺而出披蕉,到底是詐尸還是另有隱情,我是刑警寧澤乌奇,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布没讲,位于F島的核電站,受9級(jí)特大地震影響礁苗,放射性物質(zhì)發(fā)生泄漏爬凑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一寂屏、第九天 我趴在偏房一處隱蔽的房頂上張望贰谣。 院中可真熱鬧,春花似錦迁霎、人聲如沸吱抚。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)秘豹。三九已至,卻和暖如春昌粤,著一層夾襖步出監(jiān)牢的瞬間既绕,已是汗流浹背啄刹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凄贩,地道東北人誓军。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疲扎,于是被迫代替她去往敵國(guó)和親昵时。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容