6.5.2 接收上报地理位置事件

用户同意使用其地理位置后,微信服务器会根据开发者在图6-8中选择的模式将用户的地理位置推送给公众账号服务器,公众账号服务器收到的是一条事件类型为LOCATION的消息,消息结构如下:

  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>

消息结构中的Latitude、Longitude就是用户所在地理位置的纬度和经度。开发者在后台可以像下面这样获取它们:

  1. // 消息类型
  2. String msgType = requestMap.get("MsgType");
  3. // 事件推送
  4. if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
  5. // 事件类型
  6. String eventType = requestMap.get("Event");
  7. // 上报地理位置
  8. if (eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)) {
  9. // 纬度
  10. String latitude = requestMap.get("Latitude");
  11. // 经度
  12. String longitude = requestMap.get("Longitude");
  13. // 精度
  14. String precision = requestMap.get("Precision");
  15. // TODO 相应的业务逻辑
  16. }
  17. else {
  18. // TODO 判断其他事件类型
  19. }
  20. }
  21. else {
  22. // TODO 判断其他消息类型
  23. }

接收到用户的地理位置后,通常会将其存储在数据库中,方便以后为用户提供LBS服务,这样就不再需要用户主动发送地理位置消息了。