• 开发日记: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 中国大陆许可协议进行许可。

  • 相关阅读:
    Python的第一个程序
    Spring Boot 之Web开发
    JAVA简介及特性
    Spring Boot与Docker
    ls命令之通配符的使用
    [导入]ASP.NET常用函数
    [导入]再见号称中国最美的女人
    [导入]www.reactos.org一网友介绍的方向为“自己写操作系统的站点”
    [导入] Gmail Chat (Gmail 里的聊天功能)
    [导入]此篇写给城里普通收入的年轻人~~~
  • 原文地址:https://www.cnblogs.com/luomingui/p/1938035.html
Copyright © 2020-2023  润新知