开发日记: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类)   

  /// <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 类)

 /// <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();
            }
        }
}

事例代码下载

作者:罗敏贵
邮箱:minguiluo@163.com
QQ群:34178394 建群 主要是寻找志同道合的人士一起学习和讨论自己的所学所思
出处:http://luomingui.cnblogs.com/
说明:专注于微软平台项目架构、熟悉设计模式、架构设计、敏捷个人和项目管理。现主要从事WinForm、ASP.NET、等方面的项目开发、架构、管理工作。文章为作者平时里的思考和练习,可能有不当之处,请博客园的园友们多提宝贵意见。
知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

原文地址:https://www.cnblogs.com/luomingui/p/1938035.html