6.5.2 接收上报地理位置事件
用户同意使用其地理位置后,微信服务器会根据开发者在图6-8中选择的模式将用户的地理位置推送给公众账号服务器,公众账号服务器收到的是一条事件类型为LOCATION的消息,消息结构如下:
- <xml>
- <ToUserName><![CDATA[toUser]]></ToUserName>
- <FromUserName><![CDATA[fromUser]]></FromUserName>
- <CreateTime>123456789</CreateTime>
- <MsgType><![CDATA[event]]></MsgType>
- <Event><![CDATA[LOCATION]]></Event>
- <Latitude>23.137466</Latitude>
- <Longitude>113.352425</Longitude>
- <Precision>119.385040</Precision>
- </xml>
消息结构中的Latitude、Longitude就是用户所在地理位置的纬度和经度。开发者在后台可以像下面这样获取它们:
- // 消息类型
- String msgType = requestMap.get("MsgType");
- // 事件推送
- if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
- // 事件类型
- String eventType = requestMap.get("Event");
- // 上报地理位置
- if (eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)) {
- // 纬度
- String latitude = requestMap.get("Latitude");
- // 经度
- String longitude = requestMap.get("Longitude");
- // 精度
- String precision = requestMap.get("Precision");
- // TODO 相应的业务逻辑
- }
- else {
- // TODO 判断其他事件类型
- }
- }
- else {
- // TODO 判断其他消息类型
- }
接收到用户的地理位置后,通常会将其存储在数据库中,方便以后为用户提供LBS服务,这样就不再需要用户主动发送地理位置消息了。