python+tornado实现微信公众平台与服务器交互
在写完 监控自动化碎碎念 后 ,在网上有找手机APP平台与服务器进行交互的相关资料 。而目前使用人数较多的手机APP里 ,同时官方提供API较好的只有微信和易信 。易信的相关资料相对少些,毕竟平台没有微信大 。在查找通过微信与服务器之间进行交互时,有幸看到了如下的一篇内容,现摘录过来。
具体实现的效果:
python实现的代码如下:
1# -*- coding: utf-8 -*-
2import tornado.ioloop
3import tornado.web
4import hashlib
5import commands
6import xml.etree.ElementTree as ET
7import time
8def checksignature(signature, timestamp, nonce):
9 args = []
10 args.append('Your Token') ####这里输入你的Token
11 args.append(timestamp)
12 args.append(nonce)
13 args.sort()
14 mysig = hashlib.sha1(''.join(args)).hexdigest()
15 return mysig == signature
16class MainHandler(tornado.web.RequestHandler):
17 def get(self): ########验证时用
18 signature = self.get_argument('signature')
19 timestamp = self.get_argument('timestamp')
20 nonce = self.get_argument('nonce')
21 echostr = self.get_argument('echostr')
22 if checksignature(signature, timestamp, nonce):
23 self.write(echostr)
24 else:
25 self.write('fail')
26 def post(self): #######简单接收和发送消息
27 body = self.request.body
28 data = ET.fromstring(body)
29 tousername = data.find('ToUserName').text
30 fromusername = data.find('FromUserName').text
31 createtime = data.find('CreateTime').text
32 msgtype = data.find('MsgType').text
33 content = data.find('Content').text
34 msgid = data.find('MsgId').text
35 #print 'fromusername: %s' % fromusername
36 #print 'tousername: %s' % tousername
37 #print 'createtime: %s' % createtime
38 #print 'msgtype: %s' % msgtype
39 #print 'msgid: %s' % msgid
40 if content.strip() in ('ls','pwd','w','uptime'):
41 result = commands.getoutput(content)
42 else:
43 result = '不可以哦!!!'
44 textTpl = """<xml>
45 <ToUserName><![CDATA[%s]]></ToUserName>
46 <FromUserName><![CDATA[%s]]></FromUserName>
47 <CreateTime>%s</CreateTime>
48 <MsgType><![CDATA[%s]]></MsgType>
49 <Content><![CDATA[%s]]></Content>
50 </xml>"""
51 out = textTpl % (fromusername, tousername, str(int(time.time())), msgtype, result)
52 self.write(out)
53application = tornado.web.Application([
54 (r"/", MainHandler),
55])
56if __name__ == "__main__":
57 application.listen(80)
58 tornado.ioloop.IOLoop.instance().start()
这里实现的功能有点类似于webshell ,不过功能相对较弱,同时对安全认证块上也没有认证 。虽然看上去有点鸡肋,不过提供了一种思路。据从业内的了解上看,已经有很多公司确实在告警上实现了微信接口,不过仅仅只是做通知,并不做查询。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-weixin-monitor/3442.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.