摘要:寫在前面本周剛在項目中實現了微信第三方網站掃碼登錄。準備與注意事項微信公眾平臺跟微信開放平臺是兩個不同的平臺,別搞混了。參數在微信開放平臺中查看。
寫在前面
本周剛在項目中實現了微信第三方網站掃碼登錄。因為第一次寫相關項目,所以遇到了很多坑。所以寫這篇文章是希望像我之前那樣的小白也能從容的開發,不要浪費無謂的時間,這篇文章盡量寫的詳細簡單。
準備與注意事項
微信公眾平臺跟微信開放平臺是兩個不同的平臺,別搞混了。微信公眾平臺與微信開放平臺的區別
微信開放平臺里需要創建網站的應用,網上沒找到創建網站應用的教程,鏈接是創建移動應用的教程,大體步驟類似,細節就不啰嗦。
創建之后注意修改回調授權域名,否則會出現scope參數錯誤或沒有scope權限錯誤。注意里面的域名格式,例如www.qq.com,不要加http
準備好微信開放平臺的APPID和APPSECRET兩個參數。參數在微信開放平臺中查看。
微信官方開發文檔
開發時使用到的python第三方庫requests
開發二維碼授權鏈接
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 = "指向微信登錄的處理函數,例如django的view地址,注意URL必須編碼"
SCOPE = "snsapi_login"
STATE = "不是必須的,作用時重定向后會帶上state參數,開發者可以填寫a-zA-Z0-9的參數值,最多128字節,"
我剛寫的網站的例子,可以幫忙點一下增加下注冊量(笑),點開鏈接可以看具體的參數。
https://open.weixin.qq.com/co...
不知道現在工作的網站會不會倒閉,防止鏈接失效,就再付一個一號店的鏈接吧。同樣可以點進去看相關參數。
https://open.weixin.qq.com/co...
下面就是處理授權時的函數了
class WeiXinLogin(View): appid = "wxe0d95453c412f118" # 你自己的 appsecret = "d785bt925fbc7ebed62734cfdpe5951c" # 你自己的 code = "" state = "" # 為了方便大家看,我都寫在一個函數里 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參數錯誤: %s" % str(traceback.format_exc())) # 2.通過code換取網頁授權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"] # 只是呈現給大家看,可以刪除這行 openid = res["openid"] # 只是呈現給大家看,可以刪除這行 except Exception, e: add_log.info("獲取access_token參數錯誤: %s" % str(traceback.format_exc())) raise Http404() # 3.如果access_token超時,那就刷新 # 注意,這里我沒有寫這個刷新功能,不影響使用,如果想寫的話,可以自己去看文檔 # 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() """ 注意,這里有個坑,res["nickname"]表面上是unicode編碼, 但是里面的串卻是str的編碼,舉個例子,res["nickname"]的返回值可能是這種形式 u"xe9x97xabxe5xb0x8fxe8x83x96",直接存到數據庫會是亂碼.必須要轉成 unicode的編碼,需要使用 res["nickname"] = res["nickname"].encode("iso8859-1").decode("utf-8") 這種形式來轉換. 你也可以寫個循環來轉化. for value in res.values(): value = value.encode("iso8859-1").decode("utf-8") """ except Exception, e: add_log.info("拉取用戶信息錯誤: %s" % str(traceback.format_exc())) # 保存到數據庫及登錄 # 返回的數據全部在res字典中
剩下就要看不同項目的第三方登錄的表是怎么設計的了.主要的思路是維護一張第三方登錄的表,把以后第三方登錄的信息都放在里面,設計思路可以借鑒廖雪峰的文章.
設計一個可擴展的用戶登錄系統 (1)
設計一個可擴展的用戶登錄系統 (2)
設計一個可擴展的用戶登錄系統 (3)
注意,判斷登錄的時候是驗證該用戶的unionid,不是openid,因為如果你的網站還有微信公眾平臺的微信授權的話,同一用戶
使用你的微信公眾平臺跟微信開放平臺登錄之后,兩次的openid是不一樣的,但是unionid是唯一的.
請注意,網頁授權獲取用戶基本信息也遵循UnionID機制。即如果開發者有在多個公眾號,或在公眾號、移動應用之間統一用戶帳號的需求,需要前往微信開放平臺(open.weixin.qq.com)綁定公眾號后,才可利用UnionID機制來滿足上述需求。
UnionID機制的作用說明:如果開發者擁有多個移動應用、網站應用和公眾帳號,可通過獲取用戶基本信息中的unionid來區分用戶的唯一性,因為同一用戶,對同一個微信開放平臺下的不同應用(移動應用、網站應用和公眾帳號),unionid是相同的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38222.html
摘要:前言之前讓網頁公司制作新官網的時候規劃有第三方賬號的登錄功能,但由于當時的一些開放平臺申請步驟比較繁瑣尤其是微信開放平臺,所以一直拖延著,到了最近只能自己添加相關的功能。 前言 之前讓網頁公司制作新官網的時候規劃有第三方賬號的登錄功能,但由于當時的一些開放平臺申請步驟比較繁瑣(尤其是微信開放平臺),所以一直拖延著,到了最近只能自己添加相關的功能。 由于是剛接觸Python和Django...
摘要:比較流行的解決方案是允許用戶通過第三方登錄,即可以通過微博這類知名社區的授權,從而登錄你的小站,免去了注冊的麻煩。微博微信的登錄方式大致都遵循這個流程本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請讀者查閱官方文檔去實現。 現在我們已經擁有一個可以進行用戶本地登錄的博客系統了。如果有人欣賞你的文章,說不定就會注冊成為本地用戶,并和你好好交流一番。 但頭疼的是,用戶可能每天都在互聯網...
摘要:借著這個需求體會了下微信開發的兩種不同類型非端口的兩種開發,以及的一些正確姿勢。關于用戶微信登錄的事情我們通過已經解決了參考我的上一篇博客微信公眾號開發小記接入三方登錄,所以可以直接用的裝飾器完成這種事情。 描述 假設的我們的服務號有這么一些功能,比如底部有按鈕,點擊會有一些復雜的功能,這時候可能就需要一個用戶系統,有用戶系統就經常想要做什么分享邀請新用戶之類的,這時候就又有幾種方式,...
摘要:微信在做一些操作是需要用到生成二維碼等而每天接口的調用上限為,需要自己做緩存文檔講了幾種方式,我覺得放在中拿比較妥當。微信菜單會緩存分鐘,你可以取消關注,然后在關注查看菜單變化效果。 描述 微信公眾號開發基本分為2大種類型 1.用戶直接做了某些操作(回復信息、訂閱、掃碼、發語音、點按鈕等),此時這些信息微信會發送到微信服務器的80端口,這是一種開發類型;2.通過連接(按鈕、文章)引導用...
閱讀 2310·2021-11-22 12:01
閱讀 1983·2021-11-12 10:34
閱讀 4508·2021-09-22 15:47
閱讀 2827·2019-08-30 15:56
閱讀 2860·2019-08-30 15:53
閱讀 2397·2019-08-30 13:53
閱讀 3370·2019-08-29 15:35
閱讀 3119·2019-08-29 12:27