# encoding=utf-8 注释可用中文
from flask import Flask, request, make_response
import hashlib
import xml.etree.ElementTree as ET
import time
app = Flask(__name__)
app.debug = True
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/weixin', methods=['GET', 'POST'])
def check():
if request.method == 'GET': #如果是get方法--从服务器请求数据
token = r'cdedunews' # 这里的cdedunews就是微信里的token
query = request.args #请求链接中的参数
signature = query.get('signature', '')
echostr = query.get('echostr', '')
timestamp = query.get('timestamp', '')
nonce = query.get('nonce', '')
s = [timestamp, nonce, token]
s.sort()
s = ''.join(s)
if (hashlib.sha1(s).hexdigest()==signature):
return make_response(echostr)
else:
return "Access denied."
else: #如果是post方法--向服务器提交数据
xml_recv = ET.fromstring(request.data) #获取用户发送的原始数据
ToUserName = xml_recv.find("ToUserName").text #获取之前发送的 目标用户(公众号)
FromUserName = xml_recv.find("FromUserName").text #获取之前的 消息来源用户
Content = xml_recv.find("Content").text #获取之前 向服务器发送的消息
#构造xml格式,回复内容
reply = """<xml>
<ToUserName> <![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>"""
response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), Content))
response.content_type = 'application/xml'
return response #返回这个xml消息
if __name__ == '__main__':
app.run()
以上代码,在微信公众号已实现将原内容原封不动回复。 之前遇到的,该公众号暂时无法什么什么,是因为<XML>这种格式的语言,中间不能加空格,否则服务器认,微信这边返回不认。 调试,在微信公众号里面--开发--运维中心--日志查询--公众号被动回复里面,类型选择文本,确实可以看到之前的测试文本回复。
在线调试器:http://debug.fangbei.org/