微信公众号会向接口处发送不同的数据
GET数据是验证信息,你需要计算传来的数据,判断是否符合要求,如果符合,返回传来的echostr
字段
POST数据是数据处理,用户输入等内容以xml的格式post到同一个地址,你需要处理xml数据,根据字段进行相应操作。其中,返回时同样是xml格式的信息,并且from和to部分要交换位置。
对应代码如下,其中userInput是根据不同输入进行不同处理的函数
@app.route('/api/weixin/', methods=['GET', 'POST']) def apiweixin(): if request.method == 'GET': token = 'ohyee' query = request.args signature = query.get('signature', '') timestamp = query.get('timestamp', '') nonce = query.get('nonce', '') echostr = query.get('echostr', '') s = [timestamp, nonce, token] s.sort() s = ''.join(s) if (hashlib.sha1(s).hexdigest() == signature): return make_response(echostr) else: return make_response("error") else: from xml.etree import ElementTree xml = ElementTree.fromstring(request.data) ToUserName = xml.find("ToUserName").text FromUserName = xml.find("FromUserName").text Content = xml.find("Content").text reply = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>" print("%s->%s %s" % (FromUserName, ToUserName, Content)) Content = userInput(Content) response = make_response( reply % (FromUserName, ToUserName, str(int(time.time())), Content)) response.content_type = 'application/xml' return response