Foxtable(狐表)用户栏目专家坐堂 → 判断是否为微信客户端


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

主题:判断是否为微信客户端

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/12/10 21:01:00 [显示全部帖子]

使用授权模式进入这个网页:http://www.foxtable.com/mobilehelp/topics/0235.htm,通过授权码获取openid。如果有授权码,并且能够获取到openid,肯定就是微信客户端

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/12/10 21:52:00 [显示全部帖子]

这是一个矛盾,没有办法。

如果不通过授权,就算是在微信里打开也无法获取openid的。如果通过授权打开,普通浏览器就用不了。

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/12/10 22:38:00 [显示全部帖子]

试试


Select Case e.Path
    Case "test.htm"
        If e.Request.Headers("User-Agent").ToLower.Contains("micromessenger") Then '在微信中打开
            MsgBox("在微信打开")
            If e.GetValues.ContainsKey("code") = False Then '如果没有授权码
                Dim url As String = e.Request.URL.ToString
                Dim sb As New StringBuilder
                sb.AppendLine("<meta name='viewport' content='width=device-width,initial-scale=1,user-scalable=1'>")
                Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8acdb7df5beb68fd&redirect_uri=" & UrlEncode(url) & "&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
                sb.Append("<meta http-equiv='Refresh' content='0; url=" & ul & "'>") '跳转到授权链接
                e.WriteString(sb.ToString) '使用授权链接重新打开网页
                Return
            End If
            '获取openid的代码
        Else
            MsgBox("没有在微信打开")
        End If 
        '其它页面代码
End Select

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/12/11 8:33:00 [显示全部帖子]

    If e.GetValues.ContainsKey("code") Then '如果通过授权链接跳转而来,就根据传递过来的code参数调用接口,获取用户的OpenID
        Dim ul As String = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code"
        ul = CExp(ul, "wx8acdb7df5beb68fd", "a5a3b06a790d4200a151e6b13c3dc263", e.GetValues("code"))
        Dim hc As New HttpClient(ul)
        Dim jo As JObject = JObject.Parse(hc.GetData)
        If jo("openid") IsNot Nothing Then
            OpenID = jo("openid")
            e.AppendCookie("openid", OpenID) '将openid存储在Cookie中
        End If
    Else 否则从cookie取值
        OpenId = e.Cookies("openid") '否则从cookie中提取openid
    End If
    Dim Verified As Boolean
    Dim dr As DataRow = DataTables("WXUsers").Find("openid  ='" & OpenID & "'") '根据openid找出对应的行
    If OpenId > "" AndAlso dr IsNot Nothing AndAlso dr("permit") = True  Then'说明授权成功,不管是从code授权码获取的还是从cookie获取的
        Verified = True
    ElseIf e.GetValues.ContainsKey("code") = False Then '如果授权失败,说明即没有code授权码,也没有cookie值 
        Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8acdb7df5beb68fd&redirect_uri=http%3a%2f%2fwexin.foxtable.com&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
        sb.Append("<meta http-equiv='Refresh' c>") '跳转到授权链接
        e.WriteString(sb.ToString)
        Return
    End If

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/12/11 20:42:00 [显示全部帖子]

使用微信开发者工具测试,看看开发者工具地址栏访问的url和代码里e.Request.URL.Tostring获取的是否一致,这个必须保证是一致的

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/12/11 21:59:00 [显示全部帖子]

不用管这些,浏览器地址栏里显示的url是什么?代码就必须使用这个。请去浏览器地址栏里看

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/12/11 23:29:00 [显示全部帖子]

如果使用了类似nginx的代理,要设置一下返回真实的url,网上搜搜,比如:https://www.baidu.com/s?wd=nginx%20%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83

 回到顶部