# API调用方法详解
# 请求简介
开放平台的API是基于HTTP协议来调用的,开发者可以直接使用开放平台的协议来封装HTTP请求进行调用, 以下主要是针对自行封装HTTP请求进行API调用的原理进行详细解说。
# 请求地址
调用API的服务URL地址, 开放平台目前提供如下环境供使用:
环境 | https地址 |
---|---|
正式环境 | https://openapi.smzdm.com |
# 公共参数
调用任何一个API都必须传入的参数, 目前支持的公共参数有:
参数名称 | 参数类型 | 是否必须 | 参数描述 |
---|---|---|---|
app_key | String | 是 | 开放平台分配给应用的AppKey。例:12345678 |
timestamp | String | 是 | 当前时间的时间戳,格式为UNIX时间(秒)时间戳,开放平台服务端允许误差为10分钟内 |
sign | String | 是 | API入参参数签名,签名值根据如下算法给出计算过程) |
# 业务参数
API调用除了必须包含公共参数外, 如果API本身有业务级的参数也必须传入, 每个API的业务级参数请参考API文档详细描述说明。
# 签名算法
为了防止API调用过程中被恶意篡改, 调用任何一个API都需要携带请求签名, 开放平台服务端会根据请求参数,对签名进行验证,签名不合法的请求将被拒绝。
目前支持的签名算法为: MD5(sign_method=md5), 签名过程如下:
- 本次请求中所有的请求参数(包括公共参数与业务参数,但除去sign参数)进行首字母以ASCII方式升序排序(ASCII ASC), 对于相同字母,则使用下个字母做二次排序, 字母序为从左到右,以此类推。参数值value为空则过滤此键值对。
- 排序后的结果按照参数名(key) 参数值(value)的次序进行字符串拼接, 拼接处不包含任何字符。
- 在拼接完成的字符串的头部及尾部分别拼接app_secret值, 完成签名字符串的组装。
- 最后对待签名字符串,先用MD5算法加密, 得到的MD5加密密文后转为大写,即为sign值。
# 调用示例
# 一、参数示例
array (
'timestamp' => '1480411125',
'app_key' =>'123456789',
'order_status' => '1',
'page_size' => '10'
'page' => '1',
)
1
2
3
4
5
6
7
2
3
4
5
6
7
# 二、 按首字母升序排列(ASCII ASC)
array (
'app_key' =>'123456789',
'order_status' => '1',
'timestamp' => '1480411125',
'page' => '1',
'page_size' => '10'
)
1
2
3
4
5
6
7
2
3
4
5
6
7
# 三、 拼接字符串
无缝拼接字符串,拼接完成后在头部以及尾部额外拼接上app_secret,假设app_secret值为88888888,则示例签名字符串如下:
88888888app_key123456789order_status1page1page_size10timestamp148041112588888888
1
# 四、 生成签名sign
sigin最终输出为长度32位的大写字符串:
UPPER_CASE(MD5(88888888app_key123456789order_status1page1page_size10timestamp148041112588888888))
1
最终输出
27C4D45CE6F51B71493FC2B9AA80DB23
1
# 五、 组装http请求
将所有参数名和参数值采用utf-8进行URL编码(参数顺序可随意,但必须要包括签名参数),然后通过GET或POST发起请求,如:
https://openapi.smzdm.com/haojia/third/list?app_key=123456789&order_status=1×tamp=1480411125&page=1&page_size=10&sign=27C4D45CE6F51B71493FC2B9AA80DB23
1
2
3
2
3
# 注意事项
- 需要特别注意参数sign签名生成方式。
# 常见平台级错误码
错误码 | 错误信息 | 错误原因 | 解决方案 |
---|---|---|---|
100070 | String | 开放平台提供的接口不合法 | 联系开放平台对接人员 |
100071 | String | 接口未授权或已下架 | 联系开放平台对接人员 |
100072 | String | 请求Method不合法 | 重新查看文档,确认请求是GET,还是POST请求 |
100078 | String | 触发限流规则 | 联系开放平台对接人员 |
100080 | String | 接口未授权 | 联系开放平台对接人员 |
100110 | String | 数据解析错误 | 联系开放平台对接人员 |
100111 | String | 缺少app_key参数 | 重新查询传参 |
100112 | String | 数据解析错误 | 联系开放平台对接人员 |
100113 | String | 密钥配置错误 | 联系开放平台对接人员 |
100114 | String | sign或者time字段为空 | 重新查询传参 |
100115 | String | timestamp字段不合法 | 重新查询传参 |
100116 | String | timestamp字段不合法 | 重新查询传参 |
100120 | String | timestamp字段过期 | 重新查询传参 |
100130 | String | 签名校验失败 | 重新查询传参 |
← 新手指南 OAuth2.0 调用方法详解 →