获取用户地理位置
获取用户地理位置的接口说明:
https://developers.weixin.qq.com/doc/offiaccount/User_Management/Gets_a_users_location.html
用户同意上报地理位置后,每次进入公众号会话时,都会自动上报地理位置,也可以选择在会话持续期间,每5分钟
自动上报一次地理位置。
上报地理位置以推送XML数据包的形式发送到Foxtable端的HTTP服务。
一个例子
如果希望希望将用户的地理位置保存为一个日志文件中,可以参考下面的HttpRequest事件代码:
Select
Case e.path
Case "wefox"
If e.Request.HttpMethod.ToUpper
= "GET"
If
Functions.Execute("VerifySignature",e)
Then
e.WriteString(e.GetValues("echostr"))
End If
ElseIf
e.Request.HttpMethod.ToUpper
= "Post"
Dim
logFile As
String = "c:\data\location"
& Format(Date.Today,"yyyyMMdd")
& ".txt"
'你可以选择每日或每月一个日志文件
Dim xo
As Foxtable.XObject =
Foxtable.XObject.Parse(e.PlainText)
Dim st
As New
Date(1970,1,1,8,0,0)
Select Case
xo("MsgType")
Case "text","image","voice","video","shortvideo"
'保存和回复普通消息的代码
Case
"event"
'如果是事件
Select
Case xo("Event")
Case
"subscribe"
'处理用户关注事件的代码
Case "unsubscribe"
'处理用户取消关注事件的代码'
Case "LOCATION"
'自动上报地理位置事件
Dim
OpenID As
String = xo("FromUserName")
'用户OpenID
Dim
CreateTime As
Date = st.AddSeconds(xo("CreateTime"))
Dim
y As
String = xo("Longitude")
'经度
Dim
x As
String = xo("Latitude")
'纬度
Filesys.WriteAllText(logFile
, OpenID &
"在"
& CreateTime
&
"的位置为:"
& x
& "|"
& y
& vbcrlf ,
True)
End
Select
End
Select
End
If
End
Select
除了自动上报位置,用户还可以通过菜单主动上报位置,主动方式提交给服务器的信息更多,具体可以参考《菜单接口》这一章。
手动上报地理位置
除了自动上报地理位置,微信的系统菜单也自带有上报地理位置的功能:
手动上报的地理位置是以普通消息的形式发送到Foxtable端的HTTP服务,消息类型为location。
下面的HttpRequest事件代码能同时记录自动上报和手动上报的地理位置:
Select
Case e.path
Case "wefox"
If e.Request.HttpMethod.ToUpper
= "GET"
If
Functions.Execute("VerifySignature",e)
Then
e.WriteString(e.GetValues("echostr"))
End If
ElseIf
e.Request.HttpMethod.ToUpper
= "Post"
Dim
logFile As
String = "c:\data\location"
& Format(Date.Today,"yyyyMMdd")
& ".txt"
'你可以选择每日或每月一个日志文件
Dim xo
As Foxtable.XObject =
Foxtable.XObject.Parse(e.PlainText)
Dim st
As New
Date(1970,1,1,8,0,0)
Dim
OpenID As
String = xo("FromUserName")
'用户OpenID
Dim
CreateTime As
Date = st.AddSeconds(xo("CreateTime"))
Select Case
xo("MsgType")
Case "text","image","voice","video","shortvideo"
'保存和回复普通消息
Case
"location" '主动上报地理位置消息
Dim x
As String =
xo("Location_X")
'经度
Dim y
As String =
xo("Location_Y")
'纬度
Dim
lb As
String = xo("Label")
'地理位置
Filesys.WriteAllText(logFile
, OpenID &
"在"
& CreateTime
&
"的位置为:"
& x
& "|"
& y
& lb
& vbcrlf ,
True)
Case
"event" '如果是事件
Select
Case xo("Event")
Case
"subscribe"
'处理用户关注事件的代码
Case "unsubscribe"
'处理用户取消关注事件的代码'
Case "LOCATION"
'自动上报地理位置事件
Dim
y As
String = xo("Longitude")
'经度
Dim
x As
String = xo("Latitude")
'纬度
Filesys.WriteAllText(logFile
, OpenID &
"在" &
CreateTime &
"的位置为:" &
x &
"|" &
y &
vbcrlf , True)
End
Select
End
Select
End
If
End
Select
下面第一行是自动上报的地理位置,第二行是主动上报的地理位置,自动上报地理位置只有经纬度,而主动上报除了经纬度,还有字符型的地理位置:
ofjtFwGvPBfy9aGz9OJ-qWiG5oA0在2017-02-24 10:14:41的位置为:21.257692|110.377396
ofjtFwGvPBfy9aGz9OJ-qWiG5oA0在2017-02-24
10:14:57的位置为:21.257692|110.377396|广东省湛江市赤坎区人民大道北39号
实际上还有第三种地理位置上报方法,就是通过自定义菜单,后面在《菜单接口》讲述,但个人觉得以上两种足矣。