如果需要使用Java以外的语言访问API,可以根据这里的内容使用HTTP 消息与网关进行交互,也可以自行编写SDK。
HTTP Request构成说明
HTTP Request URL
访问API的URL由以下方式构成:
https://{openplatform-domain}/<operation>
- 其中:operation 业务开发配置暴露的api name,大小写敏感。
api url要求必须是https
如下所示的URL是根据工号查询人员帐号信息, 请求的目标URL:
https://openplatform.dg-work.cn/rpc/enhancedUserQuery/getUserByEmpId.json
HTTP Request Header
API规定HTTP请求的Header必须包含以下信息:
- X-Hmac-Auth-IP
用户的IP地址 - X-Hmac-Auth-MAC
用户的MAC地址 - X-Hmac-Auth-Timestamp
请求发出时间,使用UTC时间,ISO8601格式为”yyyy-MM-ddTHH:mm:ss.sss+08:00” - X-Hmac-Auth-Version
API的版本号,版本号目前值为1.0 - X-Hmac-Auth-Nonce
API的nonce,建议使用13位时间毫秒数 + 4位随机数 - apiKey
应用的appkey X-Hmac-Auth-Signature
请求的签名。签名计算方法如下:
1.获取签名字符串的字节数组:请求Method+’\n’+请求Header中的Timestamp+’\n’+请求Header中的Nonce+’\n’+请求的的URL(不带域名)+’\n’+请求参数
2.HmacSha256(SecretKey,签名字符串字节数组)
3.对第二步结果使用Base64,得到签名结果伪代码中使用到的函数的说明:
HmacSha256 - Hmac-Sha256加密算法<br /> 计算请求签名时请将StringToSign作为消息,<br /> SecretKey作为密钥。 <br /> * base64 - base64 编码算法<br /> * HTTPRequestMethod<br /> HTTP请求方法,如GET、POST或PUT等,<br /> HTTP API只支持GET/POST方法。注意GET/POST需要大写。<br /> * HttpRequestHeaderTimestamp<br /> HTTP Request header中X-Hmac-Auth-Timestamp值<br /> * HttpRequestHeaderNonce<br /> HTTP Request Header中X-Hmac-Auth-Nonce值。<br /> * CanonicalURI<br /> HTTP URL中的路径部分,如"https://openplatform.dg-work.cn/rest/enhancedUserQuery/getUserByEmpId"中,<br /> CanonicalURI 为"/rest/enhancedUserQuery/getUserByEmpId"。<br /> * HttpRequestParams<br /> HTTP中POST和GET的参数,对其排序,忽略大小写的字典序排列。<br /> 然后组装key1=value1&key2=value2。<br /> 注意:如果出现类似key=value2&key=value1&key=value3时情况,请对值列表排序(升序),<br /> 变成key=value1&key=value2&key=value3。
HTTP Response
HTTP Response Content
返回格式
{"_RequestId":"6D26836F-D51C-4716-9340-94C734B2F2BF",xxxx:xxx}
API Server会对HTTP请求进行验证:
• 验证请求头中包含的签名是否正确
• 验证X-Hmac-Auth-Timestamp包含的时间与服务器时间相差小 于15分钟,若认证未通过,Server会直接返回身份认证错误。
FAQ
- 如果出现tengine返回的400错误,提示:Your browser sent a request that this server could not understand.
请检查先你的pom依赖,是不是有低版本的commons-codec,请exclude掉。
原因是由于低版本的commons-codec的base64出来的字符串多了\r\n导致http报错格式错误。 - 上线前,请先你的线上机器确定网络是可以curl https://openplatform.dg-work.cn
- 签名报错,返回:SignatureDoesNotMatch
请检查下自己的apiKey是否正确
如果非java的客户端,检查下自己的参数是否按照升序排序
如果参数是中文,签名时,中文参数不要encode,传参数时要url encode