之前看到很多篇调用微信公众平台接口的文章,今天小试了一把,确实很不错。

实现的功能如下:

6f6a4381jw1ec6h0arkkpj20k00zkade.jpg

代码如下:

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
<FONT> <FONT># - * - 编码方式:UTF - 8 - * - < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
进口tornado.ioloop < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
进口tornado.web < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
进口hashlib < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
导入命令< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
进口xml.etree.ElementTree如ET < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
进口时间< / FONT> < / FONT> <FONT> < / FONT>
<FONT> < / FONT> <FONT> <FONT>
高清checksignature(签名,时间戳,随机数):< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
ARGS = [] < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
args.append( '令牌' )####这里输入你的令牌< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
args.append(时间戳)< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
args.append(随机数)< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
args.sort()< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
MySig的 = hashlib.sha1(''。加入(参数))。hexdigest()< / font>< / font><font>< / font><font><font>
返回MySig的的签名 = = < / FONT> < / FONT> <FONT> < / FONT>
<FONT> < / FONT> <FONT> <FONT>
类MainHandler(tornado.web.RequestHandler):< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
DEF得到(个体经营):########验证时用< / font>< / font><font>< / font><font><font>
签名 = 自我 。get_argument( '签名' )< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
时间戳 = 自我 。get_argument( '时间戳' )< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
随机数 = 自我 。get_argument(“随机数”)< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
echostr = 自我 。get_argument( 'echostr' )< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
如果checksignature(签名,时间戳,随机数):< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
自我 。写(echostr)< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
其他:< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
自我 。写( '失败' )< / FONT> < / FONT> <FONT> < / FONT>
<FONT> < / FONT> <FONT> <FONT>
高清发布(个体经营):#######简单接收和发送消息< / font>< / font><font>< / font><font><font>
= 自我 。request.body < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
数据 = ET.fromstring(体)< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
tousername = data.find( 'ToUserName' )。文本< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
fromusername = data.find( 'FromUserName' )。文本< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
createtime = data.find( 'CreateTime' )。文本< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
MSGTYPE = data.find( 'MSGTYPE' )。文本< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
内容 = data.find(“内容”)。文本< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
MSGID = data.find( '的的MsgId' )。文本< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
#打印 'fromusername:%s'中 的%fromusername < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
#打印 'tousername:%s'中 的%tousername < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
#打印 'createtime:%s'中 的%createtime < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
#打印“信息类型:%s'中的%MSGTYPE < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
#打印中“#:%s'中的%MSGID < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
如果content.strip()在( 'ls' 中, 'PWD' 'W' '运行时间' ):< / font>< / font><font>< / font><font><font>
结果 = commands.getoutput(内容)< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
其他:< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
结果 = '不可以哦!“< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
textTpl = “”“<XML> < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
<ToUserName> <![CDATA [%S]]> < / ToUserName> < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
<FromUserName> <![CDATA [%S]]> < / FromUserName> < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
<CreateTime>%s的的< / CreateTime> < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
<MsgType> <![CDATA [%S]]> < / MSGTYPE> < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
<Content> <![CDATA [%S]]> < / 内容> < / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
< / XML>“”“< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
= textTpl%(fromusername,tousername, STR INT (time.time())),信息类型,结果)< / font>< / font><font>< / font><font><font>
自我 。写(出)< / FONT> < / FONT> <FONT> < / FONT>
<FONT> < / FONT> <FONT> <FONT>
应用 = tornado.web.Application([< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
(R“ / “,MainHandler)< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
】)< / FONT> < / FONT> <FONT> < / FONT>
<FONT> < / FONT> <FONT> <FONT>
如果__name__的 = = “__main__”:< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
application.listen( 80 )< / FONT> < / FONT> <FONT> < / FONT> <FONT> <FONT>
tornado.ioloop.IOLoop.instance()开始()< / FONT> < / FONT>