链接消息
原创当用户向公众号发送链接消息时,微信公众号接收到的 POST 消息的 XML 数据格式如下:
1. <xml> 2. <ToUserName><![CDATA[toUser]]></ToUserName> 3. <FromUserName><![CDATA[fromUser]]></FromUserName> 4. <CreateTime>1351776360</CreateTime> 5. <MsgType><![CDATA[link]]></MsgType> 6. <Title><![CDATA[公众平台官网链接]]></Title> 7. <Description><![CDATA[公众平台官网链接]]><Description> 8. <Url><![CDATA[url]]></Url> 9. <MsgId>1234567890123456</MsgId> 10. </xml >
表 4-8 对所用参数进行了说明,具体如下。
表 4-8 用户向公众号发送链接消息参数说明

链接消息需要继承 RequestBaseMessage,接收链接消息的代码如下:
1. ///<summary> 2. ///接收链接消息 3. ///<summary> 4. public class RequestLinkMessage: RequestBaseMessage 5. { 6. public class override RequestMsgType MsgType 7. { 8. get { return RequestMsgType.link;} 9. } 10. ///<summary> 11. ///消息标题 12. ///</summary> 13. public string Title{ get; set; } 14. ///<summary> 15. ///消息描述 16. ///</summary> 17. public string Description{ get; set; } 18. ///<summary> 19. ///消息链接 20. ///</summary> 21. public string Url{ get; set; } 22. }
在微信用户与公众号进行交互的过程中,微信服务器将用户的某些操作通过事件推送的形式发送到开发者的服务器,开发者可以从中获取到该信息。其中,某些事件在推送发生后,是允许开发者回复用户的,某些则不允许。允许的事件有关注/取消关注事件、扫描带参数二维码事件、上报地理位置事件、自定义菜单事件、单击菜单拉取消息的事件推送、单击菜单跳转链接时的事件推送。
封装事件与普通消息类似,当用户对公众号进行某种操作时,微信服务器会以 XML 格式通过 POST 方式将相应事件消息发送到人们填写的服务器地址中,开发者文档上定义了所有事件的消息结构,不难发现,每种类型的消息都包含参数 ToUserName、FromUserName、CreateTime、MsgType 与 Event。
事件基类的代码如下:
1. public class BaseEvent 2. { 3. ///<summary> 4. ///开发者微信号 5. ///</summary> 6. public string ToUserName{ get; set; } 7. ///<summary> 8. ///发送方账号(OpenID) 9. ///</summary> 10. public string FromUserName{ get; set; } 11. ///<summary> 12. ///消息创建时间 13. ///</summary> 14. public string CreateTime{ get; set; } 15. ///<summary> 16. ///消息类型 17. ///</summary> 18. public string MsgType{ get; set; } 19. ///<summary> 20. ///事件类型 21. ///</summary> 22. public string Event{ get; set; } 23. }
接下来建立一个继承于 BaseEvent 的接收事件推送的基类 RequestBaseEvent。
1. public class RequestBaseEvent 2. { 3. ///<summary> 4. ///接收事件消息基类 5. ///</summary> 6. public class RequestBaseEvent:BaseEvent 7. { 8. get {return RequestMsgType.Event; 9. } 10. ///<summary> 11. ///事件类型 12. ///</summary> 13. public virtual Event Event 14. { 15. get { return Event.CLICK;} 16. } 17. ///<summary> 18. ///事件 key 值 19. ///</summary> 20. public virtual Event Event {get;set;} 21. } 22.
用户在关注或者取消关注微信公众号时,微信会把该事件推送到开发者填写的服务器地址中,方便开发者给用户发欢迎消息或账号的解绑。
推送 XML 数据包示例:
1. <xml> 2. <ToUserName><![CDATA[toUser]]></ToUserName> 3. <FromUserName><![CDATA[fromUser]]></FromUserName> 4. <CreateTime>123456789</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[subscribe]]></Event> 7. <MsgId>1234567890123456</MsgId> 8. </xml >
表 4-9 对所用参数进行了说明,具体如下。
表 4-9 关注事件推送数据包参数说明
参数名称 | 描述 |
MsgType | 消息类型,event |
Event | 事件类型,subscribe(订阅)、unsubscribe(取消订阅) |
关注/取消关注事件的消息类型都是 event,参数为 subscribe 时表示关注事件,参数为 unsubscribe 时表示取消关注事件。接收该事件继承事件基类 BaseEvent,与关注/取消关注事件示例 XML 数据包相对应的代码如下:
1. ///<summary> 2. ///接收关注/取消关注事件 3. ///</summary> 4. public class SubscribeEvent : RequestBaseEvent 5. { 6. public override Event Event 7. { 8. get { return Event.subscribe;} 9. } 10. }
用户扫描带场景值二维码时,可能推送两种事件:如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值的关注事件推送给开发者;如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
用户未关注时,进行关注后的事件推送,推送 XML 数据包示例如下:
1. <xml> 2. <ToUserName><![CDATA[toUser]]></ToUserName> 3. <FromUserName><![CDATA[fromUser]]></FromUserName> 4. <CreateTime>123456789</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[subscribe]]></Event> 7. <EventKey><![CDATA[qrscene_123123]]></EventKey> 8. <Ticket><![ CDATA[TICKET]]></Ticket> 9. </xml >
表 4-10 对所用参数进行了说明,具体如下。
表 4-10 未关注用户扫描二维码事件推送数据包参数说明

