Lingxing
切换旧版

领星 API 接入指南

1. 准备工作

1.1. 申请AppId和AppSecret

接入领星 API 公共服务前须先申请AppId和AppSecret,AppId和AppSecret是生成调用领星功能接口凭证token的必须参数,客户需要妥善保管,操作流程见 如何申请企业的appid和appsecret? ;

1.2. 配置IP白名单

除申请AppId和AppSecret外,还需添加允许访问的外网IP白名单,二者缺一不可,操作流程见 如何配置ip白名单? ;

2. 业务接口的调用

2.1 API请求域名

https://openapi.lingxing.com

2.2 公共请求参数

参数名类型描述数据来源
access_tokenstring通过接口获取的token信息access_token获取
app_keystringAPP IDAPI信息的查询与配置
timestampstring时间戳1720408272
signstring接口签名签名sign的生成

举例说明公共请求参数在接口请求中的使用(Query Params传参): token 如果没有传递完整的公共请求参数,则会出现公共请求参数不完整的问题 > 注意:sign作为参数,在传输时需要进行URL编码【url encode】以确保能够正常传递并被正确处理

2.3 接口请求

2.3.1 Get类型请求

业务请求参数+公共请求参数,都拼接在url上面

比如发送业务参数为offset=0,length=100的GET请求,则url参数拼装为: access_token=44fa2eed-xxxx-xxxx-xxxx-8c6abe5ea6a4&app_key=ak_xxxxxxxxxS&timestamp=1720429074&sign=NaUK5YE68tgyVz%2FheN8WqPvL%2F4zTp1zK7%2BX0H8iogzRNvt1hHQkYGvkzsZ%2B0e8VP&offset=0&length=100

举例说明Get请求如下:

curl --location --max-time 30000 'https://openapi.lingxing.com/xxx/xxx/xxx?access_token=44fa2eed-xxxx-xxxx-xxxx-8c6abe5ea6a4&app_key=ak_xxxxxxxxxS&timestamp=1720429074&sign=NaUK5YE68tgyVz%2FheN8WqPvL%2F4zTp1zK7%2BX0H8iogzRNvt1hHQkYGvkzsZ%2B0e8VP&offset=0&length=100'

2.3.2 POST类型请求

业务请求参数(放入body,json形式传参)+ 公共请求参数

注意:

1. body参数中若嵌套有集合需要转成string参与签名,否则会出现生成签名不正确的问题

2. 接口文档无特殊说明的,body内参数均以json格式传输,header中需要设置 Content-type:application/json

比如发送业务参数为{"name": "kobe", "content": { "city": "lake", "age": "133" }}请求,
举例说明使用 postman 发送POST请求,示例如下:

3. access_token获取及续约

3.1 access_token获取

access_token是领星API调用的凭证,调用各业务接口时都需使用access_token,开发者需要进行妥善保存;详见接口文档 获取接口令牌-access_token。

3.2 access_token续约

如果不想生成新的token,可以根据appId和access_token续约access_token;在access_token到期前调用续约接口,每次调用都会生成新的refresh_token,详见接口文档 续约接口令牌

注意:refresh_token的有效期为 2个小时,一个refresh_token只能被使用一次给access_token续约,如果需要再次续约,需要使用上次续约返回的refresh_token

使用 postman 续约access_token示例如下:

4. 签名sign的生成

4.1 sign的生成规则:

a)请求包含的所有参数使用 ASII 排序【所有的业务请求入参+3个固定参数(access_token、app_key、timestamp)】;

b)以 key1=value1&key2=value2&...&keyn=valuen 的格式拼接起来,其中key为参数键,value为参数值【value为空不参与生成签名!(value为null会参与生成签名)】;

c)拼接之后的字符串用MD5(32位)加密后转大写;

d)用AES/ECB/PKCS5PADDING对生成的MD5值加密,其中AES加密的密钥为appId;


AES加密采用ECB模式,填充方式为PKCS5PADDING

注意:

1.sign作为参数,在传输时需要进行URL编码【url encode】,以确保能够正常接收处理。

2.当timestamp以固定值参与签名生成sign时,sign的有效期为 2 分钟,2分钟后签名过期,因此建议调用业务接口时使用实时的时间戳生成签名sign,不要缓存sign

3.当有文件上传需要生成签名时,需要文件原始名作为key,文件md5加密的值为value,key不要使用汉字,key=originFileName,value=DigestUtils.md5Hex(InputStream()))

4.2 最佳实践:

  1. 下载相应语言的SDK文件,以Java语言为例
  2. 根据自身业务进行修改,如下所示:
    public static void main(String[] args) throws Exception {
        String appId = "xxx";

        Map<String, Object> queryParam = new HashMap<>();
        queryParam.put("timestamp", 1639734344);
        queryParam.put("access_token", "59cf5437-669b-49f5-83c4-3cc1d1404680");
        queryParam.put("app_key", appId);

        String sign = ApiSign.sign(queryParam, appId);
        queryParam.put("sign", sign);
        log.info("sign:{}", sign);

        HttpRequest<Object> build = HttpRequest.builder(Object.class)
                .method(HttpMethod.GET)
                .endpoint("xxxx")
                .path("erp/sc/data/local_inventory/brand")
                .queryParams(queryParam)
                .build();
        HttpResponse execute = HttpExecutor.create().execute(build);
        log.info("execute:{}", execute.readEntity(Object.class));
    }

5. 限流算法说明

改进的令牌桶算法:为每一个请求提供一个令牌;当请求到达时,如果桶中有足够的令牌,则会消耗一个令牌并允许请求通过; 如果没有令牌,则请求被限流(错误码:3001008);

令牌回收是基于请求完成、异常、超时(2min);

令牌桶的维度:appId + 接口url。

限流算法示意图:

6. SDK下载

Go PHP Java NODE Python

[领星API接入指南(旧版文档入口,新客户无需关注) 排版更新,接入方式无变化;[领星API接入指南(旧版文档入口)](/api-docs/Guidance/Instructions)