1. 鉴权方式
1.1. 获取 Token
- 1.1.1. 调用服务接口
{ {projectUrl}}/ois/order/getAuth
,传入分配好的appKey
和appSecret
,验证通过后返回access token
。 - 1.1.2. 调用其他接口时需要此
token
参与签名计算。 - 1.1.3.
token
的有效时间不固定,推荐根据响应code
判断是否需要重新获取token
:- 当
code=1004
或code=1005
时需要获取新token
。
- 当
1.2. 计算签名
- 1.2.1. 将所有参数(表单参数和 HTTP 头原始值)拼接,将参数自然排序(无值的参数不拼接)。例如:
a=1&b=2&c=3&d=4
。 - 1.2.2. 将拼接好的参数字符串进行 Base64 编码:
Base64(str)
。 - 1.2.3. 将 Base64 后的字符串与
appSecret
进行拼接,并做 MD5 加密:MD5(Base64(str)+appSecret)
。 - 1.2.4. 将 MD5 加密后的字符串转换为大写。
1.3. Token 解析
-
1.3.1. HTTP 头中有三个参数:
token
、sign
和version
。token
实际上是经过伪装的,并非原始token
。 -
1.3.2.
token
组成:{ "timestamp":1584953245407,"nonce":"slnkda","token":"b535e97f-2293-4b8c-8bdd-b2e9fa96aa77"}
timestamp
:当前时间戳,13 位毫秒数。nonce
:可以固定为slnkda
。token
:从getAuth
接口返回的token
。
-
1.3.3. 将以上
token
对象进行 Base64 编码:Base64(token)
。 -
1.3.4. 进行字符替换:
"a"
->"-"
"c"
->"#"
"x"
->"^"
"M"
->"$"
Java 语言替换时可能会产生多余换行符,要处理掉,以免接口返回“非法请求”。
1.4. HTTP Header 组成
调用获取 token
以外的接口时,需要在 HTTP 头中添加以下信息:
- 1.4.1. 伪装后的
token
。 - 1.4.2. 计算后的
sign
签名。 - 1.4.3. 客户端版本
version
。
2. 测试对接要求
- 2.1. 测试单号要求以
Test
开头。
3. 常见对接误区
- 3.1. 预报之后不主动监测预报状态,导致预报失败却未处理。
- 3.2. 轮询频率不限制为每秒 1 次,会导致限流。
- 3.3. 预报失败或预报一直未完成时不限制轮询次数,导致服务器压力增大。
使用以下C#代码来对接该接口。下面是一个步骤分解的示例,包括如何获取token
和签名的计算方式:
4. 获取 Token 接口
using System;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
class Program
{
private static readonly string appKey = "you