用户已关注时的事件推送,推送 XML 数据包示例如下:
1. <xml> 2. <ToUserName><![CDATA[toUser]]></ToUserName> 3. <FromUserName><![CDATA[fromUser]]></FromUserName> 4. <CreateTime>123456789</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[SCAN]]></Event> 7. <EventKey><![CDATA[SCENE_VALUE]]></EventKey> 8. <Ticket><![CDATA[TICKET]]></Ticket> 9. </xml >
表 4-11 对所用参数进行了说明,具体如下。
表 4-11 关注用户扫描二维码事件推送数据包参数说明

扫描带参数二维码事件的代码如下:
1. ///<summary> 2. ///接收扫描带参数二维码事件 3. ///</summary> 4. public class QRCodeEvent : RequestBaseEvent 5. { 6. public override Event Event 7. { 8. get { return Event.scan;} 9. } 10. ///<summary> 11. ///二维码的 ticket 12. ///</summary> 13. public string Ticket { get; set; } 14. }
用户同意上报地理位置后,每次进入公众号,都会在进入时上报地理位置,或在进入会话后每 5 s 上报一次地理位置,以在公众平台网站中修改位置。上报地理位置时,微信会将上报地理位置事件推送到开发者填写的 URL。
推送 XML 数据包示例如下:
1. <xml> 2. <ToUserName><![CDATA[toUser]]></ToUserName> 3. <FromUserName><![CDATA[fromUser]]></FromUserName> 4. <CreateTime>123456789</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[LOCATION]]></Event> 7. <Latitude>23.137466</Latitude> 8. <Longitude>113.352425</Longitude> 9. <Precision>119.385040</Precision> 10. </xml >
表 4-12 对所用参数进行了说明,具体如下。
表 4-12 上报地理位置事件推送数据包参数说明

上报地理位置事件的消息结构对应的类如下:
1. ///<summary> 2. ///上报地理位置事件 3. ///</summary> 4. public class LocationEvent: RequestBaseEvent 5. { 6. public override Event Event 7. { 8. get { return Event.LOCATION;} 9. } 10. ///<summary> 11. ///纬度 12. ///</summary> 13. public string Latitude{ get; set; } 14. ///<summary> 15. ///经度 16. ///</summary> 17. public string Longitude{ get; set; } 18. ///<summary> 19. ///精度 20. ///</summary> 21. public string Precision{ get; set; } 22. }
版权保护: 本文由 李斯特 原创,转载请保留链接: https://www.wechatadd.com/artdet/9548
阅读推荐
更多...- [微信创业]怎样才能成为受欢迎的人? 2023-07-11
- 你了解销售中的情商运用吗 2023-03-02
- 心态篇——销售应具有的心态 2023-03-04
- 以客为尊,摒弃自负(Customerbased,notfaithbased) 2023-07-16
- 移动互联网时代如何打造爆品? 2022-07-25
- 「销售团队管理」勤评估:检查技能水平并增强 2023-03-04
- 数据思维:和客户实现零距离对接,收集分析,数据能给我们最好的答案 2023-05-30
- 【成功案例1】骑行西藏 2023-07-09
- 客户都有相信权威、专家或行家的心理,客户业绩增长了100% 2023-04-01
- 资源匮乏,盲目跟风做平台 2023-07-16
- 商业模式设计的方法 2024-02-12
- 不断致力于学习——销售技巧 2023-03-04
- 「销售技巧」打好心理战,让客户迅速成交 2023-02-28
- 潜能激发:为什么 85% 的员工不能发挥个人潜能? 2023-05-22
- 了解微店的基本功能 2023-07-14
- 微信订阅号及服务号运营策略与方法,服务号的6大价值 2023-07-03
- 绕开女性的创业陷阱——女性创业「常见病」 2023-07-16
- 迭代出来的微信 2023-07-14