以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  变量值,前面有值,后面为空  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=127044)

--  作者:zhangjian222200
--  发布时间:2018/11/3 20:23:00
--  变量值,前面有值,后面为空
如题:
        Case "456.htm"  \'网页简单授权
            Dim wangzhi As String \'定义,网址
            For Each key As String In e.GetValues.Keys \'接受获取openid成功后,转向的网页地址
                If key = "yemian" Then  \'网址页面
                    wangzhi = e.GetValues(key)
msgbox("想要进入的网址=" & wangzhi)  ’这里能够正确获得变量wangzhi的值
                End If
            Next
            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,"这里暂时删除","这里暂时删除",e.GetValues("code")) \'这是填写自己的appid|appsecret
                Dim hc As new HttpClient(ul)
                Dim jo As JObject = JObject.Parse(hc.GetData)
                If jo("openid") IsNot Nothing Then
                    OpenID = jo("openid")
                    wb.AppendCookie("openid",OpenID,31680) \'22天
                End If
            Else
                OpenId =  e.Cookies("openid") \'否则从cookie中提取openid
            End If
            If 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("http://www.123.com/456.htm")
                ul1 = CExp(ul1,"这里暂时删除",ul2,"123")
                sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接
                e.WriteString(sb.ToString)
                Return
            End If
            If e.GetValues.ContainsKey("code") = False Then 
                sb.AppendLine("获取openid失败")
            Else
msgbox("网址合成前=" & wangzhi)  ’这里获得变量wangzhi的值为
                wangzhi = wangzhi & ".htm"
msgbox("网址合成后=" & wangzhi)  ’这里获得变量wangzhi的值为
                w b.Insert HTML("<meta http -equiv=\'Re fresh\' con tent=\'0; u rl=/" & wangzhi & "\'>") \'因为wangzhi =“”这里不能跳转网页
                e.WriteString(wb.Build) \'生成网页
                Return
            End If
            e.WriteString(sb.ToString)
            Return

[此贴子已经被作者于2018/11/14 9:38:39编辑过]

--  作者:有点甜
--  发布时间:2018/11/4 21:07:00
--  

1、你可以把参数保存在cookie里面;

 

2、获取失败后,会跳转到这里授权

 

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("http://www.123.com/456.htm")

 

改成对应要跳转的地址(包含参数)

 


--  作者:zhangjian222200
--  发布时间:2018/11/14 9:37:00
--  
回楼上,1楼不是网址授权问题

前面正确获得值wangzhi,中间没有再次赋值,后面wangzhi值为空(见1楼描述)
[此贴子已经被作者于2018/11/14 9:36:44编辑过]

--  作者:有点甜
--  发布时间:2018/11/14 9:42:00
--  

认认真真看

 

1、你可以把参数保存在cookie里面;

 

2、获取失败后,会跳转到这里授权

 

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("http://www.123.com/456.htm")

 

改成对应要跳转的地址(包含参数)


--  作者:zhangjian222200
--  发布时间:2018/11/23 20:07:00
--  
httprequest,2个页面代码:
        Case "details.htm"    设计思路:进入这个页面,如果没有获得openid,需要先授权,然后再进入details.htm                         
            If e.Cookies.ContainsKey("openid") Then
               Functions.Execute("details",e)
               Return
            Else
               wb.InsertHTML("<meta http-equiv=\'Refresh\' c>") \'直接跳转到网页授权页面,获取openid后,将再次进入per_xianx_yj.htm页面
               e.WriteString(wb.Build) \'生成网页
            End If
        Case "wangyeshouquan.htm"  \'网页简单授权页面
            Dim wangzhi As String \'定义,网址
            For Each key As String In e.GetValues.Keys \'接受获取openid成功后,转向的网页地址
                If key = "yemian" Then  \'网址页面
                    wangzhi = e.GetValues(key)
msgbox("想要进入的网址=" & wangzhi)  \'比如之前想要进入details.htm页面,但是进入这里,wangzhi的值是上面传递的:details,不为空
                End If
            Next
            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,"正常值","正常值",e.GetValues("code")) \'这是填写自己的appid|appsecret
                Dim hc As new HttpClient(ul)
                Dim jo As JObject = JObject.Parse(hc.GetData)
                If jo("openid") IsNot Nothing Then
                    OpenID = jo("openid")
                    wb.AppendCookie("openid",OpenID,31680) \'22天
                    \'e.AppendCookie("openid",OpenID) \'将openid存储在Cookie中
                End If
            Else
                OpenId =  e.Cookies("openid") \'否则从cookie中提取openid
            End If
            If 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("http://www.zm2hd.com/wangyeshouquan.htm") ’这里授权失败要加上参数是code和state?但是这里e.GetValues.ContainsKey("code") = False,没有code参数啊
                ul1 = CExp(ul1,"wxaa640e55d6f95bdd",ul2,"123")
                sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接
                e.WriteString(sb.ToString)
                Return
            End If
\'msgbox("OpenId=" & OpenId)
            If e.GetValues.ContainsKey("code") = False Then 
                sb.AppendLine("获取openid失败")
            Else
msgbox("网址合成前=" & wangzhi)  
’这里执行了,说明授权已经成功,前一个粉色msgbox处,提示wangzhi不为空,但是这里提示wangzhi=空,导致下面sb.Append无法合成网址
                wangzhi = wangzhi & ".htm"
                sb.Append("<meta http-equiv=\'Refresh\' c>") \'直接跳转到网页授权页面,获取openid后,将再次进入per_xianx_yj.htm页面
                e.WriteString(sb.ToString)
                Return
            End If
            e.WriteString(sb.ToString)
            Return
因为有的代码被屏蔽,完整代码如下:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:httprequest代码111111000330000.txt

截图:

图片点击可在新窗口打开查看此主题相关图片如下:qq图片201811232032290909090.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/11/23 20:33:21编辑过]

--  作者:有点蓝
--  发布时间:2018/11/23 20:48:00
--  
Dim ul2 As String = UrlEncode("http://www.zm2hd.com/wangyeshouquan.htm") ’这里授权失败要加上参数是code和state?但是这里e.GetValues.ContainsKey("code") = False,没有code参数啊

谁告诉你这里要加上【code和state】的?!!,这2个参数是微信授权成功后自动加上的。麻烦先去看看微信的开发文档

这里改为:Dim ul2 As String = UrlEncode("http://www.zm2hd.com/wangyeshouquan.htm?yemian=details")

请认真看看2楼说明的第2点

--  作者:zhangjian222200
--  发布时间:2018/11/23 21:06:00
--  
msgbox("想要进入的网址=" & wangzhi) 
*****
msgbox("想要进入的网址2=" & wangzhi)  
Dim ul2 As String = UrlEncode("http://www.zm2hd.com/wangyeshouquan.htm?yemian=details") ’这行上面加上msgbox,这2个不断交替弹出,进入死循环了,没有进入details页面


[此贴子已经被作者于2018/11/23 21:08:14编辑过]

--  作者:有点蓝
--  发布时间:2018/11/23 21:13:00
--  
If e.GetValues.ContainsKey("code") = False Then

改为

If OpenId = "" Then

--  作者:zhangjian222200
--  发布时间:2018/11/23 22:11:00
--  
看懂了,解决了,谢谢