【趟坑】微信公众号获得用户发送的位置事件
微信公众号的文档以多错漏著称,这次遇到的是关于获得用户发送位置信息的事件
顺着惯性思维翻看官方关于事件的文档
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454
上报地理位置事件
用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后
每5秒上报一次地理位置
,公众号可以在公众平台网站中修改以上设置。上报地理位置时,微信会将上报地理位置事件推送到开发者填写的URL。
哇,这个不得了。发送之后就等于授权,每5秒都会在手机后台推送的吗?如果没有处理好可能会频繁轰炸用户消息的(误,并不会)
文档还附上了相应事件的xml原文
<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>
按照evnet: LOCATION 测试了之后却什么也捕获不到
原来我都搞错了,根本不是这个event,这个event是怎样触发的也是迷,对应的应该是消息类型的文档
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453
里的 地理位置消息
实验所得,得到的事件xml是类似
<xml>
<ToUserName><![CDATA[gh_9f025824da8c]]></ToUserName>
<FromUserName><![CDATA[oKzs50m0BFVm6X2sXc3lAzbrZUK8]]></FromUserName>
<CreateTime>1555092634</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>22.*****5</Location_X>
<Location_Y>113.*****1</Location_Y>
<Scale>15</Scale>
<Label><![CDATA[广州市***地址马赛克***]]></Label>
<MsgId>22263574791840510</MsgId>
</xml>
其中并没有 event 元素, MsgType为小写 location
。
经验证:取值是 GPS的 WGS84坐标系,不需要转换。
(调用百度地图的API时需要标点时需要转换为百度坐标系 bd09ll, 文档参考 http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition )
不负责地猜测这些类似的坑的原因
- 微信内部缺乏有效的机制去回归和核对不同版本更新后的文档是否正确
- 故意为之,在文档甚至源码中挖下一些并非十分严重的坑,用来提高公众号开发的门槛确保实施方的实力和代码质量
- 因为鹅厂内部血汗工厂996的关系,导致工程师身兼数职没有足够的时间精力兼顾文档的更新(猜测这个事件的文档部分大部分从js-sdk部分复制过来)