国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python實現微信第三方網站掃碼登錄(Django)

lemanli / 4617人閱讀

摘要:寫在前面本周剛在項目中實現了微信第三方網站掃碼登錄。準備與注意事項微信公眾平臺跟微信開放平臺是兩個不同的平臺,別搞混了。參數在微信開放平臺中查看。

寫在前面

本周剛在項目中實現了微信第三方網站掃碼登錄。因為第一次寫相關項目,所以遇到了很多坑。所以寫這篇文章是希望像我之前那樣的小白也能從容的開發,不要浪費無謂的時間,這篇文章盡量寫的詳細簡單。
準備與注意事項

微信公眾平臺跟微信開放平臺是兩個不同的平臺,別搞混了。微信公眾平臺與微信開放平臺的區別

微信開放平臺里需要創建網站的應用,網上沒找到創建網站應用的教程,鏈接是創建移動應用的教程,大體步驟類似,細節就不啰嗦。

創建之后注意修改回調授權域名,否則會出現scope參數錯誤或沒有scope權限錯誤。注意里面的域名格式,例如www.qq.com,不要加http

準備好微信開放平臺APPIDAPPSECRET兩個參數。參數在微信開放平臺中查看。

微信官方開發文檔

開發時使用到的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機制

請注意,網頁授權獲取用戶基本信息也遵循UnionID機制。即如果開發者有在多個公眾號,或在公眾號、移動應用之間統一用戶帳號的需求,需要前往微信開放平臺(open.weixin.qq.com)綁定公眾號后,才可利用UnionID機制來滿足上述需求。
UnionID機制的作用說明:如果開發者擁有多個移動應用、網站應用和公眾帳號,可通過獲取用戶基本信息中的unionid來區分用戶的唯一性,因為同一用戶,對同一個微信開放平臺下的不同應用(移動應用、網站應用和公眾帳號),unionid是相同的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38222.html

相關文章

  • Django使用Social-Auth實現微信三方網站掃碼登錄

    摘要:前言之前讓網頁公司制作新官網的時候規劃有第三方賬號的登錄功能,但由于當時的一些開放平臺申請步驟比較繁瑣尤其是微信開放平臺,所以一直拖延著,到了最近只能自己添加相關的功能。 前言 之前讓網頁公司制作新官網的時候規劃有第三方賬號的登錄功能,但由于當時的一些開放平臺申請步驟比較繁瑣(尤其是微信開放平臺),所以一直拖延著,到了最近只能自己添加相關的功能。 由于是剛接觸Python和Django...

    fox_soyoung 評論0 收藏0
  • Django搭建個人博客:用django-allauth實現三方登錄

    摘要:比較流行的解決方案是允許用戶通過第三方登錄,即可以通過微博這類知名社區的授權,從而登錄你的小站,免去了注冊的麻煩。微博微信的登錄方式大致都遵循這個流程本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請讀者查閱官方文檔去實現。 現在我們已經擁有一個可以進行用戶本地登錄的博客系統了。如果有人欣賞你的文章,說不定就會注冊成為本地用戶,并和你好好交流一番。 但頭疼的是,用戶可能每天都在互聯網...

    waruqi 評論0 收藏0
  • 微信公眾號開發小記——4.兩種邀請用戶的方式 掃碼&&鏈接

    摘要:借著這個需求體會了下微信開發的兩種不同類型非端口的兩種開發,以及的一些正確姿勢。關于用戶微信登錄的事情我們通過已經解決了參考我的上一篇博客微信公眾號開發小記接入三方登錄,所以可以直接用的裝飾器完成這種事情。 描述 假設的我們的服務號有這么一些功能,比如底部有按鈕,點擊會有一些復雜的功能,這時候可能就需要一個用戶系統,有用戶系統就經常想要做什么分享邀請新用戶之類的,這時候就又有幾種方式,...

    BDEEFE 評論0 收藏0
  • 說說微信掃碼登錄

    摘要:詳情接口我們這里主要講的是網站應用,網站應用微信登錄是基于協議標準構建的微信授權登錄系統即上面的協議。在微信客戶端授權登錄獲取用戶信息的可以查看。微信授權登錄目前支持模式,適用于擁有端的應用授權。 一、OAuth2.0 OAuth(開放授權)是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。 ...

    Jokcy 評論0 收藏0
  • 微信公眾號開發小記——2.80端口上的服務

    摘要:微信在做一些操作是需要用到生成二維碼等而每天接口的調用上限為,需要自己做緩存文檔講了幾種方式,我覺得放在中拿比較妥當。微信菜單會緩存分鐘,你可以取消關注,然后在關注查看菜單變化效果。 描述 微信公眾號開發基本分為2大種類型 1.用戶直接做了某些操作(回復信息、訂閱、掃碼、發語音、點按鈕等),此時這些信息微信會發送到微信服務器的80端口,這是一種開發類型;2.通過連接(按鈕、文章)引導用...

    frank_fun 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<