1. 程式人生 > 實用技巧 >python3 flask 微信公眾號訊息接收測試程式碼

python3 flask 微信公眾號訊息接收測試程式碼

code

# -*- coding:utf-8 -*-
from flask import Flask
from flask import request
import hashlib
import time
import re
import xml.etree.ElementTree as ET

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: return my_echostr else: 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+"已收到" return reply_text(fromUser, toUser, content) else: return reply_text(fromUser, toUser, "我只懂文字") def reply_text(to_user, from_user, content): """ 以文字型別的方式回覆請求 """ return """ <xml> <ToUserName><![CDATA[{}]]></ToUserName> <FromUserName><![CDATA[{}]]></FromUserName> <CreateTime>{}</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{}]]></Content> </xml> """.format(to_user, from_user, int(time.time() * 1000), content) if __name__ == "__main__": app.run(host='0.0.0.0', port=879)