flask搭建微信公众号服务端

354

使用flask搭建微信公众号的服务端
微信公众号会向接口处发送不同的数据
GET数据是验证信息,你需要计算传来的数据,判断是否符合要求,如果符合,返回传来的echostr字段
POST数据是数据处理,用户输入等内容以xml的格式post到同一个地址,你需要处理xml数据,根据字段进行相应操作。其中,返回时同样是xml格式的信息,并且from和to部分要交换位置。

对应代码如下,其中userInput是根据不同输入进行不同处理的函数

@app.route('/api/weixin/', methods=['GET', 'POST'])
def apiweixin():
    if request.method == 'GET':
        token = 'ohyee'
        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)
        else:
            return make_response("error")
    else:
        from xml.etree import ElementTree
        xml = ElementTree.fromstring(request.data)
        ToUserName = xml.find("ToUserName").text
        FromUserName = xml.find("FromUserName").text
        Content = xml.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>"
        print("%s->%s %s" % (FromUserName, ToUserName, Content))
        Content = userInput(Content)
        response = make_response(
            reply % (FromUserName, ToUserName, str(int(time.time())), Content))
        response.content_type = 'application/xml'
        return response
发布评论
  • 点击查看/关闭被识别为广告的评论