以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 手机端报错 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=195700) |
-- 作者:xuzihang -- 发布时间:2025/3/2 20:55:00 -- 手机端报错 是通过微信授权的 通过二维码扫码进入报错,但是再扫码就进来了 以下是日志报错的内容 事件/函数: 项目,HttpRequest
未将对象引用设置到对象的实例。
在 Foxtable.RequestEventArgs.AppendCookie(String name, String value)
在 UserCode.HttpRequest(RequestEventArgs e)
|
-- 作者:有点蓝 -- 发布时间:2025/3/2 21:02:00 -- 提示AppendCookie出错,相关代码发上来看看 |
-- 作者:xuzihang -- 发布时间:2025/3/2 21:31:00 -- If e.host = "wx.com" Then \'授权测试 Dim UserName As String Dim OpenID As String Dim KHID As String Dim desc As String Dim link As String \'link // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 Dim imgUrl As String Functions.Execute("LogText", "URL=" & e.Request.URL.ToString) \'日志记录 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, "wx***", "f****", e.GetValues("code")) Dim hc As New HttpClient(ul) Dim jo As JObject = JObject.Parse(hc.GetData) If jo("openid") IsNot Nothing Then \'如果获取openid成功(成功的话,还会同时返回一个accesstiken,用于获取用户详情) OpenID = jo("openid") \' msgbox("获取openid", 64, "提示") Dim dr As DataRow = DataTables("客户").SQLFind("openid =\'" & Openid & "\'") If dr IsNot Nothing Then UserName = dr("nickname") \' msgbox("昵称", 64, "提示") Else ul = "https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN " \'根据openid和accesstoken获取用户详情,注意这里这个accesstoken不是普通accesston,只能用于网页授权 hc = New HttpClient(CExp(ul, jo("access_token"), OpenId)) jo = jo.Parse(hc.GetData) If jo("openid") IsNot Nothing Then UserName = jo("nickname") dr = DataTables("客户").AddNew() Dim nms() As String = {"openid", "nickname", "headimgurl", "性别"} \'"", "客户住址_县市", "country", "客户住址_省市"} \'"" For Each nm As String In nms dr(nm) = jo(nm) \' msgbox("提取数据", 64, "提示") Next \' msgbox("判断tjr有=" & e.GetValues.ContainsKey("state")) \'-------------------- Functions.Execute("LogText", "URL=" & e.Request.URL.ToString) \'日志记录 If e.GetValues.ContainsKey("tjr") Then \'e.GetValues.ContainsKey("tjr")获取二维码推荐人的TJkhid \' msgbox("写入推荐人: " & e.GetValues("state"), 64, "提示") Functions.Execute("LogText", "URL=" & e.Request.URL.ToString) \'日志记录 dr("客户来源_KHID") = e.GetValues("tjr") \'e.GetValues.ContainsKey("TJkhid")获取二维码推荐人的TJkhid ,保存tjkhid \' msgbox("保存", 64, "提示") Functions.Execute("LogText", "URL=" & e.Request.URL.ToString) \'日志记录 End If dr.Save Else e.WriteString(jo.ToString) \'在用户浏览器显示错误信息 \' msgbox("不能增行token里openid空", 64, "提示空") Return End If End If e.AppendCookie("username", UserName) \'用户名和openid存储在Cookie中 e.AppendCookie("openid", OpenID) e.AppendCookie("KHID", KHID) \' MsgBox("OpenID=" & OpenID & ",UserName=" & UserName) \'----------------------------------------- Functions.Execute("LogText", "URL=" & e.Request.URL.ToString) \'日志记录 Else e.WriteString(jo.ToString) \'在用户浏览器显示错误信息 \' msgbox("openid空的", 64, "提示") Return End If Else UserName = e.Cookies("username") \'从cookie获取用户名和openid OpenID = e.Cookies("openid") KHID = e.Cookies("KHID") Dim dr As DataRow = DataTables("客户").SQLFind("openid =\'" & Openid & "\'") \'根据openid找出对应的行 \' MsgBox("tjr= " & (e.GetValues.ContainsKey("tjr"))) \' MsgBox("dr = " & (dr Is Nothing)) \'------------------------------------------------------------- Functions.Execute("LogText", "URL=" & e.Request.URL.ToString) \'日志记录 If (dr Is Nothing OrElse UserName = "" OrElse OpenID = "") AndAlso e.GetValues.ContainsKey("tjr") Then \'空 Dim url As String = e.Request.URL.ToString \' MsgBox(url) \'-------------------------------------------------------------------------------------------- Functions.Execute("LogText", "URL=" & e.Request.URL.ToString) \'日志记录 \' If userName = "" OrElse OpenID = "" Then Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx***&redirect_uri=" & UrlEncode(url) & "&response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect" \' MsgBox(ul) \'-------------------------------------------------------------------------------------------- sb.Append("<meta http-equiv=\'Refresh\' c>") \'跳转到授权链接 e.WriteString(sb.ToString) \' msgbox("跳转授权链接", 64, "提示") Return End If End If \' msgbox("授权成功", 64, "提示") Dim Verified As Boolean Dim dr1 As DataRow = DataTables("客户").SQLFind("openid =\'" & Openid & "\'") \'根据openid找出对应的行 Dim drym As DataRow = Tables("页面信息").current.DataRow \'根据openid找出对应的行 If OpenID > "" AndAlso dr1 IsNot Nothing AndAlso dr1("permit") = False Then\'授权成功 \' msgbox("openid>0", 64, "提示") Verified = True \'这里可以做进一步的权限判断 sb.AppendLine(" 欢迎" & UserName & "光临!,用心服务好每一天。 <a href=\'http://wx.com\'>刷新页面</a>") Else e.WriteString(sb.ToString) End If Else sb.AppendLine("你无权访问本系统") End If e.WriteString(sb.ToString) [此贴子已经被作者于2025/3/2 21:31:40编辑过]
|
-- 作者:有点蓝 -- 发布时间:2025/3/2 21:58:00 -- 1、KHID这个变量根本没有用到,一直都是空值,把相关代码都去掉,比如e.AppendCookie("KHID", KHID) 2、下面代码有问题, 首先,没有判断dr1是否有值 其次,服务端不应该使用Tables("页面信息").current这种用法,因为一般不可能有人去服务器操作服务端的表格,所以Tables("页面信息").current可能永远都是第一行,如果表格没有数据,那么就会出错 Dim dr1 As DataRow = DataTables("客户").SQLFind("openid =\'" & Openid & "\'") \'根据openid找出对应的行 Dim drym As DataRow = Tables("页面信息").current.DataRow \'根据openid找出对应的行 If OpenID > "" AndAlso dr1 IsNot Nothing AndAlso dr1("permit") = False Then\'授权成功 |
-- 作者:xuzihang -- 发布时间:2025/3/2 22:48:00 -- 谢谢,我试一试 |