公共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 apiKeyData = SHA256(partnerID + secretKey + timeStamp);