上一篇说到怎么接收微信消息,有接收就要有发送,这篇是消息的回复,包括同步回复和异步回复。
1、同步回复:
![](https://img.haomeiwen.com/i8179604/6d9a15dda342c313.png)
@app.route('/msg',methods=['GET','POST'])
def msg():
#先校验是否是合法的微信消息,具体方法上一篇有,这里省略了
if not validateWechat():
err = "error: not security wechat message"
fprint(err)
return err
#获取发消息的openid
openid = request.args.get('openid') or ''
#准备回复的报文
return_message = """
<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>
"""%(openid,APP_WECHATNUMBER,123456,'你好啊')
#返回
return return_message
API详见:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543
2、异步回复
实际上微信并不支持所谓的异步回复,异步就是在同步的时候不返回任何信息(返回一个""或者"success"),然后在需要回复的时候,给用户发送一个客服消息。
API详见:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140547
代码如下:
这里用json.dumps().encode('utf-8').decode("unicode_escape")处理了一个中文的问题,如果不处理,发到微信是unicode编码,不过感觉处理的不太好,后续看看有没有更好的办法。
ACCESS_TOKEN = getAccessToken()
url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=%s'%ACCESS_TOKEN
content = "Hello World1恩,我对你哎哎哎哎哎哎不玩"
postmessage = {
"touser": WARNING_OPENID,
"msgtype": "text",
"text":
{
"content": content
}
}
poststr = json.dumps(postmessage,ensure_ascii=False).encode('utf-8').decode("unicode_escape")
requests.post(url,data=poststr)
网友评论