-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathweixin.py
79 lines (70 loc) · 2.74 KB
/
weixin.py
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
71
72
73
74
75
76
77
78
79
# -*- coding: utf-8 -*-
import os
import web
import time
import conf
from bs4 import BeautifulSoup
import logging, logging.handlers
urls = ('/', 'index')
loggers = {}
db = web.database(dbn='mysql', user=conf.DB_USER, pw=conf.DB_PWD, db=conf.DB_NAME)
class index:
def __init__(self):
self.app_root = os.path.dirname(__file__)
self.templates_root = os.path.join(self.app_root, 'templates')
self.render = web.template.render(self.templates_root)
self.wxlogger = self.myLogger('weixin')
def myLogger(self, name):
global loggers
if loggers.get(name):
return loggers.get(name)
else:
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='wxrun.log', mode='a')
formatter = logging.Formatter('[%(name)s:%(lineno)s] - %(asctime)s - %(levelname)s: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
loggers.update(dict(name=logger))
return logger
def GET(self):
data = web.input()
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = conf.TOKEN
list = [token, timestamp,nonce]
list.sort()
sha1=hashlib.sha1()
map(sha1.update, list)
hashcode=sha1.hexdigest()
if hashcode == signature:
return echostr
def POST(self):
try:
poststr = web.data()
soup = BeautifulSoup(poststr, "xml")
fromuser = soup.FromUserName.text
touser = soup.ToUserName.text
frommsgtype = soup.MsgType.text
curtime = int(time.time())
echostr = keyword
#query table 'wx_test' info
infos = db.select('wx_test', where='title like $key', order='id', vars={'key':'%'+keyword+'%'})
except Exception as e:
echostr = "parse fail", e
self.wxlogger.error("parse fail %s" % (e))
self.wxlogger.info("poststr[%s]" % (poststr))
if "text" == frommsgtype:
keyword = soup.Content.text.strip()
echostr = keyword
return self.render.reply_text(fromuser, touser, curtime, u'''我现在还在开发中,还没有什么功能,您刚才说的是:''' + keyword)
elif "event" == frommsgtype:
fromevent = soup.Event.text
return self.render.reply_text(fromuser, touser, curtime, u'''您好,欢迎关注!''')
else:
return self.render.reply_text(fromuser, touser, curtime, u'''您好,未知消息。。。''')
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()