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':
#用户发送语音信息
这段时间一直在搞微信,就将微信回调以及动作处理的东西整理了一下,分享出来。
上述代码包括了微信回调以及部分动作的操作判断。重构一下会更简洁些,为了能整体的查看微信的回调模式,就用了笨办法直接全写在了一起。代码里包括了用户关注、判断用户发送信息类别,菜单click事件判断。可根据判断结果对用户进行回复操作。