书接上文。
myapp.py代码:
# 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>这种格式的语言,中间不能加空格,否则服务器认,微信这边返回不认。
调试,在微信公众号里面--开发--运维中心--日志查询--公众号被动回复里面,类型选择文本,确实可以看到之前的测试文本回复。