公共HTTP请求头定义

业务端访问轻量化引擎数据服务接口时, 所有的请求接口都需要将签名信息放在请求的Headers里面,用于接口校验。签名信息由接口信息生成,各个字段的含义及生成示例如下:

字段 必选 类型 描述
timeStampData String 当前时间戳
partnerID String 接口信息中的”企业ID“
apiKeyData String MD5 加密密钥
shaKeyData String SHA 加密密钥
Note:

apiKeyData 密钥与 shaKeyData 密钥必须存在一个。

时间戳 timeStampData 生成示例:

(c#):

public static long DateTimeToUnixTimestamp(DateTime time)
 {
   var startTime = new DateTime(1970, 1, 1) + TimeZoneInfo.Local.BaseUtcOffset;
   return (long)(time - startTime).TotalSeconds;
 }
string timeStampData = StringPlus.DateTimeToUnixTimestamp(DateTime.Now).ToString();

(Java ):

 String timeStampData = System.currentTimeMillis()/1000 + "";

密钥 apiKeyData 生成示例:

(c#):

//partnerID 接口信息-企业ID
//partnerKey 接口信息-密钥
//timeStampData 上面生成的时间戳
string apiKeyData  = Md5(partnerID + partnerKey + timeStampData);

//md5加密方法
public string Md5(string msg)
{
    StringBuilder sb = new StringBuilder();

    using (MD5 md5 = MD5.Create())
    {
        byte[] buffer = Encoding.UTF8.GetBytes(msg);
        byte[] newB = md5.ComputeHash(buffer);

        foreach (byte item in newB)
        {
            sb.Append(item.ToString("x2"));
        }
    }

    StringBuilder pwsMD5 = sb;
    if (pwsMD5.ToString().Trim().Length > 16)
    {
        return pwsMD5.ToString().ToLower().Trim().Substring(8, 16);
    }
    else
    {
        return pwsMD5.ToString().ToLower().Trim();
    }
}

(Java ):

//partnerID 接口信息-企业ID
//partnerKey 接口信息-密钥
//timeStampData 上面生成的时间戳
 String apiKeyData = Md5(partnerID + secretKey + timeStamp);

 public static String enc32(String str) {
        MessageDigest messageDigest = null;
        try {
            messageDigest = MessageDigest.getInstance("MD5");
            messageDigest.reset();
            messageDigest.update(str.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            System.out.println("NoSuchAlgorithmException caught!");
            System.exit(-1);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        byte[] byteArray = messageDigest.digest();
        StringBuffer md5StrBuff = new StringBuffer();
        for (int i = 0; i < byteArray.length; i++) {
            if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
                md5StrBuff.append("0").append(
                        Integer.toHexString(0xFF & byteArray[i]));
            else
                md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
        }
        return md5StrBuff.toString();
    }
 	/*md5-16加密
     * */
    public static String Md5(String message) {
        String str32 = enc32(message);
        return str32.substring(8, 16 + 8);
    }

密钥 shaKeyData 生成示例:

(c#):

//partnerID 接口信息-企业ID
//partnerKey 接口信息-密钥
//timeStampData 上面生成的时间戳
string shaKeyData  = SHA256(partnerID + partnerKey + timeStampData);

(Java ):

//partnerID 接口信息-企业ID
//partnerKey 接口信息-密钥
//timeStampData 上面生成的时间戳
 String shaKeyData = SHA256(partnerID + secretKey + timeStamp);