开发日记:PDO统一接口开发规范1.0 事例

这个星期做了一个API接口整合的程序大家还是看程序把!
PDO统一接口开发规范1.0 加密方式
密码加密是MD5 32位加密
syskey 加密是32位安全码
功能描述:
1: 从A网站登录到B网站(A网站也同时登录)
2: 从B网站登录到A网站(B网站也同时登录)
注意:
1:俩个站点的syskey要一样。
2:俩个站点的用户名和密码要一样。
3:俩个站点是用XML传输的 编码是gb2312
使用说明:
1:在项目登录页中添加如下代码:
#region 动易,动网,Oblog 整合 编写人:JONE 编写时间:2011年1月13日 16:54:30
if (PDOAction.Instance().Enabled){
PDOAction.Instance().Login(Username.Text, hashPassword, 1);
}
#endregion
请求
格式:
POST HTTP/1.1 Content-Type: text/xml; charset=gb2312
<?xml version="1.0" encoding="gb2312"?>
<root>
<appid>程序标识</appid>
<action>操作类型</action>
<syskey>安全码</syskey>
<username>用户名</username>
<可选元素列表 />
</root>
提供 API 请求类 (PDOAction类)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | /// <summary> /// 提供API请求的类 /// </summary> public static class Request { public static bool CheckEmail( string userName, string email) { ApiData data = new ApiData(); data.SpeItems[1, 1] = "checkemail" ; data.SpeItems[5, 1] = userName; data.SpeItems[7, 1] = email; data.SpeItems[2, 1] = Common.MD5GB2312(userName + data.ApiKey).Substring(8, 0x10); data.PrepareXml( true ); data.SendPost(); if (data.FoundErr) { return false ; } return true ; } public static bool CheckName( string userName, string email) { ApiData data = new ApiData(); data.SpeItems[1, 1] = "checkname" ; data.SpeItems[5, 1] = userName; data.SpeItems[7, 1] = email; data.SpeItems[2, 1] = Common.MD5GB2312(userName + data.ApiKey).Substring(8, 0x10); data.PrepareXml( true ); data.SendPost(); if (data.FoundErr) { return false ; } return true ; } public static string DeleteUsers( string userName) { userName = userName.Replace( "'" , "" ); if ( string .IsNullOrEmpty(userName)) { return "false" ; } ApiData data = new ApiData(); data.SpeItems[1, 1] = "delete" ; data.SpeItems[5, 1] = userName; data.SpeItems[2, 1] = Common.MD5GB2312(userName + data.ApiKey).Substring(8, 0x10); data.PrepareXml( true ); data.SendPost(); if (data.FoundErr) { return data.ErrMsg; } return "true" ; } public static bool LockUser( string userName, int userstatus) { ApiData data = new ApiData(); data.SpeItems[1, 1] = "lock" ; data.SpeItems[5, 1] = userName; data.SpeItems[3, 1] = userstatus.ToString(CultureInfo.CurrentCulture); data.SpeItems[2, 1] = Common.MD5GB2312(userName + data.ApiKey).Substring(8, 0x10); data.PrepareXml( true ); data.SendPost(); if (data.FoundErr) { return false ; } return true ; } public static void LogOff( string userName) { ApiData data = new ApiData(); data.SpeItems[5, 1] = userName; data.SpeItems[2, 1] = Common.MD5GB2312(userName + data.ApiKey).Substring(8, 0x10); foreach ( string str in data.Urls) { HttpContext.Current.Response.Write( "<script type=\"text/javascript\" language=\"JavaScript\" src=\"" + str + "?syskey=" + data.SpeItems[2, 1] + "&username=" + HttpUtility.UrlEncode(userName, Encoding.GetEncoding( "GB2312" )) + "\"></script>" ); } } } |
响应
格式:
HTTP/1.1 200 OK Content-Type: text/xml; charset=gb2312 Content-Length: length
<?xml version="1.0" encoding="gb2312"?>
<root>
<appid>程序标识</appid>
<status>操作结果</status>
<body>
<message>操作不成功时返回的错误描述</message>
<可选元素列表 />
</body>
</root>
提供 API 响应的类( Reponse 类)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | /// <summary> /// 提供API响应的类 /// </summary> public class Reponse : System.Web.UI.Page { protected ApiData API; // 客户端发送过来的请求数据 private static Hashtable paramsList = new Hashtable(); public Reponse(){ this .API = new ApiData(); this .Load += new EventHandler(Page_Load); } protected void Page_Load( object sender, EventArgs e) { if ( this .API.ApiEnable.ToLower() != "true" ){ this .API.ErrMsg = "接口没有开通" ; this .API.WriteErrXml(); } //syskey username password savecookie paramsList = GetParamsFromRequest(Request); if (paramsList.Count > 0){ this .API.SpeItems[2, 1] = GetRequest( this .API.SpeItems[2, 0]); this .API.SpeItems[5, 1] = GetRequest( this .API.SpeItems[5, 0]); this .API.SpeItems[6, 1] = GetRequest( this .API.SpeItems[6, 0]); this .API.SpeItems[10, 1] = GetRequest( this .API.SpeItems[10, 0]); } else { NameValueCollection values = HttpUtility.ParseQueryString( base .Request.Url.Query, Encoding.GetEncoding( "UTF-8" )); this .API.SpeItems[2, 1] = this .Context.Request.QueryString[ this .API.SpeItems[2, 0]]; this .API.SpeItems[5, 1] = values[ this .API.SpeItems[5, 0]]; this .API.SpeItems[6, 1] = this .Context.Request.QueryString[ this .API.SpeItems[6, 0]]; this .API.SpeItems[10, 1] = this .Context.Request.QueryString[ this .API.SpeItems[10, 0]]; } Response.AddHeader( "P3P" , "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR" ); if (( this .API.SpeItems[2, 1] != "" ) && ( this .API.SpeItems[5, 1] != null )) { if (( this .API.SpeItems[5, 1] != "" ) && ( this .API.SpeItems[5, 1] != null )) { if (( this .API.SpeItems[6, 1] != "" ) && ( this .API.SpeItems[6, 1] != null )) { this .Loginon(); } else { this .Loginout(); } } } else { this .DealResponse(); } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?