iOS進(jìn)階之微信登陸、微信分享同仆、微信支付

1. 在微信開(kāi)發(fā)者網(wǎng)站萤捆,注冊(cè)應(yīng)用id

2. 在資源下載頁(yè)下載SDK文件

3. 集成SDK到Xcode

  • 導(dǎo)入SDK到工程中
  • 添加如下依賴(lài)庫(kù)
    • SystemConfiguration.framework
    • CoreTelephony.framework
    • libz.tbd
    • libsqlite3.0.tbd
    • libc++.tbd
  • 在Targets -> info的URL type添加key為wexin,URLScheme Value為所注冊(cè)應(yīng)用的id
  • 在plist文件中添加URL Schemes白名單
  • 導(dǎo)入WXApi.h俗批,并實(shí)現(xiàn)WXApiDelegate
<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>wechat</string>
        <string>weixin</string>
        <string>sinaweibohd</string>
        <string>sinaweibo</string>
    </array>

作者:風(fēng)_雨
鏈接:http://www.reibang.com/p/1c1018580a58
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有俗或。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處岁忘。

4. 注冊(cè)應(yīng)用程序的id

想微信注冊(cè)應(yīng)用程序的id辛慰,只有已經(jīng)注冊(cè)過(guò)id的程序,微信終端才能響應(yīng)干像,如下代碼所示帅腌,

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        // ...
        WXApi.registerApp("wxd810oa5f5d48ae")
        return true
    }

5. 處理AppDelegate的handleOpenURL和openURL

    func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
        return WXApi.handleOpen(url, delegate: self)
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        return WXApi.handleOpen(url, delegate: self)
    }
    
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return WXApi.handleOpen(url, delegate: self)
    }

6. WXApi輔助方法

  • WXApi.isWXAppInstalled() 判斷是否安裝微信
  • WXApi.isWXAppSupportApi() 判斷微信版本是否支持

7. 向微信發(fā)送請(qǐng)求

通過(guò)SendAuthReq發(fā)送請(qǐng)求,構(gòu)建SendAuthReq傳如兩個(gè)參數(shù)麻汰,

  • scope 向微信請(qǐng)求哪些權(quán)限
  • state 第三方程序用以標(biāo)記請(qǐng)求的唯一性速客,從微信跳轉(zhuǎn)回第三方應(yīng)用程序時(shí),由微信回傳

如下代碼所示五鲫,

let req = SendAuthReq()
req.scope = "snsapi_userinfo" // 請(qǐng)求全部權(quán)限
req.state = "binding"
WXApi.send(req)

8. 實(shí)現(xiàn)微信協(xié)議WXApiDelegate

extension AppDelegate: WXApiDelegate {
    func onReq(req: BaseReq) {

    }

    func onResp(resp: BaseResp) {

    }
}

其中func onReq(req: BaseReq)是微信終端向第三方程序發(fā)起請(qǐng)求溺职,要求第三方程序響應(yīng)。第三方程序響應(yīng)完成后必須調(diào)用sendRsp返回位喂。在調(diào)用sendRsp返回時(shí)浪耘,會(huì)切回到微信程序界面。如果僅僅用到微信的分享和登陸授權(quán)通乘苎拢可以不實(shí)現(xiàn)或?qū)崿F(xiàn)為空点待。

func onResp(resp: BaseResp)作用時(shí),如果第三方程序向微信發(fā)送了sendReq的請(qǐng)求弃舒,那么onResp會(huì)被回調(diào)癞埠。sendReq請(qǐng)求調(diào)用后,會(huì)切到微信頁(yè)面聋呢。這個(gè)方法是向微信發(fā)起授權(quán)登陸的請(qǐng)求后苗踪,微信回調(diào)結(jié)果的方法。

Resp有如下幾個(gè)值削锰,如下所示通铲,

  • SendAuthResp
  • PayResp 這是微信返回給第三方關(guān)于支付結(jié)果的結(jié)構(gòu)體,根據(jù)錯(cuò)誤嗎來(lái)判定支付是否成功
  • SendMessageToResp 這是微信向第三方返回的關(guān)于分享圖片器贩、視頻颅夺、鏈接和文本信息結(jié)果的結(jié)構(gòu)體

9. 微信授權(quán)登陸成功

