亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

微信公眾號(hào)開(kāi)發(fā)小記——2.80端口上的服務(wù)

frank_fun / 965人閱讀

摘要:微信在做一些操作是需要用到生成二維碼等而每天接口的調(diào)用上限為,需要自己做緩存文檔講了幾種方式,我覺(jué)得放在中拿比較妥當(dāng)。微信菜單會(huì)緩存分鐘,你可以取消關(guān)注,然后在關(guān)注查看菜單變化效果。

描述

微信公眾號(hào)開(kāi)發(fā)基本分為2大種類(lèi)型

1.用戶(hù)直接做了某些操作(回復(fù)信息、訂閱、掃碼、發(fā)語(yǔ)音、點(diǎn)按鈕等),此時(shí)這些信息微信會(huì)發(fā)送到微信服務(wù)器的80端口,這是一種開(kāi)發(fā)類(lèi)型;
2.通過(guò)連接(按鈕、文章)引導(dǎo)用戶(hù)到另一個(gè)網(wǎng)站,網(wǎng)站通過(guò)oauth實(shí)現(xiàn)微信的三方登錄做到用戶(hù)打通,然后提供更多服務(wù)

注意第二種類(lèi)型的其他網(wǎng)站可以跟第一種類(lèi)型(只提供80端口服務(wù))的網(wǎng)站是一個(gè)server

80端口的服務(wù)開(kāi)發(fā)

代碼位置weixin_server tag:80-port-20160415

wechat對(duì)象以及緩存access_token

wechat sdk操作都需要一個(gè)wechat的東西,生成這玩意兒需要加載一個(gè)wechat_config,config里面包含了你的appid,appsecret,以及你消息加密解密的配置,為了簡(jiǎn)少根據(jù)加密方式造成的代碼變更,我在配置里面添加了settings.WEIXIN_ENCRYPT_MODE,這樣直接填寫(xiě)你的加密模式,就可以在任何用到wechat的地方直接import一個(gè)wechat變量,之所以要用get_wechat的方式實(shí)時(shí)生成是為了做access_token的緩存,下面會(huì)講。

from .wechat import get_wechat

wechat = get_wechat()

微信在做一些操作是需要用到access_token(生成二維碼等),而每天access_token接口的調(diào)用上限為2000,需要自己做緩存, sdk文檔講了幾種方式,我覺(jué)得放在cache中拿比較妥當(dāng)。

代碼我不貼了,這是位置
weixin/config.py
weixin/wechat.py

handler各種微信post到80的事件

微信會(huì)在用戶(hù)對(duì)公眾號(hào)交互時(shí)像我們的服務(wù)器80端口post一些事件,sdk文檔 message源碼,大體看了下我寫(xiě)了個(gè)mixin

# -*- coding: utf-8 -*-
from weixin.wechat import get_wechat
from wechat_sdk.messages import MESSAGE_TYPES, EventMessage

wechat = get_wechat()

REVERSED_MESSAGE_TYPES = {value:key for key, value in MESSAGE_TYPES.iteritems()}

class WeixinDispatchMixin(object):

    def dispatch_weixin(self, request, *args, **kwargs):
        content = request.body
        signature = request.GET.get("signature", "")
        msg_signature = request.GET.get("msg_signature", "")
        timestamp = request.GET.get("timestamp", "")
        nonce = request.GET.get("nonce", "")
        try:
            wechat.parse_data(
                    content,
                    msg_signature=msg_signature,
                    timestamp=timestamp,
                    nonce=nonce)
        except ParseError:
            return HttpResponse("Invalid Body Text")
        handler_name = self.get_weixin_handler_name(request, wechat, *args, **kwargs)
        handler = getattr(self, handler_name, self.http_method_not_allowed)
        return handler(request, wechat, *args, **kwargs)

    def get_weixin_handler_name(self, request, parsed_wechat, *args, **kwargs):
        message = parsed_wechat.message
        if isinstance(message, EventMessage):
            event_name = REVERSED_MESSAGE_TYPES[type(message)]
            event_detail_name = "weixin_handler_{}_{}".format(event_name, message.type)
            if hasattr(self, event_detail_name):
                event_name = event_detail_name
                return event_name
        return u"weixin_handler_{}".format(REVERSED_MESSAGE_TYPES.get(type(message), "unsupport"))
        

mixin參考django的dispatch,這樣在繼承的類(lèi)里面直接實(shí)現(xiàn)weixin_handler_xxx方法即可,然而event有更多的類(lèi)型,如果是通用處理則直接實(shí)現(xiàn)weixin_handler_event,如果要更加細(xì)化,例如掃碼的event,則實(shí)現(xiàn)weixin_handler_event_scan方法,可以參考weixin_server/views.py

菜單兒

菜單可以直接在admin定制,由于菜單類(lèi)似一種配置,同一時(shí)間最多且只有1個(gè),我就把edx的config_model拿過(guò)來(lái)了,自己定制了下admin,這樣你可以直接在admin里面修改菜單,微信會(huì)生效。微信菜單會(huì)緩存5分鐘,你可以取消關(guān)注,然后在關(guān)注查看菜單變化效果。

菜單這塊兒的代碼有點(diǎn)意思,感興趣的可以看下。

weixin/models.py
weixin/admin.py

生成二維碼

二維碼的邏輯略有不同(相對(duì)于sdk的其他response_xxx),所以我寫(xiě)了個(gè)qrcode.py封裝了一下,注意永久二維碼只能生產(chǎn)10萬(wàn)張,業(yè)務(wù)場(chǎng)景不要亂用,二維碼的這些id、url都是需要做本地存儲(chǔ)的,我沒(méi)接model就丟到緩存里了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/45421.html

