获取用户地理位置

获取用户地理位置的接口说明:

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号

实际上还有第三种地理位置上报方法,就是通过自定义菜单,后面在《菜单接口》讲述,但个人觉得以上两种足矣。


本页地址:http://www.foxtable.com/mobilehelp/topics/0187.htm