背景
最近申请了一个微信公众号,想根据用户的消息进行智能动态回复。于是有了这篇文章。
公众号申请: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。
二维码:
提供多种功能,包括新闻检索、微信游戏、面试题获取、图片处理、领域知识尝试等功能,后续多种功能持续集成中。