以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  麻烦老师看看哪里有错  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=137254)

--  作者:sky-18
--  发布时间:2019/7/1 20:24:00
--  麻烦老师看看哪里有错
学用企业微信做网页授权。代码如下

Dim e As RequestEventArgs = args(0)
Dim UserId As String
Dim UserName As String
Dim sb As New StringBuilder
sb.AppendLine("<meta name=\'viewport\' c>")
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"))
    MessageBox.Show("获取微信accesstoken:" & Functions.Execute("GetQYAccessToken"))
    Dim hc As new HttpClient(ul)
    Dim jo As JObject = JObject.Parse(hc.GetData)
    If jo("UserId") IsNot Nothing Then
        UserId = jo("UserId")
    End If
Else
    UserId = e.Cookies("userid") \'否则从cookie中提取userid和username
    MessageBox.Show("没有code,userid:" & e.Cookies("userid"))
End If
Dim Verified As Boolean
Dim dr As DataRow = DataTables("微信用户表").Find("userid =\'" & UserId & "\'") \'根据openid找出对应的行
If UserId  > "" AndAlso dr IsNot Nothing AndAlso dr("permit") = True \'授权成功
    MessageBox.Show("授权成功!")
    Verified  = True
    UserName = dr("name")
    e.AppendCookie("userid",UserId) \'将userid和username存储在Cookie中
ElseIf e.GetValues.ContainsKey("code") = False Then \'如果授权失败,且不是通过授权链接跳转而来,那么就跳转到授权链接
    MessageBox.Show("进入授权链接.")
    Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
    Dim ul2 As String = UrlEncode("https://yxdwxoxrk.fredcfengye.com/wxentrance")
    ul = CExp(ul,"ww78ccca7608362047",ul2)
    MessageBox.Show(ul)
    sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接
    e.WriteString(sb.ToString)
    Return Nothing
End If
If Verified = False Then
    sb.AppendLine("你无权访问本系统")
Else
    sb.AppendLine("欢迎" & UserName & " , <a href=\'https://yxdwxoxrk.fredcfengye.com/wxentrance\'>刷新页面</a>")
End If
e.WriteString(sb.ToString)

代码是复制说明里面的,自己修改了一下参数。
但是运行不成功。
于是用messagebox来查错。发现通过授权网页跳转后的getvalues里面仍然没有 “code”.百思不得其解,,希望老师指正。感激不尽
[此贴子已经被作者于2019/7/1 20:25:29编辑过]

--  作者:sky-18
--  发布时间:2019/7/1 20:24:00
--  
这是一个函数,,我把相关代码写到自定义函数里了。


--  作者:sky-18
--  发布时间:2019/7/1 20:27:00
--  
好奇怪,,第5行的代码显示不完整。。应该是:sb.AppendLine("<meta name=\'viewport\' c>")


--  作者:sky-18
--  发布时间:2019/7/1 20:28:00
--  
还是显示不完整
--  作者:有点蓝
--  发布时间:2019/7/1 20:37:00
--  
httprequest代码贴出来看看。

"微信用户表"有这个userid的用户吗,permit为true吗?

--  作者:sky-18
--  发布时间:2019/7/1 20:43:00
--  
Select Case e.path
        Case "wefox"  \'企业微信验证程序
            Functions.Execute("cb",e)
        Case "st.htm"  \'搜图
            Functions.Execute("st",e)
    End Select
    
    If e.Host = "yxdwxoxrk.fredcfengye.com" Then
        Functions.Execute("wxentrance",e)
    End If 

这是httprequest

"微信用户表"确定有这个userid的,permit也是true

但是在企业微信里面 “申请校验域名” 没有通过。是不是跟这个有关?



--  作者:sky-18
--  发布时间:2019/7/1 20:45:00
--  
校验域名  的问题解决了,,规格重新填了,也通过了
--  作者:sky-18
--  发布时间:2019/7/1 21:05:00
--  
又测试了几遍,貌似进入微信的授权后还是没有通过get方式发送code过来。
微信的 域名校验 也是通过了的

--  作者:有点蓝
--  发布时间:2019/7/1 21:06:00
--  
1、可信域名添加了没有?https://work.weixin.qq.com/api/doc#10028/关于网页授权的可信域名

2、GetQYAccessToken函数里的Secret 改为打开页面的应用的Secret 了没有?能否获取AccessToken?

3、能否获取到useid?


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"))
    MessageBox.Show("获取微信accesstoken:" & Functions.Execute("GetQYAccessToken"))
    Dim hc As new HttpClient(ul)
dim str as string = hc.GetData
msgbox(str) \'这里返回什么内容?
    Dim jo As JObject = JObject.Parse(str)
    If jo("UserId") IsNot Nothing Then
        UserId = jo("UserId")
    End If
Else
    UserId = e.Cookies("userid") \'否则从cookie中提取userid和username
    MessageBox.Show("没有code,userid:" & e.Cookies("userid"))
End If

--  作者:sky-18
--  发布时间:2019/7/1 21:27:00
--  
1.可信域名没有问题,微信的可信域名校验已经通过。
2.accesstoken 也没有问题,可以正确的获取。
3.老师在代码里面加的那个根本就运行不到,,应为从微信的授权网页转过来的地址里面的getvalue里面就没有code这个key..所以代码运行不到这里呀。。。