Flask在新浪SAE部署服務 寫微信公眾平臺回覆的功能
阿新 • • 發佈:2019-02-18
書接上文。
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']) defcheck(): 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>這種格式的語言,中間不能加空格,否則伺服器認,微信這邊返回不認。
除錯,在微信公眾號裡面--開發--運維中心--日誌查詢--公眾號被動回覆裡面,型別選擇文字,確實可以看到之前的測試文本回復。