使用python語言,django web框架,以及wechatpy,快速完成微信公衆號後臺服務的簡易搭建,作記錄於此。html
wechatpy是一個python的微信公衆平臺sdk,封裝了被動消息和主動推送的各類api,作公衆平臺開發時只需關注消息內容,無需處理xml解析等工做。
項目地址:https://github.com/jxtech/wechatpy
文檔地址:http://docs.wechatpy.org/python
首先固然是安裝django,安裝wechatpy。
可參照 http://docs.wechatpy.org/zh_CN/master/install.html 完成wechatpy及其依賴的安裝。git
項目urls.py中配置相應url,指定到本身的名爲mywechat應用中,如github
urlpatterns = [ url(r'^wx/', include('mywechat.urls')), ]
mywechat應用中配置url指定到某個view:web
urlpatterns = [ url(r'', views.handle_wx, name="wx"), ]
views.py中寫一個handle_wx方法,用於處理微信請求:django
from django.http import HttpResponse, HttpResponseRedirect from django.views.decorators.csrf import csrf_exempt from wechatpy import parse_message, create_reply from wechatpy.utils import check_signature from wechatpy.exceptions import InvalidSignatureException from wechatpy.replies import BaseReply # 如下兩個是本身定義的模塊,位於wechat.util包下,分別處理文本和事件消息 from mywechat.util import reply_text, reply_event TOKEN = 'xxxxx' # 這裏要指定一個token,後續填入到微信平臺中 @csrf_exempt def handle_wx(request): # GET方式用於微信公衆平臺綁定驗證 if request.method == 'GET': signature = request.GET.get('signature', '') timestamp = request.GET.get('timestamp', '') nonce = request.GET.get('nonce', '') echo_str = request.GET.get('echostr', '') try: check_signature(TOKEN, signature, timestamp, nonce) except InvalidSignatureException: echo_str = 'error' response = HttpResponse(echo_str, content_type="text/plain") return response # POST方式用於接受和返回請求 else: reply = None msg = parse_message(request.body) # 判斷消息類型,文本消息則調用reply_text進行處理 if msg.type == 'text': reply = reply_text.do_reply(msg) elif msg.type == 'event': reply = reply_event.do_reply(msg) else: pass if not reply or not isinstance(reply, BaseReply): reply = create_reply('暫不支持您所發送的消息類型喲~ 回覆「幫助」查看使用說明。', msg) response = HttpResponse(reply.render(), content_type="application/xml") return response
文本、圖片、語音等不少消息類型均支持,詳情參見:http://docs.wechatpy.org/zh_CN/master/messages.html#api
新建reply_text.py,用於處理文本類消息。服務器
from wechatpy import parse_message, create_reply from wechatpy.replies import TextReply, ArticlesReply from wechatpy.utils import check_signature from wechatpy.exceptions import InvalidSignatureException def do_reply(msg): reply = None try: if msg.content == '天氣': # msg.content即爲消息內容 reply = create_reply('相關回覆文本', msg) else: reply = create_reply('沒有此關鍵詞', msg) except Exception as e: print 'error:', e return reply
能夠對用戶的關注、取關等事件進行處理。若是消息類型爲event,則會被view調用reply_event.py進行處理。微信
from wechatpy import create_reply # 響應用戶關注/取關事件 def do_reply(msg): reply = None try: # 關注事件 if msg.event == 'subscribe': reply = create_reply('你好呀', msg) elif msg.event == 'unsubscribe': # 用戶取關 pass else: reply = create_reply('暫不支持您發送的內容', msg) except Exception as e: print('error:', e) reply = create_reply('出錯了', msg) return reply
支持更多類型的事件,詳細能夠查看wechatpy的文檔:http://docs.wechatpy.org/zh_CN/master/events.htmlapp
完成以上代碼後,能夠處理簡單的關注和取關事件,並響應文字消息了。此時,須要先將調試環境映射到外網,能夠用花生殼這個軟件:http://hsk.oray.com/ , 可免費用來在測試程序時將本地服務映射到外網。
好比,綁定了 testwx.imwork.net 的域名(端口爲80),映射到 127.0.0.1:8000.
公衆號後臺也須要進行配置,進入「開發——基本配置」,填寫服務器配置。
url寫爲剛纔申請到的域名,並注意後面與django中的url同樣,即應當寫爲 http://testwx.imwork.net/wx/。
令牌(token)則是與上面view中的token相同。
可選擇明文方式的消息,也可根據須要選擇加密消息。
配置完成後,點擊保存時,公衆號後臺會向指定的url發送一次GET請求,若是代碼沒問題的話,則程序會返回預約的值,無誤後即完成綁定。
而後在公衆號中回覆文字,就能收到相應的消息了,公衆號後臺最基礎的開發就完成了。
這裏只簡略寫了最基本的配置,若是須要支持更多類型的事件或消息,或者主動經過api接口向公衆平臺推送,請參閱wechatpy的文檔吧,同時,有的操做也須要公衆號具備相應的權限才能夠。
http://www.cnblogs.com/ryhan/p/5011962.html