1. 程式人生 > >【微信開發系列】1. python開發微信公眾號訊息回覆開發者模式

【微信開發系列】1. python開發微信公眾號訊息回覆開發者模式

背景

最近申請了一個微信公眾號,想根據使用者的訊息進行智慧動態回覆。於是有了這篇文章。 公眾號申請:https://mp.weixin.qq.com。 想根據具體訊息進行智慧動態回覆,需要開啟開發者模式。 開發者模式需要進入開發者中心進行編碼認證。這裡面只講主要的程式碼,關鍵步驟見參考資料

開發環境

環境:python + sae + Flask

myapp.py

開啟後需要認證伺服器,伺服器認證程式碼編寫:
import hashlib
from flask import Flask, request, render_template, jsonify, make_response
import time
import _elementtree as ET

app = Flask(__name__)
app.debug = True

@app.route('/weixin/', methods=['GET', 'POST'])
def wechat_auth():
    if request.method == 'GET':
        token = '****'   # your token
    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)

設定訊息回覆

認證完畢後,即可根據微信發來的xml進行訊息解析,然後根據具體訊息進行回覆。 設定訊息回覆的程式碼如下,只需要修改剛才的函式體:
@app.route('/weixin/', methods=['GET', 'POST'])
def wechat_auth():
    cQuestion = CQuestion()
    xml_recv = ET.fromstring(request.data)
    ToUserName = xml_recv.find("ToUserName").text
    FromUserName = xml_recv.find("FromUserName").text
    Content = xml_recv.find("Content").text
    cResponse = CResponse()
    cQuestion.insertIntoSql(ToUserName)
    cQuestion.insertIntoSql(FromUserName)
    if Content.strip() == "1":
        return cResponse.getResponseXml(FromUserName, ToUserName, "Hello, world!")
    elif Content.strip() == "2":
        return cResponse.getResponseXml(FromUserName, ToUserName, "Hello, python!")
    else:
        return cResponse.getResponseXml(FromUserName, ToUserName, "Hello!")


測試

編寫完上面的程式碼並提交後開始測試,測試效果如下:

更多測試

關注微訊號itoffer。 二維碼:    提供多種功能,包括新聞檢索、微信遊戲、面試題獲取、圖片處理、領域知識嘗試等功能,後續多種功能持續整合中。

參考資料