def weixin(request): if request.method == 'GET': response=HttpResponse() try: signature = request.GET['signature'] timestamp = request.GET['timestamp'] nonce = request.GET['nonce'] echostr = request.GET['echostr'] except: pass response.write(echostr) return response elif request.method == 'POST': xml = request.raw_post_data doc = minidom.parseString(xml) root = doc.documentElement node = root.getElementsByTagName('MsgType')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data MsgType = rc node = root.getElementsByTagName('ToUserName')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data ToUserName = rc node = root.getElementsByTagName('FromUserName')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data FromUserName = rc node = root.getElementsByTagName('CreateTime')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data CreateTime = rc dbgFile.write(ToUserName+' '+FromUserName+' '+CreateTime+'\n') if MsgType == 'event': node = root.getElementsByTagName('Event')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data Event = str(rc) if Event == 'subscribe': #用户关注公众号触发事件 elif Event == 'LOCATION': #location service node = root.getElementsByTagName('Latitude')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data Latitude = rc node = root.getElementsByTagName('Longitude')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data Longitude = rc node = root.getElementsByTagName('Precision')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data Precision = rc elif Event == 'CLICK': #微信菜单click事件 node = root.getElementsByTagName('EventKey')[0] rc = "" for n in node.childNodes: if n.nodeType in ( n.TEXT_NODE, n.CDATA_SECTION_NODE): rc = rc + n.data EventKey = rc if EventKey == 'V_INDUSTRYNEWS': #依据菜单设置的值进行判断 elif MsgType == 'text': #用户发送文本信息 elif MsgType == 'voice': #用户发送语音信息 elif MsgType == 'image': #用户发送图片信息 elif MsgType == 'voice': #用户发送语音信息
这段时间一直在搞微信,就将微信回调以及动做处理的东西整理了一下,分享出来。
node
上述代码包括了微信回调以及部分动做的操做判断。重构一下会更简洁些,为了能总体的查看微信的回调模式,就用了笨办法直接全写在了一块儿。代码里包括了用户关注、判断用户发送信息类别,菜单click事件判断。可根据判断结果对用户进行回复操做。python