API调用详解
::: hljs-center
# API调用详解
:::
##### 说明
开放平台的API是基于HTTP协议来调用的,开发者可直接进行HTTP请求调用,以下为使用HTTP进行API调用进行说明。
##### 调用流程
根据RTOP的协议:填充参数 > 拼装HTTP请求 > 发起HTTP请求> 得到HTTP响应 > 解释json结果
##### 调用入口
| 调用环境 |服务地址 |是否开放 |
| --------- | -------- |-----------|
| 测试环境| http://localhost:10001/test/api | 开放|
| 正式环境| http://localhost:10001/product/api | 暂未开放|
<font color="red">注意,只能使用POST请求进行API调用。</font>
##### **公共参数**
调用任何一个API都必须传入的参数,目前支持的公共参数有:
| 参数名 | 参数类型 | 描述 | 必传 |
| --------- | -------- | --------------------------------------------- | ---- |
| app_key | String | 分配给用户的app_key。 | 是 |
| sign | String | API输入参数签名结果,签名算法参照下面的介绍。 | 是 |
##### **业务参数**
API调用除了必须包含公共参数外,如果API本身有业务级的参数也必须传入,每个API的业务级参数请参考API文档说明。
##### **签名算法**
为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,资源服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。
服务目前支持的签名算法为:MD5(sign_method=md5),签名过程如下:
1. sign由所有请求参数和app_secret组成(不包含sign参数本身)。
2. 所有参数进行按照首字母先后排序。
3. 将排序后的参数按照参数名=参数值的方式拼接。
4. 连接字符串,并在首尾加上app_secret。
5. 将拼接好的参数进行MD5运算(32位),再将运算后得到的字符串所有字符转换为大写,得到sign 值。
##### **sign生成示例**
测试 app_key: app_key
测试 app_secret: app_secret
1. API接口需要请求参数如下
| 参数名称 | 参数类型 | 参数值 | 是否参与sign生成 |
| --------------- | -------- | ------------------------------------ | --------------- |
| session_key | String | 7889cf19-9623-4e6d-a0eb-57a5093119d9 | 是 |
| app_key | String | app_key | 是 |
| sale_order_code | String | RG20171030104 | 是 |
| sign | String | CBDF18FD664A303186054EFA96B642FB | 否 |
2. 按照首字母先后排顺序如下
| 参数名称 | 参数类型 | 参数值 |是否参与sign生成|
| --------------- | -------- | ------------------------------------ |---------------|
| app_key | String | app_key | 是 |
| sale_order_code | String | RG20171030104 | 是 |
| session_key | String | 7889cf19-9623-4e6d-a0eb-57a5093119d9 | 是 |
| sign | String | CBDF18FD664A303186054EFA96B642FB | 否 |
3. 拼接后的字符串如下
app_key=app_key&sale_order_code=RG20171030104&session_key=7889cf19-9623-4e6d-a0eb-57a5093119d9
4. 首尾加上app_secret后字符串如下。
<font color="red">app_secret</font>app_key=app_key&sale_order_code=RG20171030104&session_key=7889cf19-9623-4e6d-a0eb-57a5093119d9<font color="red">app_secret</font>
5. 最终生成的sign值如下。
B7FF97E7A1FC5D5C4CE35C15F9CF46F8
##### 注意事项:
1. 所有的请求和响应数据编码皆为utf-8格式。如果请求的Content-Type是 application/x-www-form-urlencoded,所有参数值也做urlencode编码;如果是multipart/form-data格式,每个表单字段的参数值无需编码,但每个表单字段的charset部分需要指定为utf-8。