前言
紧接着《Django开发微信公众平台管理系统——第0章》,本文学习一下微信公众平台各种消息的接收和回复,主要参考WeRoBot文档。
消息类型包括:TextMessage、ImageMessage、LinkMessage、LocationMessage、VoiceMessage、VideoMessage、UnknownMessage;
事件类型包括:SubscribeEvent、UnSubscribeEvent、ScanEvent、ScanCodePushEvent、ScanCodeWaitMsgEvent、PicSysphotoEvent、PicPhotoOrAlbumEvent、PicWeixinEvent、LocationSelectEvent、ClickEvent、ViewEvent、LocationEvent、TemplateSendJobFinishEvent、UserScanProductEvent、UserScanProductEnterSessionEvent、UserScanProductAsyncEvent、UserScanProductVerifyActionEvent、CardPassCheckEvent、CardNotPassCheckEvent、UserGetCardEvent、UserGiftingCardEvent、UserDelCardEvent、UserConsumeCardEvent、UserPayFromPayCellEvent、UserViewCardEvent、UserEnterSessionFromCardEvent、UpdateMemberCardEvent、CardSkuRemindEvent、CardPayOrderEvent、SubmitMembercardUserInfoEvent、UnknownEvent;
回复类型包括:TextReply、ImageReply、VoiceReply、VideoReply、ArticlesReply、MusicReply、TransferCustomerServiceReply、SuccessReply。
原理
微信发给 /main/wechat/ 接口的信息(message),都传给了robot对象,robot对象根据消息类型调用自己的handler,处理后返回结果给微信。
实现
根据消息类型返回信息
修改 wecms/main/views_wechat.py ,内容为:
1 | import werobot |
此时给公众号发送不同类型的消息,返回的内容也是不同的。
返回图片消息
1、登录微信公众平台,查看“公众号开发信息”中的“开发者ID(AppID)”和“开发者密码(AppSecret)”,并记录下来。
2、修改 wecms/main/views_wechat.py ,添加AppID和AppSecret的配置,添加media函数:
1 | import werobot |
需要注意的是,robot.filter(‘image’)需要放在robot.text的前面。因为werobot是链式匹配的,如果robot.text在前,匹配上了“image”,就会被text()函数处理。
2、查看本机的出口IP,修改“公众号开发信息”中的“IP白名单”,把出口IP填进去。
此时给公众号发送“image”,会返回一张图片。
事件处理
以订阅事件和取消事件为例,添加事件处理:
1 | @robot.subscribe |
此时关注公众号,会收到自己的OpenID。
配置文件
前面的开发中,用到了token、APP_ID和APP_SECRET。这些信息应该写在配置文件中,而不是代码中,因此需要调整。
1、编辑 wecms/wecms/settings.py,添加:
1 | # Wechat Config |
2、编辑 wecms/main/views_wechat.py ,修改为:
1 | from django.conf import settings |