成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python實(shí)現(xiàn)微信第三方網(wǎng)站掃碼登錄(Django)

lemanli / 4649人閱讀

摘要:寫(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)APPIDAPPSECRET兩個(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是唯一的.

關(guān)于UnionID機(jī)制

請(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

相關(guān)文章

  • Django使用Social-Auth實(shí)現(xiàn)微信三方網(wǎng)站掃碼登錄

    摘要:前言之前讓網(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...

    fox_soyoung 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:用django-allauth實(shí)現(xiàn)三方登錄

    摘要:比較流行的解決方案是允許用戶通過(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)...

    waruqi 評(píng)論0 收藏0
  • 微信公眾號(hào)開(kāi)發(fā)小記——4.兩種邀請(qǐ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í)候就又有幾種方式,...

    BDEEFE 評(píng)論0 收藏0
  • 說(shuō)說(shuō)微信掃碼登錄

    摘要:詳情接口我們這里主要講的是網(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)用。 ...

    Jokcy 評(píng)論0 收藏0
  • 微信公眾號(hào)開(kāi)發(fā)小記——2.80端口上的服務(wù)

    摘要:微信在做一些操作是需要用到生成二維碼等而每天接口的調(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)用...

    frank_fun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<