新用戶關注微信公衆平臺,將產生一個訂閱事件,即subscribe事件,在新用戶關注公衆平臺後爲新用戶提供一些簡明扼要的公衆號說明微信
事件推送(event);app
接收到消息後,首先須要對消息類型作出判斷,而後再針對不一樣類型的消息作出處理。在事件推送中,事件類型又分爲三種,subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點擊事件),還須要再加一次判斷;判斷爲subscribe事件後,根據設定好的歡迎消息,回覆給用戶微信公衆平臺
首先,咱們修改前面的微信入口函數wechat,增長處理Post內容功能。函數
@csrf_exempt def wechat(request): response = None if request.method == 'GET': response = HttpResponse(checkSignature(request),content_type="text/plain")
elif request.method == 'POST': response= HttpResponse(responseMsg(request.body),content_type="application/xml") else: response = None return response
def responseMsg(postContent): postStr = smart_str(postContent) if postStr: msg = xmlContent2Dic(postStr) if msg['MsgType']: if msg['MsgType'] == 'event': resultStr = handleEvent(msg) #處理事件推送 else: resultStr = 'Input something...' return resultStr #函數把微信XML格式信息轉換成字典格式 def xmlContent2Dic(xmlContent): dics = {} elementTree = ElementTree.fromstring(xmlContent) if elementTree.tag == 'xml': for child in elementTree : dics[child.tag] = smart_unicode(child.text) return dics
在「微信」的事件推送中,事件類型又分爲三種,subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點擊事件),這樣咱們在handleEvent函數裏判斷本次推送是subscribe事件,而後根據設定好的歡迎消息,回覆給用戶。post
def handleEvent(msg): if msg['Event'] == 'subscribe': resultStr="<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>" resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',u'感謝您關注【微人人公衆號】\n目前功能以下:【1】 庫存查詢;') return resultStr
代碼更新好後,當用戶有關注咱們的公衆號時,就會獲得上面的回覆。spa
本章節咱們簡要介紹瞭如何用戶關注訂閱號/服務號的關注事件,依此類推咱們也能夠擴展代碼進一步處理用戶取消關注的事件或微信接口供處理的其它事件。code