1>通过ie浏览器的activx获取当前登录账户,其它浏览器不行,不支持activx。
1 <%@ Page Language="C#" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 <html xmlns="http://www.w3.org/1999/xhtml"> 5 <head runat="server"> 6 <title></title> 7 </head> 8 <body> 9 <form id="form1" runat="server"> 10 <div> 11 </div> 12 </form> 13 <object id="RTXAX" data="data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA==" 14 classid="clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D" viewastext> 15 </object> 16 <script language="javascript" type="text/javascript"> 17 var RTXCRoot = RTXAX.GetObject("KernalRoot"); //获取KernalRoot对象 18 var rtcData = RTXCRoot.Sign; //获取签名,并把它赋给rtcData 19 var strAccount = RTXCRoot.Account; //获取用户帐号 20 var strSignature = rtcData.GetString("Sign"); //获取rtcData对象的Sign 的内容,也就是用户签名 21 location.href = 'rtxsign.aspx?code=jsjd&user=' + encodeURIComponent(strAccount) + '&sign=' + encodeURIComponent(strSignature); 22 </script> 23 </body> 24 </html>
2>rtx常用接口封装
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 using System.Configuration; 7 using Newtonsoft.Json; 8 using Newtonsoft.Json.Linq; 9 10 /// <summary> 11 ///RTXHelper 的摘要说明 12 /// </summary> 13 public class RTXHelper 14 { 15 private RTXSAPILib.IRTXSAPIRootObj rootObj; 16 17 /// <summary> 18 /// 默认的RTX服务器的地址和端口是本机,如果夸服务器则从配置文件中读取 19 /// 默认值:IP(127.0.0.1) port(8006) 20 /// </summary> 21 public RTXHelper() 22 { 23 rootObj = new RTXSAPILib.RTXSAPIRootObjClass(); 24 25 WebConfigHelper webConfig = new WebConfigHelper(); 26 rootObj.ServerIP = webConfig.RTXServerIP; 27 rootObj.ServerPort = webConfig.RTXServerPort; 28 } 29 30 public RTXHelper(String rtxServerIP, Int16 rtxServerPort) 31 { 32 rootObj = new RTXSAPILib.RTXSAPIRootObjClass(); 33 rootObj.ServerIP = rtxServerIP; 34 rootObj.ServerPort = rtxServerPort; 35 } 36 37 public bool SignatureAuth(string bstrUserName, string bstrSign) 38 { 39 RTXSAPILib.IRTXSAPIUserAuthObj2 AuthObj2 = (RTXSAPILib.IRTXSAPIUserAuthObj2)rootObj.UserAuthObj; 40 return AuthObj2.SignatureAuth(bstrUserName, bstrSign); 41 } 42 43 public void SendIM(string bstrSender, string bstrPwd, string bstrReceivers, string bstrMsg, string bstrSessionID) 44 { 45 rootObj.SendIM(bstrSender, bstrPwd, bstrReceivers, bstrMsg, string.Format("{0}{1}{2}", "{", bstrSessionID, "}")); 46 } 47 48 public void SendNotify(string bstrReceiver, string bstrTitle, int lDelayTime, string bstrMsg) 49 { 50 rootObj.SendNotify(bstrReceiver, bstrTitle, lDelayTime, bstrMsg); 51 52 } 53 }
3>验收当前用户的账户。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 using XYL.IMS.Entities; 9 10 public partial class RTXSign : System.Web.UI.Page 11 { 12 private String sysCode; 13 private String rtxUserId; 14 private String sign; 15 protected void Page_Load(object sender, EventArgs e) 16 { 17 InitParam(); 18 if (PassSignatureAuth()) 19 { 20 User user = new UserBLL().GetUser(sysCode, rtxUserId); 21 SysInfo sysInfo = new SysInfoBLL().GetSingleSignUrl(sysCode); 22 if (user == null) 23 { 24 Response.Write(String.Format("您的{0}没有账户与腾讯通绑定,请绑定账户", sysInfo.Name)); 25 } 26 else 27 { 28 Response.Redirect(string.Format(sysInfo.SingleSignUrl, user.SysUserId, user.SysPassword)); 29 } 30 } 31 else 32 { 33 Response.Write("账户未通过腾讯通服务器验证,请重新登录腾讯通,然后再尝试"); 34 } 35 } 36 37 private void InitParam() 38 { 39 sysCode = Request.QueryString["code"]; 40 rtxUserId = Request.QueryString["user"]; 41 sign = Request.QueryString["sign"]; 42 } 43 44 45 46 private bool PassSignatureAuth() 47 { 48 return new RTXHelper().SignatureAuth(rtxUserId, sign); 49 } 50 51 private void setCookie() 52 { 53 HttpCookie cookie = new HttpCookie("rtx"); 54 DateTime dt = DateTime.Now; 55 TimeSpan ts = new TimeSpan(0, 0, 10, 0, 0); 56 cookie.Expires = dt.Add(ts); 57 58 cookie.Values.Add("user", HttpContext.Current.Request.QueryString["user"]); 59 cookie.Values.Add("sign", HttpContext.Current.Request.QueryString["sign"]); 60 61 Response.AppendCookie(cookie); 62 } 63 64 }
4>官网提供的demo,
1 <html> 2 <head> 3 <TITLE>签名验证</TITLE> 4 <meta http-equiv="Content-Language" content="zh-cn"> 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 6 <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> 7 <meta name="ProgId" content="FrontPage.Editor.Document"> 8 <script language="vbscript" id="clientEventHandlersVBS"> 9 <!-- 10 '从服务端获取SessionKey 11 12 dim strAccount 13 dim strSignature 14 15 Sub btnGetSign_onclick '服务器端代码,用于验证签名 16 17 on error resume next 18 19 Set RTXCRoot = RTXAX.GetObject("KernalRoot") ' 获取KernalRoot对象 20 Set rtcData = RTXCRoot.Sign '获取签名,并把它赋给rtcData 21 22 23 strAccount = RTXCRoot.Account '获取用户帐号 24 strSignature = rtcData.GetString("Sign") '获取rtcData对象的Sign 的内容,也就是用户签名 25 26 form1.user.value= strAccount 27 form1.sign.value = strSignature 28 If Err.Number <> 0 Then 29 MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description 30 Err.Clear ' Clear the error. 31 End If 32 33 end sub 34 --> 35 </script> 36 </head> 37 <body > 38 <form name="form1" method="get" action="Default.aspx"> 39 <p>用户名: 40 <input type="text" name="user"> 41 </p> 42 <p> 签 名: 43 <input type="text" name="sign"> 44 </p> 45 <p> 46 <INPUT name="btnGetSign" onclick="btnGetSign_onclick" type="button" id="btnGetSign" style="WIDTH: 100px; HEIGHT: 21px" value="获取签名" size="18" > 47 <INPUT name="btnAuthSign" type="submit" id="btnAuthSign" style="WIDTH: 100px; HEIGHT: 21px" value="签名验证" size="18" > 48 </p> 49 </form> 50 <p> 51 <OBJECT id=RTXAX 52 data=data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA== 53 classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D VIEWASTEXT> 54 </OBJECT> 55 </p> 56 <p> </p> 57 </BODY> 58 </HTML>
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 5 <html xmlns="http://www.w3.org/1999/xhtml" > 6 <head runat="server"> 7 <title>无标题页</title> 8 </head> 9 <% 10 11 string strName = HttpContext.Current.Request.QueryString["user"]; 12 string strSign = HttpContext.Current.Request.QueryString["sign"]; 13 14 15 RTXSAPILib.IRTXSAPIRootObj RootObj = new RTXSAPILib.RTXSAPIRootObjClass(); 16 RTXSAPILib.IRTXSAPIUserAuthObj2 AuthObj2 = (RTXSAPILib.IRTXSAPIUserAuthObj2)RootObj.UserAuthObj; 17 18 Response.Write(strName); 19 Response.Write(strSign); 20 21 bool bOK = AuthObj2.SignatureAuth(strName, strSign); 22 23 if (bOK == true) 24 { 25 Response.Redirect("OA.html"); 26 } 27 else 28 { 29 Response.Redirect("error.html"); 30 } 31 32 33 34 35 %> 36 <body> 37 <form id="form1" runat="server"> 38 <div> 39 </div> 40 </form> 41 </body> 42 </html>
程序员的基础教程:菜鸟程序员
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现