Foxtable(狐表)用户栏目专家坐堂 → 变量值,前面有值,后面为空


  共有2024人关注过本帖树形打印复制链接

主题:变量值,前面有值,后面为空

帅哥哟,离线,有人找我吗?
zhangjian222200
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1533 积分:10818 威望:0 精华:0 注册:2016/9/12 11:18:00
变量值,前面有值,后面为空  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1533 积分:10818 威望:0 精华:0 注册:2016/9/12 11:18:00
  发帖心情 Post By:2018/11/14 9:37:00 [只看该作者]

回楼上,1楼不是网址授权问题

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1533 积分:10818 威望:0 精华:0 注册:2016/9/12 11:18:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1533 积分:10818 威望:0 精华:0 注册:2016/9/12 11:18:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/11/23 21:13:00 [只看该作者]

If e.GetValues.ContainsKey("code") = False Then

改为

If OpenId = "" Then

 回到顶部
帅哥哟,离线,有人找我吗?
zhangjian222200
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1533 积分:10818 威望:0 精华:0 注册:2016/9/12 11:18:00
  发帖心情 Post By:2018/11/23 22:11:00 [只看该作者]

看懂了,解决了,谢谢

 回到顶部