摘要:微信在做一些操作是需要用到生成二維碼等而每天接口的調(diào)用上限為,需要自己做緩存文檔講了幾種方式,我覺得放在中拿比較妥當(dāng)。微信菜單會緩存分鐘,你可以取消關(guān)注,然后在關(guān)注查看菜單變化效果。
描述
微信公眾號開發(fā)基本分為2大種類型
1.用戶直接做了某些操作(回復(fù)信息、訂閱、掃碼、發(fā)語音、點按鈕等),此時這些信息微信會發(fā)送到微信服務(wù)器的80端口,這是一種開發(fā)類型;
2.通過連接(按鈕、文章)引導(dǎo)用戶到另一個網(wǎng)站,網(wǎng)站通過oauth實現(xiàn)微信的三方登錄做到用戶打通,然后提供更多服務(wù)
注意第二種類型的其他網(wǎng)站可以跟第一種類型(只提供80端口服務(wù))的網(wǎng)站是一個server
80端口的服務(wù)開發(fā)代碼位置weixin_server tag:80-port-20160415
wechat對象以及緩存access_tokenwechat sdk操作都需要一個wechat的東西,生成這玩意兒需要加載一個wechat_config,config里面包含了你的appid,appsecret,以及你消息加密解密的配置,為了簡少根據(jù)加密方式造成的代碼變更,我在配置里面添加了settings.WEIXIN_ENCRYPT_MODE,這樣直接填寫你的加密模式,就可以在任何用到wechat的地方直接import一個wechat變量,之所以要用get_wechat的方式實時生成是為了做access_token的緩存,下面會講。
from .wechat import get_wechat wechat = get_wechat()
微信在做一些操作是需要用到access_token(生成二維碼等),而每天access_token接口的調(diào)用上限為2000,需要自己做緩存, sdk文檔講了幾種方式,我覺得放在cache中拿比較妥當(dāng)。
代碼我不貼了,這是位置
weixin/config.py
weixin/wechat.py
微信會在用戶對公眾號交互時像我們的服務(wù)器80端口post一些事件,sdk文檔 message源碼,大體看了下我寫了個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,這樣在繼承的類里面直接實現(xiàn)weixin_handler_xxx方法即可,然而event有更多的類型,如果是通用處理則直接實現(xiàn)weixin_handler_event,如果要更加細(xì)化,例如掃碼的event,則實現(xiàn)weixin_handler_event_scan方法,可以參考weixin_server/views.py
菜單兒菜單可以直接在admin定制,由于菜單類似一種配置,同一時間最多且只有1個,我就把edx的config_model拿過來了,自己定制了下admin,這樣你可以直接在admin里面修改菜單,微信會生效。微信菜單會緩存5分鐘,你可以取消關(guān)注,然后在關(guān)注查看菜單變化效果。
菜單這塊兒的代碼有點意思,感興趣的可以看下。
weixin/models.py
weixin/admin.py
二維碼的邏輯略有不同(相對于sdk的其他response_xxx),所以我寫了個qrcode.py封裝了一下,注意永久二維碼只能生產(chǎn)10萬張,業(yè)務(wù)場景不要亂用,二維碼的這些id、url都是需要做本地存儲的,我沒接model就丟到緩存里了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/45421.html
摘要:借著這個需求體會了下微信開發(fā)的兩種不同類型非端口的兩種開發(fā),以及的一些正確姿勢。關(guān)于用戶微信登錄的事情我們通過已經(jīng)解決了參考我的上一篇博客微信公眾號開發(fā)小記接入三方登錄,所以可以直接用的裝飾器完成這種事情。 描述 假設(shè)的我們的服務(wù)號有這么一些功能,比如底部有按鈕,點擊會有一些復(fù)雜的功能,這時候可能就需要一個用戶系統(tǒng),有用戶系統(tǒng)就經(jīng)常想要做什么分享邀請新用戶之類的,這時候就又有幾種方式,...
摘要:描述由于馬上要做一波公眾號開發(fā),今天先調(diào)研,把基本的服務(wù)器接起來。手腳架地址文檔微信公眾號公眾號開發(fā)首先你要有個公眾號,這里就不說了按照流程申請。腳手架的說明微信公眾號接入的時候要做很多事情,為了簡化開發(fā),提供一個版本的服務(wù)器。 描述 由于馬上要做一波公眾號開發(fā),今天先調(diào)研,把基本的服務(wù)器接起來。微信公眾號服務(wù)器在接入的時候要做一些煩躁的事情,改配置的時候要進(jìn)行握手,api調(diào)用要做一些...
摘要:我接觸已經(jīng)很久了,其中微信的就是我貢獻(xiàn)的代碼,然而當(dāng)時做的時候比較年輕,而且這個項目處于一個很大的代碼重構(gòu)中,借這次機(jī)會重新用正確的姿勢接入了一下三方登錄,可以當(dāng)做一個學(xué)習(xí)接入三方的。 為什么要接入三方登錄 如果你的微信服務(wù)器要做復(fù)雜的邏輯,比如html5、給用戶提供高級的服務(wù),并且有很好看的頁面等等,這種時候你就需要一個正常的web服務(wù)器,用戶打通就需要做三方登錄了。 而如果你決定直...
摘要:微信各個服務(wù)是獨立的,比較蛋疼,要用紅包功能,首先你需要注冊一個微信商戶平臺賬號。首先是微信證書,用的是,與這兩個。寫在最后微信開發(fā)者工具挺好用的,服務(wù)號里把自己加為開發(fā)者就能用了。 描述 有時候產(chǎn)品有這么一些需求,當(dāng)用戶滿足一定條件時,給他發(fā)一定金額的紅包。 微信各個服務(wù)是獨立的,比較蛋疼,要用紅包功能,首先你需要注冊一個微信商戶平臺賬號。 代碼位置 分支pay-20160802 微...
摘要:前段時間為了抓取網(wǎng)絡(luò)文本數(shù)據(jù),申請了騰訊云學(xué)生機(jī),用的框架弄了一段時間。這個用戶既是不可登錄的操作系統(tǒng)用戶,也是數(shù)據(jù)庫用戶。設(shè)置數(shù)據(jù)庫用戶密碼為了能夠讓和數(shù)據(jù)庫相連接,需要設(shè)置數(shù)據(jù)庫用戶密碼。 打讀研之后,更加關(guān)注算法的學(xué)習(xí),Web開發(fā)這一塊便落下了,平時也通過微信公眾號關(guān)注了些,常常感慨,技術(shù)的更迭真是日新月異。 前段時間為了抓取網(wǎng)絡(luò)文本數(shù)據(jù),申請了騰訊云學(xué)生機(jī),用Python的Sc...
閱讀 1734·2021-10-18 13:30
閱讀 2608·2021-10-09 10:02
閱讀 2965·2021-09-28 09:35
閱讀 2091·2019-08-26 13:39
閱讀 3522·2019-08-26 13:36
閱讀 1950·2019-08-26 11:46
閱讀 1135·2019-08-23 14:56
閱讀 1694·2019-08-23 10:38