需要判定其state == "binding" && resp.errorCode == WXSuccess朋截,若判定為true,說(shuō)明微信用戶允許授權(quán)第三方應(yīng)用吧黄,此時(shí)微信回拉起應(yīng)用或重定向到第三方網(wǎng)站部服,并且?guī)鲜跈?quán)臨時(shí)票據(jù)code等參數(shù)。在被用戶授權(quán)之后拗慨,通過(guò)code參數(shù)廓八,再加上appId和appSecret,調(diào)用api向微信發(fā)起請(qǐng)求用戶的接口調(diào)用憑證access_token赵抢,參數(shù)說(shuō)明如下剧蹂,

  • appId 所申請(qǐng)應(yīng)用程序的appId
  • secret 通過(guò)審核后獲得的密碼
  • code SendAuthResp.code
  • type "authorization_code"

請(qǐng)求是通過(guò)http get方式發(fā)起的,如下鏈接烦却,

let str = "https://api.weixin.qq.com/sns.oauth2/access_token?appid=\(appId)&secret=\(secret)&code=\(code)&grand_type=\(type)"
let url = URL(string: str)
let request = URLRequest(url: url)
// 簡(jiǎn)寫(xiě)
URLSessionTask.request(request) { response in
    
}

如果請(qǐng)求成功宠叼,api回返回json數(shù)據(jù),解析出openId, access_tokenexpires_in等參數(shù)其爵,以備后用车吹。拿到access_token等參數(shù)之后,通常做法是把這些參數(shù)傳給server端醋闭,向server端發(fā)起用戶登陸的請(qǐng)求,根據(jù)server端返回的結(jié)果來(lái)判定用戶是否登陸成功朝卒。

http://www.reibang.com/p/1c1018580a58

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末证逻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抗斤,更是在濱河造成了極大的恐慌囚企,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑞眼,死亡現(xiàn)場(chǎng)離奇詭異龙宏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)伤疙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)银酗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人徒像,你說(shuō)我怎么就攤上這事黍特。” “怎么了锯蛀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵灭衷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我旁涤,道長(zhǎng)翔曲,這世上最難降的妖魔是什么迫像? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瞳遍,結(jié)果婚禮上闻妓,老公的妹妹穿的比我還像新娘。我一直安慰自己傅蹂,他們只是感情好纷闺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著份蝴,像睡著了一般犁功。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婚夫,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天浸卦,我揣著相機(jī)與錄音,去河邊找鬼案糙。 笑死限嫌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的时捌。 我是一名探鬼主播怒医,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奢讨!你這毒婦竟也來(lái)了稚叹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拿诸,失蹤者是張志新(化名)和其女友劉穎扒袖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體亩码,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡季率,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了描沟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飒泻。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吏廉,靈堂內(nèi)的尸體忽然破棺而出蠢络,到底是詐尸還是另有隱情,我是刑警寧澤迟蜜,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布刹孔,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏髓霞。R本人自食惡果不足惜卦睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望方库。 院中可真熱鬧结序,春花似錦、人聲如沸纵潦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邀层。三九已至返敬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寥院,已是汗流浹背劲赠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秸谢,地道東北人凛澎。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像估蹄,于是被迫代替她去往敵國(guó)和親塑煎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 注意:代碼自己動(dòng)手寫(xiě)臭蚁,不要復(fù)制最铁! GitHub 一、接入微信第三方登錄準(zhǔn)備工作刊棕。 移動(dòng)應(yīng)用微信登錄是基于OAuth...
    大沖哥閱讀 15,067評(píng)論 0 7
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)待逞,斷路器甥角,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • iOS支付 iOS支付分為兩類(lèi),第三方支付和應(yīng)用內(nèi)支付(內(nèi)購(gòu))识樱。 第三方支付包括:支付寶支付嗤无、微信支付、銀聯(lián)支付怜庸、...
    帥不過(guò)oneS閱讀 2,853評(píng)論 2 8
  • 轉(zhuǎn)載需要著名出處: 之前寫(xiě)過(guò)微信登錄分享支付第一版: 前言 大部分的app都有接入第三方sdk的需求。例如第三方登...
    Android開(kāi)發(fā)666閱讀 6,445評(píng)論 3 38