BLOG
Enjoy when you can, and endure when you must.
NOV 25, 2013/后端开发与架构
Django微信公众平台开发:响应

最后一个基础模块就是对来自微信服务器的请求进行处理和响应。

一般来说,当普通微信用户向公众账号发消息时或产生关注/取消关注、点击自定义菜单等动作后,微信服务器会将消息的XML数据包以POST的形式发送到我们的服务器来。其中,XML数据包形式如下(以文本消息为例):

<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,一个OpenID)、消息创建时间(CreateTime)以及消息类型(MsgType),然后对于不同的消息类型,还会有一些特定的参数,例如这里的文本消息就会有一个Content,即用户发送过来的消息内容。

因此我们需要在代码中将其解析出来,并根据不同的参数内容向用户返回所需的消息。接着在 接入 一文中编写的View:

class Weixin(View):
    ...
    def post(self, request):
        if not self.validate(request):
            raise PermissionDenied

        soup = BeautifulSoup(request.body)
        if soup.msgtype:
            # do something here ...
            # and return the specified content for the request user.

        return HttpResponse('')
    ....

要注意的是:

1. 为了安全性,必须对每次请求的来源都做验证,之后才是处理并响应;

2. 返回的数据包也应以XML数据包的形式,具体这里就不说了,可以参考官方文档。

COMMENTS
LEAVE COMMNT