? ? 這里我只對(duì)接了微信的登錄和qq的登錄市殷;查找騰訊qq和微信的官方文檔纫事,仔細(xì)閱讀相關(guān)對(duì)接步驟,然后根據(jù)文檔說(shuō)明去創(chuàng)建相關(guān)應(yīng)用览露,我這里最先對(duì)接的是web端的登錄荧琼,申請(qǐng)了qq互聯(lián)的web應(yīng)用和微信的web應(yīng)用,這里有一個(gè)注意點(diǎn):微信的web應(yīng)用需要去申請(qǐng)微信開(kāi)放平臺(tái)差牛,然后申請(qǐng)開(kāi)放平臺(tái)是需要300元費(fèi)用的铭腕。然后接下去拿到應(yīng)用的appid和secret就根據(jù)OAuth協(xié)議開(kāi)始對(duì)接,對(duì)接過(guò)程基本是問(wèn)題不大多糠,但是需要注意的點(diǎn)很多累舷,對(duì)后期項(xiàng)目的影響有很多,其中需要注意的地方也有很多夹孔;
1.qq端的回調(diào)接口是直接配置上系統(tǒng)內(nèi)回調(diào)接口的全路徑被盈,用域名,不限端口;
2.微信的回調(diào)接口是只能配置上域名搭伤,且不能攜帶http前綴只怎,例如www.baidu.com,也是不限端口怜俐;
3.微信端的h5登錄即微信的公眾號(hào)登錄身堡,這個(gè)登錄只能在微信內(nèi)打開(kāi)網(wǎng)頁(yè)才能登錄,用手機(jī)外部瀏覽器打開(kāi)網(wǎng)頁(yè)的話是沒(méi)有這個(gè)登錄路口的拍鲤,微信h5登錄需要申請(qǐng)一個(gè)公眾號(hào)贴谎,然后在公眾號(hào)里配置回調(diào)接口,還需要在自己的代碼里寫(xiě)一個(gè)接口季稳,專門用來(lái)驗(yàn)證是否是微信的請(qǐng)求擅这,然后再公眾號(hào)的基礎(chǔ)配置里配上該接口,以及token等參數(shù)景鼠,然后確定仲翎,如果該接口可以正常訪問(wèn)且校驗(yàn)通過(guò)的話,就會(huì)提示成功;那么在微信里打開(kāi)網(wǎng)頁(yè)就可以正常登陸溯香;這里需要注意的是:微信公眾號(hào)的登錄必須走域名80端口鲫构,(似乎443端口也行),當(dāng)然這個(gè)域名也是必須備案過(guò)的玫坛,否則微信那邊是無(wú)法回調(diào)到我們接口的芬迄,然后授權(quán)用戶信息的回調(diào)配置和微信web端一樣,只需要填寫(xiě)域名昂秃;
4.通過(guò)微信的web登錄以及h5登錄禀梳,我意識(shí)到怎么在我們系統(tǒng)內(nèi)保證這兩個(gè)應(yīng)用登錄的用戶是唯一的,看了官方文檔后發(fā)現(xiàn)開(kāi)同微信開(kāi)放平臺(tái)后在返回accessToken的時(shí)候會(huì)給我們一個(gè)unionid標(biāo)識(shí)肠骆,這個(gè)標(biāo)識(shí)能夠保證用戶不管是從web算途,移動(dòng)端,小程序還是微信公眾號(hào)登錄都是唯一蚀腿;因?yàn)橹氨4娴氖莖penid嘴瓤,所以我這里不得不將該值改為unionid,然后還需要去同步線上原有的數(shù)據(jù)將openid修改為unionid莉钙,這里我想當(dāng)然的改為unionid以后就不在去保存openid了廓脆,心想既然有了unionid的話openid基本上是沒(méi)什么用處了,沒(méi)必要再去維護(hù)了磁玉。但是結(jié)果是否定的停忿,也幸好微信支付是我做的,看了微信支付的文檔以后蚊伞,當(dāng)微信支付用公眾號(hào)支付的時(shí)候席赂,用戶的openid是必傳的所以我就用了一張表來(lái)記錄用戶各個(gè)應(yīng)用的openid,防止接下去在其他地方需要用到时迫。
5.舉一反三颅停,既然微信這邊需要unionid來(lái)確定微信各個(gè)應(yīng)用的唯一,那么qq應(yīng)該也是這樣的掠拳,然后我去找qq互聯(lián)的相關(guān)文檔癞揉,在它的常見(jiàn)問(wèn)題里面找到了qq也是有unionid的,但是qq的unionid并不是開(kāi)通qq互聯(lián)以后就有的溺欧,他需要填一個(gè)申請(qǐng)表然后發(fā)郵件喊熟,具體操作可以去這個(gè)網(wǎng)址看http://wiki.connect.qq.com/%E7%89%B9%E6%AE%8A%E9%97%AE%E9%A2%98-top10。開(kāi)通以后胧奔,之前代碼中獲取openid的路徑需要修改逊移,在路徑末尾添加unionid=1预吆,否則是獲取不到unionid的龙填,然后跟微信一樣將原來(lái)的openid修改為unionid,并且將openid保存下來(lái),防止之后又有地方需要用到岩遗。
6.這里應(yīng)該是我自己的原因扇商,因?yàn)榈卿浀臉?biāo)識(shí)我是放在cookie下的,然后cookie有域的問(wèn)題宿礁,因?yàn)槲覀冎挥幸粋€(gè)正式的域名案铺,所以我讓運(yùn)維從正式的域名nginx到我本地地址然后進(jìn)行調(diào)試,發(fā)現(xiàn)路由過(guò)來(lái)后我拿到的servename是我們公司的固定ip地址梆靖,然后微信回調(diào)的是域名控汉,這里我就沒(méi)有辦法將一些登錄信息從cookie中拿到,導(dǎo)致我無(wú)法走同微信公眾號(hào)登錄返吻,想來(lái)下辦法直接后臺(tái)將cookie的域?qū)懰拦米樱强紤]到用IP地址的情況,以及換域名又要改代碼等测僵,然后測(cè)試環(huán)境如果調(diào)通了公眾號(hào)的登錄但是會(huì)影響到其他的登錄街佑,所以這里就只好讓上級(jí)去申請(qǐng)一個(gè)測(cè)試的域名;
相關(guān)qq以及微信的登錄我差不多就做到這里捍靠。