1. 開發(fā)者注冊
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了月湖免費(fèi)建站歡迎大家使用!
1. 在QQ互聯(lián)開放平臺首頁 ,點(diǎn)擊右上角的“登錄”按鈕,使用QQ賬號登錄,如下圖所示:
重要提示:
開發(fā)者QQ號碼一旦注冊不能變更,建議使用公司公共QQ號碼而不是員工私人號碼注冊,以免遇到員工離職等情況造成不必要的麻煩。
2. 登錄成功后會跳轉(zhuǎn)到開發(fā)者注冊頁面,在注冊頁面需要提交公司或個人的基本資料。下圖所示的是公司注冊頁面:
2. 網(wǎng)站接入申請
網(wǎng)站接入前,需首先進(jìn)行申請,獲得對應(yīng)的appid與appkey,以保證后續(xù)流程中可正確對網(wǎng)站與用戶進(jìn)行驗證與授權(quán)。
2.1 添加網(wǎng)站
開發(fā)者注冊成功后,會跳轉(zhuǎn)到“管理中心”頁面。點(diǎn)擊添加網(wǎng)站,填寫相應(yīng)的信息,如下圖所示:
網(wǎng)站信息填寫完成,點(diǎn)擊“確定”后,網(wǎng)站注冊完成,進(jìn)入管理中心,在管理中心可以查看到網(wǎng)站獲取的appid和appkey,如下圖所示:
2.2 網(wǎng)站信息完善
在管理中心,點(diǎn)擊申請的網(wǎng)站下的“編輯信息”,進(jìn)入編輯頁面,點(diǎn)擊右上角的“編輯”按鈕,頁面進(jìn)入編輯狀態(tài),即可對網(wǎng)站信息進(jìn)行修改和完善,如下圖所示:
3. 網(wǎng)站開發(fā)
進(jìn)入控制臺頁面,可以看到網(wǎng)站申請?zhí)幱凇伴_發(fā)”狀態(tài)。網(wǎng)站上線,首先需對網(wǎng)站進(jìn)行開發(fā),即完成QQ登錄功能并正常放置QQ登錄按鈕,如下圖所示:
3.1 開發(fā)流程概述
開發(fā)流程主要包括如下幾個步驟:
3.1.1 網(wǎng)站上設(shè)置QQ登錄入口
網(wǎng)站主可以在自己的網(wǎng)站首頁入口和主要的登錄、注冊頁面上放置“QQ登錄”標(biāo)識(見紅色方框標(biāo)記處):
3.1.2 用戶登錄驗證和授權(quán)
1. 用戶點(diǎn)擊QQ登錄按鈕之后,彈出QQ登錄窗口,在登錄窗口中將顯示網(wǎng)站自己的Logo標(biāo)識,網(wǎng)站名稱以及首頁鏈接地址。
如果用戶已登錄QQ軟件,也可以一鍵快速登錄。
如下圖所示:
2. 成功登錄后,彈出授權(quán)框引導(dǎo)用戶授權(quán)(僅在第一次成功登錄,以及第一次訪問某個未授權(quán)的OpenAPI時會出現(xiàn)授權(quán)頁),如下圖所示:
授權(quán)框中的授權(quán)列表由網(wǎng)站自行配置,詳見scope參數(shù)說明。建議控制授權(quán)項的數(shù)量,只傳入必要的接口名稱,因為授權(quán)項越多,用戶越可能拒絕進(jìn)行任何授權(quán)。
3.1.3 登錄和授權(quán)完成后,跳轉(zhuǎn)回網(wǎng)站
如果用戶成功登錄并授權(quán),則跳轉(zhuǎn)到指定的回調(diào)地址,該回調(diào)地址由第三方網(wǎng)站自行配置(在上一步的請求中傳入),回調(diào)地址建議設(shè)置為網(wǎng)站首頁或網(wǎng)站的用戶中心。
3.1.4 獲取并存儲access token以及openid
成功登錄后,即可發(fā)送請求來獲取access token以及openid,這兩個參數(shù)在調(diào)用OpenAPI訪問和修改用戶數(shù)據(jù)時必須傳入,網(wǎng)站需自行綁定或存儲:
(1)access token用來判斷用戶在本網(wǎng)站上的登錄狀態(tài),具有3個月有效期,用戶再次登錄時自動刷新。
(2)openid是此網(wǎng)站上唯一對應(yīng)用戶身份的標(biāo)識,網(wǎng)站可將此ID進(jìn)行存儲便于用戶下次登錄時辨識其身份,或?qū)⑵渑c用戶在網(wǎng)站上的原有賬號進(jìn)行綁定。
3.1.5 在網(wǎng)站上顯示用戶登錄昵稱與QQ頭像
建議網(wǎng)站調(diào)用get_user_info接口,在首頁或頂部顯示用戶通過QQ帳號的登錄狀態(tài),使用戶體驗一致,包括用戶昵稱、QQ頭像,如下圖所示:
3.2 開發(fā)說明
QQ登錄功能使用國際通用的OAuth2.0協(xié)議進(jìn)行驗證與授權(quán),可通過以下兩種方式進(jìn)行網(wǎng)站開發(fā):
(1)使用QQ互聯(lián)提供的SDK包,用戶體驗統(tǒng)一,只需要修改少量代碼,不需要理解驗證授權(quán)流程,需要快速接入QQ登錄的應(yīng)用可選用此方法。
詳見:SDK下載
JS SDK詳見:JS SDK使用說明
(2)根據(jù)QQ登錄OAuth2.0協(xié)議,自主開發(fā),此方法自定義程度較高,需要與現(xiàn)有系統(tǒng)進(jìn)行整合的網(wǎng)站可選用此方法。
詳見:OAuth2.0開發(fā)文檔
(3)社區(qū)類網(wǎng)站可以使用集成插件快速接入QQ登錄。
4. 使用QQ互聯(lián)提供的OpenAPI
完成網(wǎng)站的開發(fā)后,即可在“管理中心”的“控制臺”頁面,點(diǎn)擊“當(dāng)前流程”下的“申請上線”,流程處于“審核”狀態(tài)。
提交審核后,騰訊會在兩個工作日完成審核,審核通過后,網(wǎng)站即正式上線。
網(wǎng)站上線后,可以使用QQ互聯(lián)提供的豐富的API資源:
1. 我們提供了各種OpenAPI給開發(fā)者,網(wǎng)站可以調(diào)用這些API來實現(xiàn)需要的功能,使登錄用戶在網(wǎng)站上即可訪問和修改QQ空間受保護(hù)的資源。
詳見:API列表 API調(diào)用說明
2. 為方便網(wǎng)站快速使用這些API,QQ互聯(lián)提供了JS-widget, JS-widget是JS封裝的SDK,只需要在網(wǎng)站引入JS文件,就可以用封裝好的方法訪問對應(yīng)的API,開發(fā)簡單。
詳見:JS SDK使用說明
5. WAP網(wǎng)站接入
上述文檔主要是針對WEB以及XHTML格式的網(wǎng)站。
WAP網(wǎng)站接入QQ登錄可基于OAuth1.0協(xié)議和OAuth2.0協(xié)議。
基于OAuth1.0協(xié)議:接入過程詳見開發(fā)攻略。該攻略對于一般網(wǎng)站和WAP網(wǎng)站接入都適用,每一步中WAP網(wǎng)站接入時需特別注意的地方特別用紅色標(biāo)注。
基于OAuth2.0協(xié)議:接入過程詳見OAuth2.0開發(fā)文檔。該文檔對于一般網(wǎng)站和WAP網(wǎng)站接入都進(jìn)行了說明。
當(dāng)下的解決方案是引入一個新的非常簡單的應(yīng)用來作為微信授權(quán)的代理服務(wù),可以這么做: ?
1. 把公眾號的網(wǎng)頁授權(quán)接口域名設(shè)置成另外一個子域名,如proxy.your點(diǎn)抗 ; ? ?
2. 然后把php_weixin_proxy里面的index.php部署到proxy.your點(diǎn)抗
php_weixin_proxy下的index.php是一個很簡單的php文件,你可以直接查看源碼了解它的實現(xiàn)方式。因為當(dāng)前項目的環(huán)境,我采用php來完成這個代理服務(wù)實現(xiàn),實際上,你完全可以用任意平臺語言來完成類似的功能。
當(dāng)其它業(yè)務(wù)需要發(fā)起微信授權(quán)時,將授權(quán)請求先發(fā)到proxy.your點(diǎn)抗 ,然后proxy.your點(diǎn)抗 會把這個請求轉(zhuǎn)發(fā)到微信; ?
當(dāng)用戶同意授權(quán)后,proxy.your點(diǎn)抗 會收到微信的授權(quán)回調(diào),并把回調(diào)結(jié)果(code、state參數(shù))原封不動地再返回給最開始發(fā)起授權(quán)的業(yè)務(wù)。
唯一的區(qū)別在于,在不使用proxy.your點(diǎn)抗 的時候,你從應(yīng)用發(fā)起微信授權(quán)的鏈接應(yīng)該是這樣的: ?
;redirect_uri=http%3A%2F%2Fpassport.your點(diǎn)抗 %2Fresponse_type=codescope=snsapi_loginstate=584bc87e11ff37492#wechat_redirect ? ?
用了proxy.your點(diǎn)抗 之后,這個授權(quán)鏈接就應(yīng)該是這樣的: ? ?
;redirect_uri=http%3A%2F%2Fpassport.your點(diǎn)抗 %2Flogin%2Fnotifyresponse_type=codescope=snsapi_basestate=584bc87e11ff37492device=pc
后面這個鏈接跟上面的比: ?
1. 后面的鏈接中的host變成了proxy.your點(diǎn)抗 ,也就是代理的授權(quán)回調(diào)域名; ? ?
2. 后面的多了一個device參數(shù),這個是必要的。因為微信pc端跟移動端的授權(quán)地址是不一樣的,而后面的鏈接是發(fā)送個proxy.your點(diǎn)抗 的,所以需要多加個參數(shù)告訴它在轉(zhuǎn)發(fā)給授權(quán)申請給微信的時候,是用PC端還是移動端的授權(quán)地址。
1. 用戶從我們的應(yīng)用觸發(fā)需要授權(quán)的操作,比如點(diǎn)擊微信登錄; ? ?
2. 應(yīng)用收到這種用戶請求后,將用戶重定向到微信提供的一個授權(quán)頁面: ? ?
或 ? ?
3. 用戶通過微信掃碼(PC端授權(quán),上邊左圖)或者點(diǎn)擊確認(rèn)按鈕(移動端授權(quán),上邊右圖)告知微信,授權(quán)應(yīng)用訪問自己的微信賬號信息; ? ?
4. 微信收到用戶的授權(quán)許可后,生成授權(quán)碼,并把它作為參數(shù)回調(diào)至應(yīng)用的某個頁面; ? ?
5. 應(yīng)用的回調(diào)頁面在接收到微信的回調(diào)請求后,拿到其中的授權(quán)碼,并通過微信官方提供的access token api接口獲取access token; ? ?
6. 最后通過access token以及微信官方提供的另一個userinfo api接口就能獲取到用戶的微信賬號信息。
為了實現(xiàn)這個過程,首先要為應(yīng)用申請一個微信公眾號,并將應(yīng)用最終部署的域名設(shè)置到微信公眾號設(shè)置里面的授權(quán)回調(diào)頁面域名這個選項里面。微信官方對這個選項的說明如下:
關(guān)于網(wǎng)頁授權(quán)回調(diào)域名的說明
1、在微信公眾號請求用戶網(wǎng)頁授權(quán)之前,開發(fā)者需要先到公眾平臺官網(wǎng)中的“開發(fā) - 接口權(quán)限 - 網(wǎng)頁服務(wù) - 網(wǎng)頁帳號 - 網(wǎng)頁授權(quán)獲取用戶基本信息”的配置選項中,修改授權(quán)回調(diào)域名。請注意,這里填寫的是域名(是一個字符串),而不是URL,因此請勿加 http:// 等協(xié)議頭;
2、授權(quán)回調(diào)域名配置規(guī)范為全域名,比如需要網(wǎng)頁授權(quán)的域名為:,配置以后此域名下面的頁面 、 都可以進(jìn)行OAuth2.0鑒權(quán)。但 、 、 無法進(jìn)行OAuth2.0鑒權(quán)
3、如果公眾號登錄授權(quán)給了第三方開發(fā)者來進(jìn)行管理,則不必做任何設(shè)置,由第三方代替公眾號實現(xiàn)網(wǎng)頁授權(quán)即可
由此可見,這個規(guī)則極其嚴(yán)格。如果說我們的應(yīng)用最終部署的時候只有一個域名,那么這種規(guī)則不會有什么問題;但是考慮到將來應(yīng)用的復(fù)雜性,我們可能在應(yīng)用設(shè)計之初就會對應(yīng)用做拆分,然后不同的業(yè)務(wù)采用不同的二級域名來部署。比如一個帶有交易的應(yīng)用,你可能會把登錄注冊,交易管理和常規(guī)業(yè)務(wù)都獨(dú)立出來,然后采用以下的方式來部署它們: ?
部署常規(guī)業(yè)務(wù); ? ?
trade.your點(diǎn)抗 部署交易管理的業(yè)務(wù); ? ?
passport.your點(diǎn)抗 部署登錄注冊的業(yè)務(wù); ? ?
在這種模式下,如果集成微信登錄和微信支付,前面說的授權(quán)回調(diào)頁面域名的規(guī)則就會給應(yīng)用帶來問題。在這里:至少可以確認(rèn)trade.your點(diǎn)抗 和passport.your點(diǎn)抗 都需要前面的介紹的用戶微信授權(quán),但是它們是兩個不同的子域名,而且我們只有一個公眾號;根據(jù)授權(quán)回調(diào)頁面域名的原則,它只能用一個域名,并且只有回調(diào)地址的域名與該設(shè)置完全相同,才能成功發(fā)起微信授權(quán),否則就會提示rediret_uri參數(shù)錯誤或者引發(fā)無法回調(diào)的問題。
那么這種情況該如何處理?
當(dāng)下的解決方案是引入一個新的非常簡單的應(yīng)用來作為微信授權(quán)的代理服務(wù),可以這么做: ?
1. 把公眾號的網(wǎng)頁授權(quán)接口域名設(shè)置成另外一個子域名,如proxy.your點(diǎn)抗 ; ? ?
2. 然后把php_weixin_proxy里面的index.php部署到proxy.your點(diǎn)抗
php_weixin_proxy下的index.php是一個很簡單的php文件,你可以直接查看源碼了解它的實現(xiàn)方式。因為當(dāng)前項目的環(huán)境,我采用php來完成這個代理服務(wù)實現(xiàn),實際上,你完全可以用任意平臺語言來完成類似的功能。
當(dāng)其它業(yè)務(wù)需要發(fā)起微信授權(quán)時,將授權(quán)請求先發(fā)到proxy.your點(diǎn)抗 ,然后proxy.your點(diǎn)抗 會把這個請求轉(zhuǎn)發(fā)到微信; ?
當(dāng)用戶同意授權(quán)后,proxy.your點(diǎn)抗 會收到微信的授權(quán)回調(diào),并把回調(diào)結(jié)果(code、state參數(shù))原封不動地再返回給最開始發(fā)起授權(quán)的業(yè)務(wù)。
唯一的區(qū)別在于,在不使用proxy.your點(diǎn)抗 的時候,你從應(yīng)用發(fā)起微信授權(quán)的鏈接應(yīng)該是這樣的: ?
;redirect_uri=http%3A%2F%2Fpassport.your點(diǎn)抗 %2Fresponse_type=codescope=snsapi_loginstate=584bc87e11ff37492#wechat_redirect ? ?
用了proxy.your點(diǎn)抗 之后,這個授權(quán)鏈接就應(yīng)該是這樣的: ? ?
;redirect_uri=http%3A%2F%2Fpassport.your點(diǎn)抗 %2Flogin%2Fnotifyresponse_type=codescope=snsapi_basestate=584bc87e11ff37492device=pc
后面這個鏈接跟上面的比: ?
1. 后面的鏈接中的host變成了proxy.your點(diǎn)抗 ,也就是代理的授權(quán)回調(diào)域名; ? ?
2. 后面的多了一個device參數(shù),這個是必要的。因為微信pc端跟移動端的授權(quán)地址是不一樣的,而后面的鏈接是發(fā)送個proxy.your點(diǎn)抗 的,所以需要多加個參數(shù)告訴它在轉(zhuǎn)發(fā)給授權(quán)申請給微信的時候,是用PC端還是移動端的授權(quán)地址。
整體方案思路:
小結(jié):
這個方案我測試過,是行的通的。雖然說引入了代理服務(wù),增加了一次重定向操作,不過由于這個授權(quán)請求并不是所有請求都需要,所以實際上也不會對用戶體驗產(chǎn)生多大的影響,但是從架構(gòu)上來說,它的好處很明顯,能夠配合著應(yīng)用的拆分邏輯,集成同一個公眾號的登錄及支付功能,不必為每個子應(yīng)用都單獨(dú)申請一個公眾號來開發(fā)了(這種方式從業(yè)務(wù)上來說也不合理,一個公司哪需要運(yùn)營那么多公眾號)。
如果您的應(yīng)用是Web應(yīng)用,則需要在進(jìn)入正式環(huán)境測試時,注冊一個回調(diào)地址,用戶在通過TOP來訪問您的應(yīng)用的時候,TOP會把相關(guān)的上下文參數(shù)和SessionKey通過這個回調(diào)地址傳給您。正確的回調(diào)地址首先必須滿足域名中不含有“taobao、ali、alibaba、hitao、koubei”,其次,回調(diào)地址必須能正常打開和訪問到您相對應(yīng)的應(yīng)用。
第一步
首先來分析一下,假設(shè)你申請的QQ互聯(lián)網(wǎng)站接入的域名為,此時你申請的時候填寫的回調(diào)地址為,這樣的回調(diào)地址確實沒錯,不過這樣之后二級域名想使用該QQ互聯(lián)的appid跟appkey,那就是不可能的任務(wù)了。同樣如果填寫了abc點(diǎn)抗 /qq.php,這種也是不可取的,以后每個調(diào)用qq互聯(lián)接口的地址你都要寫死了,如果不是這個地址,接口調(diào)用就會提示錯誤的。下面說明下正確的填寫方式。
第二部
首先填寫這個回調(diào)地址的時候請先閱讀騰訊提供的一個說明文檔。在左側(cè)回調(diào)地址的下面有一個鏈接,點(diǎn)擊進(jìn)去即可查看。如果“回調(diào)地址”改成“回調(diào)域名”大家就很好理解了。
第三部
先看下圖片,答案應(yīng)該很明顯了,紅色標(biāo)注的文字“只需要填寫站點(diǎn)根域名即可”。假設(shè)申請域名是,回調(diào)地址你就填寫abc點(diǎn)抗 ,多個域名的話使用“;”(英文分號)隔開,不要畫蛇添足。這樣做的好處是后續(xù)你網(wǎng)站多級域名均可以使用該appid跟appkey,且多級域名以及根域名下網(wǎng)站接口回調(diào)的具體地址可以自由變化,且都合法。
第四部
回調(diào)地址就填寫不帶www的根域名
具體可以參考