# -*- coding:utf-8 -*-
fromflask import Flaskfromflask import request
import hashlib
import time
import re
import xml.etree.ElementTreeasET
app=Flask(__name__)
@app.route("/")
def index():return "Hello World!"@app.route("/wechat", methods=["GET","POST"])
def weixin():if request.method == "GET": # 判断请求方式是GET请求
my_signature= request.args.get('signature') # 获取携带的signature参数
my_timestamp= request.args.get('timestamp') # 获取携带的timestamp参数
my_nonce= request.args.get('nonce') # 获取携带的nonce参数
my_echostr= request.args.get('echostr') # 获取携带的echostr参数
# my_token= request.args.get('token')
print(my_signature)
print(my_timestamp)
print(my_nonce)
print(my_echostr)
# print(my_token)
token= '123456'# 一定要跟刚刚填写的token一致
# 进行字典排序
data=[token,my_timestamp ,my_nonce ]
data.sort()
# 拼接成字符串,进行hash加密时需为字符串
data= ''.join(data)
#创建一个hash对象
s=hashlib.sha1()
#对创建的hash对象更新需要加密的字符串
s.update(data.encode("utf-8"))
#加密处理
mysignature=s.hexdigest()
print("handle/GET func: mysignature, my_signature:", mysignature, my_signature)
# 加密后的字符串可与signature对比,标识该请求来源于微信if my_signature ==mysignature:returnmy_echostrelse:return ""
else:
# 解析xml
xml=ET.fromstring(request.data)
toUser= xml.find('ToUserName').text
fromUser= xml.find('FromUserName').text
msgType= xml.find("MsgType").text
createTime= xml.find("CreateTime")
# 判断类型并回复if msgType == "text":
content= xml.find('Content').text
content=content+"已收到"
returnreply_text(fromUser, toUser, content)else:return reply_text(fromUser, toUser, "我只懂文字")
def reply_text(to_user, from_user, content):"""以文本类型的方式回复请求""" return """
{}
""".format(to_user, from_user, int(time.time() * 1000), content)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=879)