創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
目前創(chuàng)新互聯(lián)已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管運(yùn)營、企業(yè)網(wǎng)站設(shè)計、保亭黎族網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。小編給大家分享一下用python登錄qq的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
應(yīng)用接入前,首先需進(jìn)行申請,獲得對應(yīng)的appid與appkey,以保證后續(xù)流程中可正確對網(wǎng)站與用戶進(jìn)行驗證與授權(quán)。http://wiki.connect.qq.com/__trashed-2
QQ登錄開發(fā)文檔連接 http://wiki.connect.qq.com/準(zhǔn)備工作_oauth3-0
騰訊QQ互聯(lián)平臺沒有python SDK,我們使用封裝好的SDK包
安裝:pip install QQLoginTool
導(dǎo)入:from QQLoginTool.QQtool import OAuthQQ
OAuthQQ類中的方法:
__init__(self, client_id=None, client_secret=None, redirect_uri=None, state=None):
·client_id : 申請QQ登錄成功后,分配給應(yīng)用的appid。
·client_secret:申請QQ登錄成功后,分配給網(wǎng)站的appkey。
·redirect_uri:成功授權(quán)后的回調(diào)地址,必須是注冊appid時填寫的主域名下的地址,建議設(shè)置為網(wǎng)站首頁或網(wǎng)站的用戶中心。注意需要將url進(jìn)行URLEncode。
·state:client端的狀態(tài)值。用于第三方應(yīng)用防止CSRF攻擊,成功授權(quán)后回調(diào)時會原樣帶回。請務(wù)必嚴(yán)格按照流程檢查用戶與state參數(shù)狀態(tài)的綁定。
get_qq_url(self) # 獲取QQ登錄網(wǎng)頁網(wǎng)址 get_access_token(self, code) # 獲取access_token值 get_open_id(self, access_token) # 獲取open_id值
下面以Django為例實現(xiàn)QQ第三方登錄
過程:
獲取QQ登錄網(wǎng)頁網(wǎng)址
接口設(shè)計:
請求方式:GET /?state=xxx
請求參數(shù):
返回數(shù)據(jù):JSON
{ login_url": "https://graph.qq.com/oauth3.0/show?which=Login&display=pc&response_type=code&client_id=**& redirect_uri=**&state=**&scope=**" }
代碼實現(xiàn):
from QQLoginTool.QQtool import OAuthQQ from django.conf import settings from rest_framework.views import APIView ... # 獲取login_url class OauthQQLogin(APIView): def get(self, request): # 獲取前端傳入的參數(shù) state = request.query_params.get('next', None) # 判斷是否有,如果沒有后端創(chuàng)建一個 if not state: state = '/' # 實例化對象 oauth = OAuthQQ(client_id=settings.QQ_CLIENT_ID, client_secret=settings.QQ_CLIENT_SECRET, redirect_uri= settings.QQ_REDIRECT_URI, state=state) # 獲取login_url login_url = oauth.get_qq_url() # 返回login_url return Response({'login_url': login_url})
獲取openid
在QQ將用戶重定向到此網(wǎng)頁的時候,重定向的網(wǎng)址會攜帶QQ提供的code參數(shù),用于獲取用戶信息使用,我們需要將這個code參數(shù)發(fā)送給后端,在后端中使用code參數(shù)向QQ請求用戶的身份信息
/oauth_callback.html?code=****&state=%2F
oauth_callback回調(diào)頁,用于掃碼后接受Authorization Code
通過Authorization Code獲取Access Token
然后通過Access Token獲取openid
接口設(shè)計:
請求方式:GET /?code=xxx
請求參數(shù):
返回數(shù)據(jù):JSON
{ "openid": xxxx }
代碼實現(xiàn):
from QQLoginTool.QQtool import OAuthQQ from django.conf import settings from itsdangerous import TimedJSONWebSignatureSerializer as TJS from rest_framework.views import APIView ... # 獲取openid class OauthQQToken(APIView): def get(self, request): # 獲取前端傳入的code code = request.query_params.get('code', None) # 判斷是否有,如果沒有直接return if not code: return Response({'message': '缺少code'}) oauth = OAuthQQ(client_id=settings.QQ_CLIENT_ID, client_secret=settings.QQ_CLIENT_SECRET,redirect_uri= settings.QQ_REDIRECT_URI) try: # 使用code向QQ服務(wù)器請求access_token access_token = oauth.get_access_token(code) # 使用access_token獲取openid openid = oauth.get_open_id(access_token) except: return Response({'message': 'QQ服務(wù)異常'}) ...
看完了這篇文章,相信你對用python登錄qq的方法有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!