以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- usesid (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=134072) |
-- 作者:qinjh18935180888 -- 发布时间:2019/4/26 15:49:00 -- usesid 说明书上取userid的例子,从逻辑上来说,有可能出现当第一次点击菜单时,通过code与e.Cookies("userid")取不到userid .这样进入授权链接。只有当再次点击菜单时,才能取出userid.这样会用户一个错觉,认为网打不开,或没有数据,因为没有userid时,就得不到这个人的相关权限。有没有更好的方法,点击一次就能取到userid呢? If e.host = "wexin.foxtable.com" Then \'需要授权才能访问的域名 Dim UserId As StringDim 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")) 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 End If Dim Verified As Boolean Dim dr As DataRow = DataTables("Users").Find("userid =\'" & UserId & "\'") \'根据openid找出对应的行 If UserId > "" AndAlso dr IsNot Nothing AndAlso dr("permit") = True \'授权成功 Verified = True UserName = dr("name") e.AppendCookie("userid",UserId) \'将userid和username存储在Cookie中 ElseIf e.GetValues.ContainsKey("code") = False Then \'如果授权失败,且不是通过授权链接跳转而来,那么就跳转到授权链接 Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxa31aba4cd83af57e&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 If Verified = False Then sb.AppendLine("你无权访问本系统") Else sb.AppendLine("欢迎" & UserName & " , <a href=\'http://wexin.foxtable.com\'>刷新页面</a>") End If e.WriteString(sb.ToString) End If |
-- 作者:有点蓝 -- 发布时间:2019/4/26 16:08:00 -- 帮助的逻辑是没有问题的。第一次点击如果网页不是提过授权进来的,会重新提过授权加入网页,授权后就可以直接跳转了。 如果是通过公众号的菜单打开的,菜单里设置的url就应该是包含授权的url(上面ul变量的内容),这样既不需要再跳转一次网页。 不管我觉得您的问题应该不是这个,贴出您的代码说明问题。
|
-- 作者:qinjh18935180888 -- 发布时间:2019/4/26 16:24:00 -- 老师:我的跳转链接好象不起作用,也就是跳转不到 e.post = "sxwytx.iego.cn"这个位置。不知什么原因? if e.post = "sxwytx.iego.cn" then If e.GetValues.ContainsKey("code") Then Dim ul As String = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}" ul = CExp(ul,Functions.Execute("GetQYAccessToken1"),e.GetValues("code")) 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 If userid = "" andalso e.GetValues.ContainsKey("code") = false then Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww51c9a9c0c93a7d18&redirect_uri=http%3a%2f%2fsxwytx.iego.cn&response_type=code&scope=snsapi_base&state=123#wechat_redirect" sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接 e.WriteString(sb.ToString) Return End If End If If userid > "" Then e.AppendCookie("userid",UserId) \'将userid和username存储在Cookie中 Dim dr1 As DataRow = DataTables("人员信息表").SQLFind("人员ID = \'" & userid & "\'") If dr1 IsNot Nothing Then Userrols = dr1("角色") usergroup = dr1("地市") End If End If Select Case e.Path Case "gxyh.htm" Functions.Execute("gxyh",e) Case "ccss.htm" sb.AppendLine("<meta name=\'viewport\' c>") sb.AppendLine("您的帐号是:" & userid & "<br/><br/>") sb.AppendLine("您的角色是:" & Userrols & "<br/><br/>") sb.AppendLine("您的地市是:" & usergroup & "<br/><br/>") e.WriteString(sb.ToString) End Select end if [此贴子已经被作者于2019/6/8 21:58:19编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/4/26 16:49:00 -- 这个是跳转的问题,cookie设置后要跳转或者刷新页面才能生效。上面代码第一次验证后没有经过任何跳转就直接进入页面了,此时cookie还没有生效。可以这样 Select Case e.Path
Case "gxyh.htm" Functions.Execute("gxyh",e,UserId) ‘把UserId也传入函数,在函数里直接使用传入的UserId使用 |
-- 作者:qinjh18935180888 -- 发布时间:2019/6/8 22:01:00 -- 老师:我的跳转链接好象不起作用,也就是跳转不到 e.post = "sxwytx.iego.cn"这个位置。不知什么原因? 实际情况是:只要cookies中没有userid,只第一次获取不出openid,微信第二次打开时,才能获取出openid.经测试 if e.post = "sxwytx.iego.cn" then If e.GetValues.ContainsKey("code") Then Dim ul As String = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}" ul = CExp(ul,Functions.Execute("GetQYAccessToken1"),e.GetValues("code")) 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 If userid = "" andalso e.GetValues.ContainsKey("code") = false then Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww51c9a9c0c93a7d18&redirect_uri=http%3a%2f%2fsxwytx.iego.cn&response_type=code&scope=snsapi_base&state=123#wechat_redirect" sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接 e.WriteString(sb.ToString) Return End If End If If userid > "" Then e.AppendCookie("userid",UserId) \'将userid和username存储在Cookie中 Dim dr1 As DataRow = DataTables("人员信息表").SQLFind("人员ID = \'" & userid & "\'") If dr1 IsNot Nothing Then Userrols = dr1("角色") usergroup = dr1("地市") End If End If Select Case e.Path Case "ccss.htm" sb.AppendLine("<meta name=\'viewport\' c>") sb.AppendLine("您的帐号是:" & userid & "<br/><br/>") sb.AppendLine("您的角色是:" & Userrols & "<br/><br/>") sb.AppendLine("您的地市是:" & usergroup & "<br/><br/>") e.WriteString(sb.ToString) End Select end if [此贴子已经被作者于2019/6/8 22:07:19编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/6/9 10:22:00 --
在你的httprequest事件,加入代码 msgbox(e.path) 弹出每一次的访问路径看看
|
-- 作者:qinjh18935180888 -- 发布时间:2019/6/9 11:38:00 -- 甜老师:每次路径都是"ccss.htm",应该没有问题。经测试只要cookies存有userid ,则每次都 能正常获取出userid,如cookies 没存有userid 则第一次肯定获取不出userid,反复测试,应该是跳转问题,也就是跳转不到If e.host = "sxwytx.iego.cn" Then 这个位置,但跳转代码肯定执行了,因为再次进入的时候,能从coad 中获取出openid.只是跳转不到起始位置。苹果系统每次屏保后,因为系统的原因,每次都会清空cookies 所以出现这种情况的概率高。 |
-- 作者:有点甜 -- 发布时间:2019/6/9 11:43:00 -- 在httprequest事件,弹出 e.path 的值看一下啊。
把cookie弄成空的时候,测试,看是否跳转过来了啊,如果跳转了,就没问题啊。 |
-- 作者:有点甜 -- 发布时间:2019/6/9 11:44:00 --
你访问微信获取userid的时候,跳转回去,你是跳转到了主页面啊,也就是,这个时候e.path应该是空值啊。
|
-- 作者:qinjh18935180888 -- 发布时间:2019/6/9 13:04:00 -- 甜老师:这是我刚放msgbox(e.path)的位置。同时我也显示了一下:在code后面放了msgbox("1:" & UserId) ;在UserId = e.Cookies("userid")后面放了msgbox("2:" & UserId) 。我把cookies清空后,第一次进入微信后,msgbox("1:" & UserId)没有显示,msgbox("2:" & UserId) 显示为空。再次进入入微信,msgbox("1:" & UserId)还是没有显示,msgbox("2:" & UserId) 显示正常的openid。我的理解是第二次进入微信应该是从code中获取出openid,但确是是从cookies中获取出openid的。也就是说清空cookies后,第一次进入微信,正常跳转是没有问题,openid也正常取出来了,但为什么显示不出来呢? msgbox(e.path) \'刚才显示的位置 if e.post = "sxwytx.iego.cn" then If e.GetValues.ContainsKey("code") Then Dim ul As String = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}" ul = CExp(ul,Functions.Execute("GetQYAccessToken1"),e.GetValues("code")) Dim hc As new HttpClient(ul) Dim jo As JObject = JObject.Parse(hc.GetData) If jo("UserId") IsNot Nothing Then UserId = jo("UserId") msgbox("1:" & UserId) End If Else UserId = e.Cookies("userid") \'否则从cookie中提取userid和username msgbox("2:" & UserId) If userid = "" andalso e.GetValues.ContainsKey("code") = false then Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww51c9a9c0c93a7d18&redirect_uri=http%3a%2f%2fsxwytx.iego.cn&response_type=code&scope=snsapi_base&state=123#wechat_redirect" sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接 e.WriteString(sb.ToString) Return End If End If If userid > "" Then e.AppendCookie("userid",UserId) \'将userid和username存储在Cookie中 Dim dr1 As DataRow = DataTables("人员信息表").SQLFind("人员ID = \'" & userid & "\'") If dr1 IsNot Nothing Then Userrols = dr1("角色") usergroup = dr1("地市") End If End If Select Case e.Path Case "ccss.htm" sb.AppendLine("<meta name=\'viewport\' c>") sb.AppendLine("您的帐号是:" & userid & "<br/><br/>") sb.AppendLine("您的角色是:" & Userrols & "<br/><br/>") sb.AppendLine("您的地市是:" & usergroup & "<br/><br/>") e.WriteString(sb.ToString) End Select end if |