摘要:寫(xiě)在前面本周剛在項(xiàng)目中實(shí)現(xiàn)了微信第三方網(wǎng)站掃碼登錄。準(zhǔn)備與注意事項(xiàng)微信公眾平臺(tái)跟微信開(kāi)放平臺(tái)是兩個(gè)不同的平臺(tái),別搞混了。參數(shù)在微信開(kāi)放平臺(tái)中查看。
寫(xiě)在前面
本周剛在項(xiàng)目中實(shí)現(xiàn)了微信第三方網(wǎng)站掃碼登錄。因?yàn)榈谝淮螌?xiě)相關(guān)項(xiàng)目,所以遇到了很多坑。所以寫(xiě)這篇文章是希望像我之前那樣的小白也能從容的開(kāi)發(fā),不要浪費(fèi)無(wú)謂的時(shí)間,這篇文章盡量寫(xiě)的詳細(xì)簡(jiǎn)單。
準(zhǔn)備與注意事項(xiàng)
微信公眾平臺(tái)跟微信開(kāi)放平臺(tái)是兩個(gè)不同的平臺(tái),別搞混了。微信公眾平臺(tái)與微信開(kāi)放平臺(tái)的區(qū)別
微信開(kāi)放平臺(tái)里需要?jiǎng)?chuàng)建網(wǎng)站的應(yīng)用,網(wǎng)上沒(méi)找到創(chuàng)建網(wǎng)站應(yīng)用的教程,鏈接是創(chuàng)建移動(dòng)應(yīng)用的教程,大體步驟類似,細(xì)節(jié)就不啰嗦。
創(chuàng)建之后注意修改回調(diào)授權(quán)域名,否則會(huì)出現(xiàn)scope參數(shù)錯(cuò)誤或沒(méi)有scope權(quán)限錯(cuò)誤。注意里面的域名格式,例如www.qq.com,不要加http
準(zhǔn)備好微信開(kāi)放平臺(tái)的APPID和APPSECRET兩個(gè)參數(shù)。參數(shù)在微信開(kāi)放平臺(tái)中查看。
微信官方開(kāi)發(fā)文檔
開(kāi)發(fā)時(shí)使用到的python第三方庫(kù)requests
開(kāi)發(fā)二維碼授權(quán)鏈接
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
其中的
APPID = "你的APPID"
APPSECRET = "你的APPSECRET"
REDIRECT_URL = "指向微信登錄的處理函數(shù),例如django的view地址,注意URL必須編碼"
SCOPE = "snsapi_login"
STATE = "不是必須的,作用時(shí)重定向后會(huì)帶上state參數(shù),開(kāi)發(fā)者可以填寫(xiě)a-zA-Z0-9的參數(shù)值,最多128字節(jié),"
我剛寫(xiě)的網(wǎng)站的例子,可以幫忙點(diǎn)一下增加下注冊(cè)量(笑),點(diǎn)開(kāi)鏈接可以看具體的參數(shù)。
https://open.weixin.qq.com/co...
不知道現(xiàn)在工作的網(wǎng)站會(huì)不會(huì)倒閉,防止鏈接失效,就再付一個(gè)一號(hào)店的鏈接吧。同樣可以點(diǎn)進(jìn)去看相關(guān)參數(shù)。
https://open.weixin.qq.com/co...
下面就是處理授權(quán)時(shí)的函數(shù)了
class WeiXinLogin(View): appid = "wxe0d95453c412f118" # 你自己的 appsecret = "d785bt925fbc7ebed62734cfdpe5951c" # 你自己的 code = "" state = "" # 為了方便大家看,我都寫(xiě)在一個(gè)函數(shù)里 def get_info(self): # 第一步獲取code跟state try: self.code = self.request.GET.get("code") self.state = self.request.GET.get("state") except Exception, e: add_log.info("獲取code和stat參數(shù)錯(cuò)誤: %s" % str(traceback.format_exc())) # 2.通過(guò)code換取網(wǎng)頁(yè)授權(quán)access_token try: url = u"https://api.weixin.qq.com/sns/oauth2/access_token" params = { "appid": self.appid, "secret": self.appsecret, "code": self.code, "grant_type": "authorization_code" } res = requests.get(url, params=params).json() access_token = res["access_token"] # 只是呈現(xiàn)給大家看,可以刪除這行 openid = res["openid"] # 只是呈現(xiàn)給大家看,可以刪除這行 except Exception, e: add_log.info("獲取access_token參數(shù)錯(cuò)誤: %s" % str(traceback.format_exc())) raise Http404() # 3.如果access_token超時(shí),那就刷新 # 注意,這里我沒(méi)有寫(xiě)這個(gè)刷新功能,不影響使用,如果想寫(xiě)的話,可以自己去看文檔 # 4.拉取用戶信息 try: user_info_url = u"https://api.weixin.qq.com/sns/userinfo" params = { "access_token": res["access_token"], "openid": res["openid"], } res = requests.get(user_info_url, params=params).json() """ 注意,這里有個(gè)坑,res["nickname"]表面上是unicode編碼, 但是里面的串卻是str的編碼,舉個(gè)例子,res["nickname"]的返回值可能是這種形式 u"xe9x97xabxe5xb0x8fxe8x83x96",直接存到數(shù)據(jù)庫(kù)會(huì)是亂碼.必須要轉(zhuǎn)成 unicode的編碼,需要使用 res["nickname"] = res["nickname"].encode("iso8859-1").decode("utf-8") 這種形式來(lái)轉(zhuǎn)換. 你也可以寫(xiě)個(gè)循環(huán)來(lái)轉(zhuǎn)化. for value in res.values(): value = value.encode("iso8859-1").decode("utf-8") """ except Exception, e: add_log.info("拉取用戶信息錯(cuò)誤: %s" % str(traceback.format_exc())) # 保存到數(shù)據(jù)庫(kù)及登錄 # 返回的數(shù)據(jù)全部在res字典中
剩下就要看不同項(xiàng)目的第三方登錄的表是怎么設(shè)計(jì)的了.主要的思路是維護(hù)一張第三方登錄的表,把以后第三方登錄的信息都放在里面,設(shè)計(jì)思路可以借鑒廖雪峰的文章.
設(shè)計(jì)一個(gè)可擴(kuò)展的用戶登錄系統(tǒng) (1)
設(shè)計(jì)一個(gè)可擴(kuò)展的用戶登錄系統(tǒng) (2)
設(shè)計(jì)一個(gè)可擴(kuò)展的用戶登錄系統(tǒng) (3)
注意,判斷登錄的時(shí)候是驗(yàn)證該用戶的unionid,不是openid,因?yàn)槿绻愕木W(wǎng)站還有微信公眾平臺(tái)的微信授權(quán)的話,同一用戶
使用你的微信公眾平臺(tái)跟微信開(kāi)放平臺(tái)登錄之后,兩次的openid是不一樣的,但是unionid是唯一的.
請(qǐng)注意,網(wǎng)頁(yè)授權(quán)獲取用戶基本信息也遵循UnionID機(jī)制。即如果開(kāi)發(fā)者有在多個(gè)公眾號(hào),或在公眾號(hào)、移動(dòng)應(yīng)用之間統(tǒng)一用戶帳號(hào)的需求,需要前往微信開(kāi)放平臺(tái)(open.weixin.qq.com)綁定公眾號(hào)后,才可利用UnionID機(jī)制來(lái)滿足上述需求。
UnionID機(jī)制的作用說(shuō)明:如果開(kāi)發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),可通過(guò)獲取用戶基本信息中的unionid來(lái)區(qū)分用戶的唯一性,因?yàn)橥挥脩?,?duì)同一個(gè)微信開(kāi)放平臺(tái)下的不同應(yīng)用(移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào)),unionid是相同的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38222.html
摘要:前言之前讓網(wǎng)頁(yè)公司制作新官網(wǎng)的時(shí)候規(guī)劃有第三方賬號(hào)的登錄功能,但由于當(dāng)時(shí)的一些開(kāi)放平臺(tái)申請(qǐng)步驟比較繁瑣尤其是微信開(kāi)放平臺(tái),所以一直拖延著,到了最近只能自己添加相關(guān)的功能。 前言 之前讓網(wǎng)頁(yè)公司制作新官網(wǎng)的時(shí)候規(guī)劃有第三方賬號(hào)的登錄功能,但由于當(dāng)時(shí)的一些開(kāi)放平臺(tái)申請(qǐng)步驟比較繁瑣(尤其是微信開(kāi)放平臺(tái)),所以一直拖延著,到了最近只能自己添加相關(guān)的功能。 由于是剛接觸Python和Django...
摘要:比較流行的解決方案是允許用戶通過(guò)第三方登錄,即可以通過(guò)微博這類知名社區(qū)的授權(quán),從而登錄你的小站,免去了注冊(cè)的麻煩。微博微信的登錄方式大致都遵循這個(gè)流程本章雖然加載了微博的接口,但是限于篇幅并沒(méi)有配置,請(qǐng)讀者查閱官方文檔去實(shí)現(xiàn)。 現(xiàn)在我們已經(jīng)擁有一個(gè)可以進(jìn)行用戶本地登錄的博客系統(tǒng)了。如果有人欣賞你的文章,說(shuō)不定就會(huì)注冊(cè)成為本地用戶,并和你好好交流一番。 但頭疼的是,用戶可能每天都在互聯(lián)網(wǎng)...
摘要:借著這個(gè)需求體會(huì)了下微信開(kāi)發(fā)的兩種不同類型非端口的兩種開(kāi)發(fā),以及的一些正確姿勢(shì)。關(guān)于用戶微信登錄的事情我們通過(guò)已經(jīng)解決了參考我的上一篇博客微信公眾號(hào)開(kāi)發(fā)小記接入三方登錄,所以可以直接用的裝飾器完成這種事情。 描述 假設(shè)的我們的服務(wù)號(hào)有這么一些功能,比如底部有按鈕,點(diǎn)擊會(huì)有一些復(fù)雜的功能,這時(shí)候可能就需要一個(gè)用戶系統(tǒng),有用戶系統(tǒng)就經(jīng)常想要做什么分享邀請(qǐng)新用戶之類的,這時(shí)候就又有幾種方式,...
摘要:詳情接口我們這里主要講的是網(wǎng)站應(yīng)用,網(wǎng)站應(yīng)用微信登錄是基于協(xié)議標(biāo)準(zhǔn)構(gòu)建的微信授權(quán)登錄系統(tǒng)即上面的協(xié)議。在微信客戶端授權(quán)登錄獲取用戶信息的可以查看。微信授權(quán)登錄目前支持模式,適用于擁有端的應(yīng)用授權(quán)。 一、OAuth2.0 OAuth(開(kāi)放授權(quán))是一個(gè)開(kāi)放標(biāo)準(zhǔn),允許用戶讓第三方應(yīng)用訪問(wèn)該用戶在某一網(wǎng)站上存儲(chǔ)的私密的資源(如照片,視頻,聯(lián)系人列表),而無(wú)需將用戶名和密碼提供給第三方應(yīng)用。 ...
摘要:微信在做一些操作是需要用到生成二維碼等而每天接口的調(diào)用上限為,需要自己做緩存文檔講了幾種方式,我覺(jué)得放在中拿比較妥當(dāng)。微信菜單會(huì)緩存分鐘,你可以取消關(guān)注,然后在關(guān)注查看菜單變化效果。 描述 微信公眾號(hào)開(kāi)發(fā)基本分為2大種類型 1.用戶直接做了某些操作(回復(fù)信息、訂閱、掃碼、發(fā)語(yǔ)音、點(diǎn)按鈕等),此時(shí)這些信息微信會(huì)發(fā)送到微信服務(wù)器的80端口,這是一種開(kāi)發(fā)類型;2.通過(guò)連接(按鈕、文章)引導(dǎo)用...
閱讀 2327·2021-11-22 12:01
閱讀 2003·2021-11-12 10:34
閱讀 4531·2021-09-22 15:47
閱讀 2844·2019-08-30 15:56
閱讀 2876·2019-08-30 15:53
閱讀 2416·2019-08-30 13:53
閱讀 3389·2019-08-29 15:35
閱讀 3133·2019-08-29 12:27