相關(guān)文章

  • 微信公眾號(hào)開(kāi)發(fā)小記——4.兩種邀請(qǐng)用戶(hù)的方式 掃碼&&鏈接

    摘要:借著這個(gè)需求體會(huì)了下微信開(kāi)發(fā)的兩種不同類(lèi)型非端口的兩種開(kāi)發(fā),以及的一些正確姿勢(shì)。關(guān)于用戶(hù)微信登錄的事情我們通過(guò)已經(jīng)解決了參考我的上一篇博客微信公眾號(hào)開(kāi)發(fā)小記接入三方登錄,所以可以直接用的裝飾器完成這種事情。 描述 假設(shè)的我們的服務(wù)號(hào)有這么一些功能,比如底部有按鈕,點(diǎn)擊會(huì)有一些復(fù)雜的功能,這時(shí)候可能就需要一個(gè)用戶(hù)系統(tǒng),有用戶(hù)系統(tǒng)就經(jīng)常想要做什么分享邀請(qǐng)新用戶(hù)之類(lèi)的,這時(shí)候就又有幾種方式,...

    BDEEFE 評(píng)論0 收藏0
  • 微信公眾號(hào)開(kāi)發(fā)小記——1.接入微信服務(wù)

    摘要:描述由于馬上要做一波公眾號(hào)開(kāi)發(fā),今天先調(diào)研,把基本的服務(wù)器接起來(lái)。手腳架地址文檔微信公眾號(hào)公眾號(hào)開(kāi)發(fā)首先你要有個(gè)公眾號(hào),這里就不說(shuō)了按照流程申請(qǐng)。腳手架的說(shuō)明微信公眾號(hào)接入的時(shí)候要做很多事情,為了簡(jiǎn)化開(kāi)發(fā),提供一個(gè)版本的服務(wù)器。 描述 由于馬上要做一波公眾號(hào)開(kāi)發(fā),今天先調(diào)研,把基本的服務(wù)器接起來(lái)。微信公眾號(hào)服務(wù)器在接入的時(shí)候要做一些煩躁的事情,改配置的時(shí)候要進(jìn)行握手,api調(diào)用要做一些...

    sshe 評(píng)論0 收藏0
  • 微信公眾號(hào)開(kāi)發(fā)小記——3.接入三方登錄

    摘要:我接觸已經(jīng)很久了,其中微信的就是我貢獻(xiàn)的代碼,然而當(dāng)時(shí)做的時(shí)候比較年輕,而且這個(gè)項(xiàng)目處于一個(gè)很大的代碼重構(gòu)中,借這次機(jī)會(huì)重新用正確的姿勢(shì)接入了一下三方登錄,可以當(dāng)做一個(gè)學(xué)習(xí)接入三方的。 為什么要接入三方登錄 如果你的微信服務(wù)器要做復(fù)雜的邏輯,比如html5、給用戶(hù)提供高級(jí)的服務(wù),并且有很好看的頁(yè)面等等,這種時(shí)候你就需要一個(gè)正常的web服務(wù)器,用戶(hù)打通就需要做三方登錄了。 而如果你決定直...

    aisuhua 評(píng)論0 收藏0
  • 微信公眾號(hào)開(kāi)發(fā)小記——5.python微信紅包

    摘要:微信各個(gè)服務(wù)是獨(dú)立的,比較蛋疼,要用紅包功能,首先你需要注冊(cè)一個(gè)微信商戶(hù)平臺(tái)賬號(hào)。首先是微信證書(shū),用的是,與這兩個(gè)。寫(xiě)在最后微信開(kāi)發(fā)者工具挺好用的,服務(wù)號(hào)里把自己加為開(kāi)發(fā)者就能用了。 描述 有時(shí)候產(chǎn)品有這么一些需求,當(dāng)用戶(hù)滿(mǎn)足一定條件時(shí),給他發(fā)一定金額的紅包。 微信各個(gè)服務(wù)是獨(dú)立的,比較蛋疼,要用紅包功能,首先你需要注冊(cè)一個(gè)微信商戶(hù)平臺(tái)賬號(hào)。 代碼位置 分支pay-20160802 微...

    JerryZou 評(píng)論0 收藏0
  • 騰訊云Codeigniter小記

    摘要:前段時(shí)間為了抓取網(wǎng)絡(luò)文本數(shù)據(jù),申請(qǐng)了騰訊云學(xué)生機(jī),用的框架弄了一段時(shí)間。這個(gè)用戶(hù)既是不可登錄的操作系統(tǒng)用戶(hù),也是數(shù)據(jù)庫(kù)用戶(hù)。設(shè)置數(shù)據(jù)庫(kù)用戶(hù)密碼為了能夠讓和數(shù)據(jù)庫(kù)相連接,需要設(shè)置數(shù)據(jù)庫(kù)用戶(hù)密碼。 打讀研之后,更加關(guān)注算法的學(xué)習(xí),Web開(kāi)發(fā)這一塊便落下了,平時(shí)也通過(guò)微信公眾號(hào)關(guān)注了些,常常感慨,技術(shù)的更迭真是日新月異。 前段時(shí)間為了抓取網(wǎng)絡(luò)文本數(shù)據(jù),申請(qǐng)了騰訊云學(xué)生機(jī),用Python的Sc...

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

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

0條評(píng)論

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