以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]获取OPENID  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=143645)

--  作者:2900819580
--  发布时间:2019/11/30 15:19:00
--  [求助]获取OPENID

问题一: 程序经常会用到OPENID,想在第一个网页中获取ID后存在变量里,不作网页授权可以吗?

问题二:以下代码PopMessage 显示为空??什么原因

 

 Dim OpenID As String
        Dim sb As New StringBuilder
        sb.AppendLine("<meta name=\'viewport\' c>")
        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,"AppID","AppSecret",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
            OpenId =  e.Cookies("openid") \'否则从cookie中提取openid
        End If
        PopMessage(openid)


--  作者:有点蓝
--  发布时间:2019/11/30 16:04:00
--  
1、必须通过网页授权才能获取。
2、第一次进来还没有授权的时候,肯定为空了

--  作者:2900819580
--  发布时间:2019/11/30 16:11:00
--  

   Case "hello.htm"
     PopMessage(Functions.Execute("getopenid",e,"hello.htm")) ‘ 这样PopMessage 出来的也是空的、

 

内部函数,

Dim e As RequestEventArgs = Args(0)
Dim url As String = args(1)
Dim wb As New weui
Dim OpenID As String
Dim sb As New StringBuilder
sb.AppendLine("<meta name=\'viewport\' c>")
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,"AppID","AppSecret",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
    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 \'授权成功
    Verified  = True
ElseIf e.GetValues.ContainsKey("code") = False Then \'如果授权失败,且不是通过授权链接跳转而来,那么就跳转到授权链接
   
    Dim ul1 As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect"
    Dim ul2 As String = UrlEncode(www.xxx.com/ & args(1) & url) \'这里是不是要改为自己的网址
    ul1 = CExp(ul1,"AppID",ul2,"123")
       
    sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接
    e.WriteString(sb.ToString)
    Return OpenId
End If

[此贴子已经被作者于2019/11/30 16:15:40编辑过]

--  作者:有点蓝
--  发布时间:2019/11/30 16:30:00
--  
1、同样的道理,第一次进来还没有授权的时候,肯定为空

2、 \'肯定要改为自己的网址


3、Return OpenId放到函数的最后

    



--  作者:2900819580
--  发布时间:2019/11/30 16:53:00
--  
以下是引用有点蓝在2019/11/30 16:30:00的发言:
1、同样的道理,第一次进来还没有授权的时候,肯定为空
     怎么样能能第一次进去就是有OPENID的。

 
2、 \'肯定要改为自己的网址


3、Return OpenId放到函数的最后   PopMessage 还是显示为空

    


Dim ul2 As String = UrlEncode("www.xxx.com/" & url) \'这里是不是要改为自己的网址
    ul1 = CExp(ul1,"AppID",ul2,"123")
       
    sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接
    e.WriteString(sb.ToString)
    End If

Return OpenId

[此贴子已经被作者于2019/11/30 16:53:29编辑过]

--  作者:有点蓝
--  发布时间:2019/11/30 17:31:00
--  
别人访问的时候直接读通过下面这种授权地址访问,才有可能第一次就获取openid。

"https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect"

其实按照上面的用法,在这段代码就可以获取

    If jo("openid") IsNot Nothing Then
        OpenID = jo("openid")
        e.AppendCookie("openid",OpenID) \'将openid存储在Cookie中
    End If

--  作者:2900819580
--  发布时间:2019/11/30 17:33:00
--  
以下是引用有点蓝在2019/11/30 17:31:00的发言:
别人访问的时候直接读通过下面这种授权地址访问,才有可能第一次就获取openid。

"https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect"

其实按照上面的用法,在这段代码就可以获取

    If jo("openid") IsNot Nothing Then
        OpenID = jo("openid")
        e.AppendCookie("openid",OpenID) \'将openid存储在Cookie中
    End If

为什么我的就是不行,代码那里有问题,请老师帮忙改一下。


--  作者:有点蓝
--  发布时间:2019/11/30 17:37:00
--  
Dim ul2 As String = UrlEncode("http://www.xxx.com/" & url)
--  作者:2900819580
--  发布时间:2019/12/1 22:19:00
--  
以下是引用有点蓝在2019/11/30 17:37:00的发言:
Dim ul2 As String = UrlEncode("http://www.xxx.com/" & url)

老师,我已经是这样子修改了,可是还是空值!


--  作者:有点蓝
--  发布时间:2019/12/1 22:21:00
--  
上传实例说明