以文本方式查看主题 - 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..所以代码运行不到这里呀。。。
|