本文实例讲述了Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息。分享给大家供大家参考,具体如下:
说明:此代码用于接收手机微信端发送的消息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#-*- coding:utf-8 -*-
from flask import Flask,request
from WXBizMsgCrypt import WXBizMsgCrypt
import xml.etree.cElementTree as ET
import sys
app = Flask(__name__)
@app .route( '/index' ,methods = [ 'GET' , 'POST' ])
def index():
sToken = 'Uxxxx'
sEncodingAESKey = 'U2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
sCorpID = 'wx1xxxxxxxxxxxxx'
wxcpt = WXBizMsgCrypt(sToken,sEncodingAESKey,sCorpID)
#获取url验证时微信发送的相关参数
sVerifyMsgSig = request.args.get( 'msg_signature' )
sVerifyTimeStamp = request.args.get( 'timestamp' )
sVerifyNonce = request.args.get( 'nonce' )
sVerifyEchoStr = request.args.get( 'echostr' )
#
sReqMsgSig = sVerifyMsgSig
sReqTimeStamp = sVerifyTimeStamp
sReqNonce = sVerifyNonce
#
sResqMsgSig = sVerifyMsgSig
sResqTimeStamp = sVerifyTimeStamp
sResqNonce = sVerifyNonce
#验证url
if request.method = = 'GET' :
ret,sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,sVerifyNonce,sVerifyEchoStr)
print type (ret)
print type (sEchoStr)
if (ret ! = 0 ):
print "ERR: VerifyURL ret:" + ret
sys.exit( 1 )
return sEchoStr
#接收客户端消息
if request.method = = 'POST' :
#sReqMsgSig = request.form.get('msg_signature')
#sReqTimeStamp = request.form.get('timestamp')
#sReqNonce = request.form.get('nonce')
#赋值url验证请求相同的参数,使用上面注释掉的request.form.get方式获取时,测试有问题
sReqMsgSig = sVerifyMsgSig
sReqTimeStamp = sVerifyTimeStamp
sReqNonce = sVerifyNonce
sReqData = request.data
print sReqData
ret,sMsg = wxcpt.DecryptMsg( sReqData, sReqMsgSig, sReqTimeStamp, sReqNonce)
if (ret ! = 0 ):
print "ERR: VerifyURL ret:"
sys.exit( 1 )
#解析发送的内容并打印
xml_tree = ET.fromstring(sMsg)
content = xml_tree.find( "Content" ).text
print content
#被动响应消息,将微信端发送的消息返回给微信端
sRespData = '''<xml>
<ToUserName><![CDATA[mycreate]]></ToUserName>
<FromUserName><![CDATA[wx177d1233ab4b730b]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[''' + content + ''']]></Content>
<MsgId>1234567890123456</MsgId>
<AgentID>1</AgentID>
</xml>'''
ret,sEncryptMsg = wxcpt.EncryptMsg(sRespData, sReqNonce, sReqTimeStamp)
if ( ret! = 0 ):
print "ERR: EncryptMsg ret: " + ret
sys.exit( 1 )
return sEncryptMsg
if __name__ = = '__main__' :
app.run(host = '0.0.0.0' ,port = 6000 ,debug = True )
|
希望本文所述对大家Python程序设计有所帮助。
原文链接:http://j99d99.blog.51cto.com/2828759/1831564