Foxtable(狐表)用户栏目专家坐堂 → 微信中获取用户的地理位置


  共有5494人关注过本帖树形打印复制链接

主题:微信中获取用户的地理位置

帅哥哟,离线,有人找我吗?
ap9709130
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1467 积分:11418 威望:0 精华:0 注册:2013/11/24 22:10:00
微信中获取用户的地理位置  发帖心情 Post By:2017/5/6 18:11:00 [显示全部帖子]

我正在设计送货确认的页面,页面中有个确认的按钮,用户确认后跳转到另外一个页面,在这个页面中想要获取当前用户的位置。是企业号的应用。今天怎么不能成功,请帮忙看看是什么原因。代码如下:
Dim e As RequestEventArgs = args(0)
Dim wbiz As New WXBizCrypt("wxa0545235324",Functions.Execute("GetQYAccessToken"),"6ueATjEId-mVYliF0HxdnwdA5BPPsdgsadgdgasdsadasdfad")
If e.Request.HttpMethod = "GET"
    Dim ret As Integer = wbiz.CheckQYSignature(e)
    If ret <> 0 Then '如果接入验证失败
        Dim err As String = wbiz.GetErorDesc(ret) '获取错误描述
    End If
ElseIf e.Request.HttpMethod = "Post"            '
    Dim st As New Date(1970,1,1,8,0,0)
    Dim msg  As String = wbiz.DecryptMsg(e) '解密
    If  IsNumeric(msg) Then '如果解密
        MessageBox.show(msg)
        Dim err As String = wbiz.GetErorDesc(CInt(msg)) '获取错误描述
        MessageBox.show(err)
        Return ""
    End If 
End If

用这个代码,会解密出错。msg 的值 为:-4004, 错误为:AESKEY非法。 我都是按帮助的说明做的,不知道哪里出错了!

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1467 积分:11418 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/5/9 17:50:00 [显示全部帖子]

老师

帮忙关于这个看的真的不是很懂,请教如下:
我已经用你的方法合成了按键的url,并且在服务器端能解析出 Useerid ,但还是不知道怎么才能知道他的位置,后面的代码要怎么写?

If e.GetValues.ContainsKey("code") Then '如果通过授权链接跳转而来,就根据传递过来的code参数调用接口,获取用户的UserId
    Dim ul As String  = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}"
    ul = CExp(ul,Functions.Execute("GetQYAccessToken"),e.GetValues("code"))
    Dim hc As new HttpClient(ul)
    Dim jo As JObject = JObject.Parse(hc.GetData)
    If jo("UserId") IsNot Nothing Then
        name = jo("UserId")
    End If
end if

jo("UserId") 是对的,但是怎么才能知道他的位置呢?后面的代码要怎么写?


 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1467 积分:11418 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/5/9 21:10:00 [显示全部帖子]

老师

关于推送方面真的看的不是很懂。比如我现在做的是企业号,在菜单中有个按纽  名称为:送货确定  ,当有人按这个送货确定时,我现在已经可以知道他的USERID ,但同时我还想知道他的位置,这种可以实现吗?要怎么写代码?

能不能帮我写个头,帮忙我已经看了很多次了,只是没有想明白。多谢!

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1467 积分:11418 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/5/10 22:40:00 [显示全部帖子]

终于搞懂了。也成功了。多谢!老师

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1467 积分:11418 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/5/11 9:36:00 [显示全部帖子]

