zoukankan      html  css  js  c++  java
  • HiMall 3接口鉴权参考

    签名算法
    为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,HOP服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。TOP目前支持的签名算法只有一种:MD5(sign_method=md5)签名大体过程如下:
    •	● 对所有API请求参数(包括公共参数和业务参数,但除去sign参数和byte[]类型的参数),根据参数名称的ASCII码表的顺序排序。如:foo=1, bar=2, foo_bar=3, foobar=4排序后的顺序是bar=2, foo=1, foo_bar=3, foobar=4。
    •	● 将排序好的参数名和参数值拼装在一起,根据上面的示例得到的结果为:bar2foo1foo_bar3foobar4。
    •	● 把拼装好的字符串采用utf-8编码,使用签名算法对编码后的字节流进行摘要,如:md5(bar2foo1foo_bar3foobar4)。
    •	● 将摘要得到的字节流结果使用十六进制表示,如:hex(“helloworld”.getBytes(“utf-8”)) = “68656C6C6F776F726C64”
    说明:MD5是128位长度的摘要算法,用16进制表示,一个十六进制的字符能表示4个位,所以签名后的字符串长度固定为32个十六进制字符。
    C#签名示例代码
    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	public static string SignTopRequest(IDictionary<string, string> parameters,string signMethod, string appSecret)
    {
         // 第一步:把字典按Key的字母顺序排序
         IDictionary<string, string> sortedParams =  new SortedDictionary<string, string>(parameters, StringComparer.Ordinal);
         IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();
     
         // 第二步:把所有参数名和参数值串在一起
         StringBuilder query =  new StringBuilder();
         while (dem.MoveNext())
         {
             string key = dem.Current.Key;
             string value = dem.Current.Value;
             if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
             {
                 query.Append(key).Append(value);
            }
         }
         query.Append(appSecret);
     
         // 第三步:使用MD5加密
         byte[] bytes;
         MD5 md5 = MD5.Create();
         bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
     
         // 第四步:把二进制转化为大写的十六进制
         StringBuilder result =  new StringBuilder();
         for ( int i =  0 ; i < bytes.Length; i++)
         {
             result.Append(bytes[i].ToString( "X2" ));
         }
     
         return result.ToString();
    }
    调用示例
    以Hishop.Open.Api.ITrade.GetSoldTrades调用为例,具体步骤如下:
    1. 设置参数值
    系统内置共钥:
    •	●app_secreate = “123456789”,内置共钥,参数值和格式以对接系统提供为准
    公共参数:
    •	●app_key = “hishopyunshangcheng”
    •	●timestamp = “2015-01-01 12:00:00”
    •	●sign= 公共参数+业务参数+app_secreate
    业务参数:
    •	●start_created=“2016-02-15 11:50:20”
    •	●end_created=“2016-02-15 23:50:20”
    •	●status=“1”
    •	●buyer_uname=“nainiu”
    •	●page_no=“1”
    •	●page_size=“40”
    2. 按ASCII顺序排序
    •	●app_key = “hishopyunshangcheng”
    •	●buyer_uname=“nainiu”
    •	●end_created=“2016-02-15 23:50:20”
    •	●status=“1”
    •	●start_created=“2016-02-15 11:50:20”
    •	●timestamp=“2015-01-01 12:00:00”
    •	●page_no=“1”
    •	●page_size=“40”
    3. 拼接参数名与参数值
    	app_keyhishopyunshangchengbuyer_unamenainiuend_created2016-02-15 23:50:20status1start_created2016-02-15 11:50:20timestamp2015-01-01 12:00:00page_no1page_size40123456789
    
    4. 生成签名
    假设最后拼接后的参数名和参数值为变量key="app_keyhishopyunshangchengbuyer_unamenainiuend_created2016-02-15 23:50:20status1start_created2016-02-15 11:50:20timestamp2015-01-01 12:00:00page_no1page_size40123456789",则签名后的sign值为:md5(key)=FBF8A81D8370223BF6D58622B3E8CBE4
    
    5. 组装HTTP请求
    将所有参数名和参数值采用utf-8进行URL编码(参数顺序可随意,但必须要包括签名参数),然后通过POST(含byte[]类型参数)发起请求,如:
    1	http: //kdt.api.hishop.com/router/Hishop.Open.Api.ITrade.GetSoldTrades?app_key=hishopyunshangcheng&timestamp=2015-01-01+12%3A00%3A00&buyer_uname=nainiu&end_created=2016-02-15+23%3A50%3A20&status=1&start_created=2016-02-15+11%3A50%3A20&page_no=1&page_size=40&sign=C612BA1DAF21AF100906851F62684DDA
    注意事项
    •	●所有的请求和响应数据编码皆为utf-8格式,URL里的所有参数名和参数值请做URL编码。如果请求的Content-Type是application/x-www-form-urlencoded,则HTTP Body体里的所有参数值也做URL编码;如果是multipart/form-data格式,每个表单字段的参数值无需编码,但每个表单字段的charset部分需要指定为utf-8。
    •	●所有API都用POST发起请求。
    •	●生成签名(sign)仅对未使用HOP官方SDK进行API调用时需要操作,如使用了HOP官方SDK,该步骤SDK会自动完成。
    FAQ
    关于此文档暂时还没有FAQ
    

      

  • 相关阅读:
    传真机换色带
    系统无法安装 OfficeControl.ocx 控件如何解决
    体系结构
    WebOffice 插件
    ArcMAP定义投影坐标
    如何在AutoCAD中将卫星底图变为有坐标参考信息的
    AutoCAD中导入图片
    CGCS2000坐标系与其他坐标系间的差异和转换方法
    FTP服务器(SOCKET)返回异常 500 Command not understood
    Java微信公众平台开发--番外篇,对GlobalConstants文件的补充
  • 原文地址:https://www.cnblogs.com/Jeely/p/11636747.html
Copyright © 2011-2022 走看看