iOS微信授權登錄

微信開發平臺
Demo源碼 (記得給個star哦)

首先需要確保你的App應用在微信開發平臺上注冊創建并獲得對應的接口,對應登錄、支付等功能還涉及付費,具體申請流程就不再這里說了。到開放平臺->管理中心->移動應用->查看應用,確認你的應用已獲得微信登錄接口(很多小伙伴注冊賬號完成后就開始使用微信登錄和支付,其實這些功能是需要另外申請開通的),應用審核通過后,平臺會給我們兩個字符串,分別為AppID和AppSecret,把它們記下備用。
接下來就是接入SDK,到開發平臺->資源中心->資源下載中,找到iOS資源下載,里面提供了兩套工具包,其中一套不包含支付功能。


微信授權登錄功能是使用的OAuth2.0協議,適用于擁有服務端的應用授權
在開始開發前,建議先仔細閱讀該協議的幾種認證模式中的Authorization Code認證,對后續流程理解上會有很大的幫助

Authorization Code認證模式大概流程如下:

  1. 第三方APP發起微信授權登錄請求,用戶允許授權后會返回應用并帶上授權的臨時數據也就是“code”參數(前端實現);
  2. 服務端通過code加上AppID和AppSecret等參數,通過API換取access_token(建議服務端實現);
  3. 通過access_token進行接口調用,獲取微信用戶的基本數據資源(建議服務端實現)。

微信在官方文檔中給出風險說明:
1、AppSecret 是應用接口使用密鑰,泄漏后將可能導致應用數據泄漏、應用的用戶數據泄漏等高風險后果;存儲在客戶端,極有可能被惡意竊取(如反編譯獲取Appsecret);
2、AccessToken 為用戶授權第三方應用發起接口調用的憑證(相當于用戶登錄態),存儲在客戶端,可能出現惡意獲取AccessToken 后導致的用戶數據泄漏、用戶微信相關接口功能被惡意發起等行為;
3、refresh_token 為用戶授權第三方應用的長效憑證,僅用于刷新AccessToken,但泄漏后相當于AccessToken泄漏,風險同上。

因此,強烈建議將AppSecret放在服務端,并由服務器來完成后續步驟

廢話說的有點多了,下面直接看代碼:


第一步:請求Authorization Code

原生應用集成微信SDK,并發起授權登錄請求

- (void)sendWXAuthReq{
    
    if([WXApi isWXAppInstalled]){//判斷用戶是否已安裝微信App
        
        SendAuthReq *req = [[SendAuthReq alloc] init];
        req.state = @"wx_oauth_authorization_state";//用于保持請求和回調的狀態,授權請求會原樣帶回
        req.scope = @"snsapi_userinfo";//授權作用域:獲取用戶個人信息
        
        [WXApi sendReq:req];//發起微信授權請求
    }else{
        
        //提示:未安裝微信應用或版本過低
    }
}

在回調函數中獲取code

- (void)onResp:(id)resp{

    if([resp isKindOfClass:[SendAuthResp class]]){//判斷是否為授權登錄類

        SendAuthResp *req = (SendAuthResp *)resp;

        if([req.state isEqualToString:@"wx_oauth_authorization_state"]){//微信授權成功

            req.code //獲得code
        }
    }
}

第二步:通過Authorization Code請求Access Token

拿到Authorization Code之后,獲取Access Token,發送GET請求到下面這個URL

https://api.weixin.qq.com/sns/oauth2/access_token?appid=[APP_ID]&secret=[APP_SECRET]&code=[AUTHORIZATION_CODE]&grant_type=authorization_code

返回說明:

{
    "access_token":"ACCESS_TOKEN", //接口調用憑證
    "expires_in":7200, //access_token接口調用憑證超時時間,單位(秒)
    "refresh_token":"REFRESH_TOKEN", //用戶刷新access_token
    "openid":"OPENID", //授權用戶唯一標識
    "scope":"SCOPE" //用戶授權的作用域,使用逗號(,)分隔
}

第三步:通過Access Token請求Union Id

拿到Access Token和OpenID后,獲取用戶個人信息,發送GET請求到下面這個URL:

https://api.weixin.qq.com/sns/userinfo?access_token=[ACCESS_TOKEN]&openid=[OPEN_ID]

返回說明:

{
    "openid":"OPENID", //用戶的標識,對當前開發者帳號唯一
    "nickname":"NICKNAME", //用戶昵稱
    "sex":1, //用戶性別,1為男性,2為女性
    "province":"PROVINCE", //用戶個人資料填寫的省份
    "city":"CITY", //用戶個人資料填寫的城市
    "country":"COUNTRY", //國家,如中國為CN
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", //用戶頭像,最后一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" 
}

UnionID(用戶統一標識)針對一個微信開放平臺帳號下的所有應用,同一用戶的UnionID是唯一的,如果需要做賬號第三方登錄綁定業務邏輯,就用這個字段

這里強烈建議開發小伙伴區分集成微信、騰訊、微博SDK,不要使用類似友盟,通常情況下做社會化分享等確實需要用到這三樣,但是問題來了,如果其中某個更新了SDK而友盟沒有同步導致一些問題,那就廢了

由于移動應用上微信登錄只提供了原生的登錄方式,必須配合微信客戶端才能正常使用。所以對iOS應用而言考慮到審核指南中的相關規定,建議在接入SDK時調用WXApi中isWXAppInstalled函數來檢測當前用戶手機是否已安裝微信客戶端,對未安裝的用戶隱藏對應微信登錄按鈕,防止審核被拒絕。

微信分享
微信支付
適配Universal Links

如果本文對你有所幫助記得點個贊哈:)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容

  • 標簽(空格分隔): iOS 我的計劃1.使用微信SDK實現微信第三方登錄2.使用友盟實現第三方登錄3.使用open...
    iOS_愛OS閱讀 5,812評論 1 9
  • 注意:代碼自己動手寫,不要復制! GitHub 一、接入微信第三方登錄準備工作。 移動應用微信登錄是基于OAuth...
    大沖哥閱讀 15,149評論 0 7
  • 微信第三方登錄實現的全過程:iOS微信登錄注意事項:1、目前移動應用上微信登錄只提供原生的登錄方式,需要用戶安裝微...
    weyan閱讀 2,644評論 0 4
  • --濃郁的學習環境-- 你交際圈子的水平,基本上決定了你自己的水平。 在一所超級中學讀書意味著,你的周圍會生活著很...
    清瑩和五味閱讀 289評論 0 0
  • 中午看了董卿的新節目,叫《朗讀者》。不同的人,不同的生活。 我很敬仰那種能一開口,就會讓人感到既親切又崇敬的人。都...
    其實Xl閱讀 217評論 0 0