我就是把例子改了下,很简单的,代码如下:
Dim wb As New weui
        wb.AppendHTML("<script src='http://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>",True) '引入JS-SDK库
        wb.AppendHTML("<script src='./hito/jssdk.js'></script>") '引入脚本文件
        '在页面注入权限验证配置
        Dim st As New Date(1970,1,1,8,0,0)
        Dim appid As String = "wxa05c11a75642d325" 'CorpID
        Dim timestamp As Integer = CInt((Date.Now - st).TotalSeconds()) '时间戳
        Dim noncestr As String = Rand.NextString(16) '随机字符
        Dim url As String  = e.Request.URL.ToString '当前页面地址
        Dim signature As String = Functions.Execute("GetJsSignature", noncestr, timestamp, url) '生成权限验证签名
        Dim cfg As String = "wx.config({appId:'{0}',timestamp:{1},nonceStr:'{2}',signature:'{3}',jsApiList:['getLocation']});"
        wb.AppendHTML("<script>" & CExp(cfg,appid,timestamp,noncestr,signature) & "</script>",True)
        '开始正常生成网页内容
        wb.AddForm("","form1","test.htm")
        With wb.AddInputGroup("form1","ipg1","产品输入")
            .AddInput("product","产品","text")
            With .AddInputCell("ic1")
                .AddLabel("lbh","编号",0)
                .AddInput("number","text",1)
                .AddVcodeButton("scan","扫码输入",2) '增加二维码扫描按钮,2表示显示在右边
            End With
        End With
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "确定", "submit")
        End With
        e.WriteString(wb.Build) '生成网页

JS 代码如下 :

wx.ready(function () {
    document.getElementById('scan').onclick = function () {
        wx.getLocation({
            type: 'wgs84',
            success: function (res) {
                document.getElementById('number').value = res.latitude;
document.getElementById('product').value = res.longitude;
            }
        });
    };
});
wx.error(function (res) {
    //alert(res.errMsg);
});

这样就可以获得地理位置了。我还把这个地理位置在百度地图里看了,定位还是挺准的。

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1467 积分:11418 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/5/19 10:45:00 [显示全部帖子]

老师

今天想把这个板块整合到网页中去,发现一个问题。如果网页中的e.GetValues中有中文,是不能认证成功的,这个情况要怎么处理?

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1467 积分:11418 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/5/19 11:25:00 [显示全部帖子]

老师

Dim wb As New weui
        wb.AppendHTML("<script src='http://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>",True) '引入JS-SDK库
        wb.AppendHTML("<script src='./hito/jssdk.js'></script>") '引入脚本文件
        '在页面注入权限验证配置
        Dim st As New Date(1970,1,1,8,0,0)
        Dim appid As String = "wxa05c11a75642d325" 'CorpID
        Dim timestamp As Integer = CInt((Date.Now - st).TotalSeconds()) '时间戳
        Dim noncestr As String = Rand.NextString(16) '随机字符
        Dim url As String  = e.Request.URL.ToString '当前页面地址
        Dim signature As String = Functions.Execute("GetJsSignature", noncestr, timestamp, url) '生成权限验证签名
        Dim cfg As String = "wx.config({appId:'{0}',timestamp:{1},nonceStr:'{2}',signature:'{3}',jsApiList:['getLocation']});"
        wb.AppendHTML("<script>" & CExp(cfg,appid,timestamp,noncestr,signature) & "</script>",True)
        '开始正常生成网页内容
        wb.AddForm("","form1","test.htm")
        With wb.AddInputGroup("form1","ipg1","产品输入")
            .AddInput("product","产品","text")
            With .AddInputCell("ic1")
                .AddLabel("lbh","编号",0)
                .AddInput("number","text",1)
                .AddVcodeButton("scan","扫码输入",2) '增加二维码扫描按钮,2表示显示在右边
            End With
        End With
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "确定", "submit")
        End With
        e.WriteString(wb.Build) '生成网页

这个代码没有问题,可以证成功,但是如果 test.htm?id = 我 ,就会认证失败。你的15楼的代码在哪里加?如果 Dim url As String  = e.Request.URL.ToString '当前页面地址 改成:
Dim url As String  = UrlEncode(e.Request.URL.ToString) '当前页面地址

也会失败的。


 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1467 积分:11418 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2017/5/19 11:31:00 [显示全部帖子]

我已经把 e.Request.URL.ToString  show 出来,可以显示中文。如果用 UrlEncode(e.Request.URL.ToString)里面会没有中文了,但是都不可以认证成功!

 回到顶部