# 2.1.1 HTTP接口
# 网关地址
https://open.ainfinit.com/
# 接口规范
- 使用 RESTful API 接口规范;
- 请求
header中包含Authorization字段,进行认证和校验,Authorization的生成规则请参考下文的安全策略; - 响应数据默认为JSON格式,包含
status,message和data三个字段,例如:
{
"status": 10200,
"message": "OK",
"data": {
"vendingMachine": {
"id": 53,
"code": "00e0671539e7",
"location": "门头沟科技园区5号楼1层"
}
}
status含义和data格式请参考每个接口的说明.
# 系统全局状态码
响应json中的status状态码,用于表示业务含义
| Code | Description |
|---|---|
| 200 | 成功 |
| 40101 | 认证失败 |
# 安全策略
出于安全考虑,所有api交互的请求必须携带签名信息,签名值作为Authorization字段保存在http请求的header中.
# 签名算法
- 将商户code和当前系统时间戳(Unix timestamp毫秒)组装成json格式字符串,例如
{"merchant_code":"merchant","timestamp":1557218157315}. - 商户的
secret_key为密钥,使用AES算法(ECB模式,PKCS5Padding)对上一步生成的字符串进行加密,生成nonce_str. - 将上一步骤生成的
nonce_str加入步骤2的json字符串中,例如{"merchant_code":"zhonlgiang","timestamp":1557218157315 ,"nonce_str":"eyJzdWIiOiJjZTk4NmM0NjA2YWU0NGRjOTgzNmFmNmY1Y2E2NzFlMTciLCJib"},进行base64编码,生成最后的认证字段.可以参考以下sample进行验证。
签名样例
商户code为
merchant,密钥为4UafmbIJroNY2lXX
- 组成
json格式字符串{"merchant_code":"merchant","timestamp":1557218157315} - 使用密钥进行AES加密生成
nonce_str,放入上一步json数据中,注意按照json字段属性按照字母顺序
{"merchant_code":"merchant","nonce_str":"VSHv3B3PmL49R2Yphnx/HRkl6ULR34Aq/OI7UFNnLeuPngEvvV7HR+2DXPQQb8zcSxYZUWA1H3WxM4TxSfkPhg==","timestamp":1557218157315}
- 对
json格式数据进行base64编码,生成最终的签名
eyJtZXJjaGFudF9jb2RlIjoibWVyY2hhbnQiLCJub25jZV9zdHIiOiJWU0h2M0IzUG1MNDlSMllwaG54L0hSa2w2VUxSMzRBcS9PSTdVRk5uTGV1UG5nRXZ2VjdIUisyRFhQUVFiOHpjU3hZWlVXQTFIM1d4TTRUeFNma1BoZz09IiwidGltZXN0YW1wIjoxNTU3MjE4MTU3MzE1fQ==
可以参考2.1.2 接口签名示例(Authorization)页面的Java代码实现。