6w 作业,微信后台

  • 任务要求

    • 在之前开发基础上, 完成 极简交互式笔记的 微信后台 版本
    • 需求如下:

      • 将公网应用网站改写为公众号后台服务
      • 可以通过公众号使用:

        • 使用专用指令,可打印出过往所有笔记
        • 一次接收手机端输入的文字(不包含表情/图片/声音/视频...)
        • 在服务端合理保存
        • 同时兼容的命令行工具远程交互/使用/管理
      • 可以通过本地命令行工具监察/管理网站:

        • 获得当前笔记数量/访问数量等等基础数据
        • 可以获得所有笔记备份的归档下载

背景

  • 开发系统:OS X 10.10
  • python版本:2.7.10
  • 框架: flask
  • 服务器:pythonanywhere
  • 微信公共帐号

这个任务差不多把5w的任务再加一个微信认证,再把1w任务整合用于判断,就差不多了

帐号认证的直接找到这篇文章 [Flask+SAE快速打造微信公众帐号] (http://blog.csdn.net/linhan8/article/details/8746110)

直接用里面的代码,就认证成功了。

@app.route('/wechat', methods = ['GET', 'POST'] )
def wechat_auth():
    if request.method == 'GET':
        token = "#######" #我微信的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格式的数据,用户发送数据给公共帐号,数据会以xml格式包装之后发送出去。所以我们只需要把xml的格式解析出来内容来就行

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

数据包的文本信息

 <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.etree.ElementTree 模块来解析。

之前想到如何来获取这个POST body的信息,搜索到这个How can I get the whole request POST body in Python with Flask? 其实上面一个博客链接的就用request.data了,因为是flask框架。

xml_recv = ET.fromstring(request.data) 这条来获取post形象。

接下来就只需把收到的信息处理就行了。

需要注意的,微信返回了给开发这的数据<ToUserName>再前面后面是 <FromUserName> ,反回去这两个的位置需要换下。

.format(dict_data['FromUserName'],dict_data['ToUserName'],dict_data['Content'])
  • 手机界面

  • 二维码