Flask+SAE搭建微信后台初探
申请微信公众号
申请通过之后,将模式改为开发者模式
,并填入自己服务器的url
及token
(令牌)。
在SAE上新建Python项目
微信公众号与SAE应用的对接和验证
处理流程为:
- 用户发送请求到微信服务器
- 微信服务器发送请求到SAE
- SAE返回消息给微信服务器
- 微信服务器返回消息给用户
SAE上处理Http请求,验证之后返回,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import time from flask import Flask, g, request, make_response import hashlib
@app.route('/', methods = ['GET', 'POST'] ) def wechat_auth(): if request.method == 'GET': token = 'xxxxxxxxxxx' 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)
|
按照SAE中Python及Flask规范将代码提交到SVN中,将应用地址和token填入微信公众平台进行验证,如果设置成功,即完成验证。
处理用户消息(以文本消息为例)
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,文本消息格式如下:
1 2 3 4 5 6 7 8
| <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
|
我们将此消息解析出来,然后再构造xml返回给用户,ToUserName和FromUserName
需对换,代码如下:
1 2 3 4 5 6 7 8 9 10
| xml_recv = ET.fromstring(request.data) ToUserName = xml_recv.find("ToUserName").text FromUserName = xml_recv.find("FromUserName").text Content = xml_recv.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>" response = make_response( reply % (FromUserName, ToUserName, str(int(time.time())), Content ) ) response.content_type = 'application/xml' return response
|
到此,在微信公众号里回复消息,应该就会有消息回复啦~
参考
SAE入门指南之Python
微信接入指南