微信公众号开发(三):自动回复“你好”

上一篇做了服务器校验,但没有处理用户发来的消息,为了完成自动回复的功能,需要增加一些功能:

1、调整服务器校验函数:

def verify_wechat(request):
    token='token'
    data=request.args
    signature=data.get('signature')
    timestamp=data.get('timestamp')
    nonce=data.get('nonce')
    echostr=data.get('echostr')
    temp=[timestamp,nonce,token]
    temp.sort()
    temp=''.join(temp)

    if (hashlib.sha1(temp.encode('utf8')).hexdigest()==signature):
        return echostr
    else:
        return 'error',403
2、解析用户发来的信息

微信公众号中,用户发给公众号的消息是以xml形式发给服务器的,所以要先对xml进行解析:

def getUserMessageContentFromXML(xml_content):
    root=ET.fromstring(xml_content)
    content=root.find('Content').text
    from_user_name=root.find('FromUserName').text
    to_user_name=root.find('ToUserName').text
    return content,from_user_name,to_user_name

这个函数获取了用户和公众号的id(名称)

3、回复信息(“你好”)

回复信息,和收到信息一样,都是xml形式,所以要先把回复的信息调整成xml形式:


def generate_response_xml(from_user_name,to_user_name,output_content):
    output_xml= '''
    <xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[%s]]></Content>
    </xml>'''
    response = make_response(output_xml % (from_user_name, to_user_name, str(int(time.time())), str(output_content)))
    response.content_type = 'application/xml'
    return response

然后,调整服务器函数:


@app.route('/wechatai', methods=['GET', 'POST'])
def wechatai():
    if request.method == 'GET':
        return verify_wechat(request)
    else:
        print("user request data: ",request.data)
        user_message_content,from_user_name,to_user_name=getUserMessageContentFromXML(request.data)
        print(from_user_name)
        print(to_user_name)
        return generate_response_xml(from_user_name, to_user_name, "你好")

最终效果:(为了避免一直你好,通过if条件判断,只设置了自己的信息才会回复“你好”)

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值