1. 接口规范

第三方调用百世 WMS API 需遵循以下接口规范。

1.1. API 调用方法简介

开放平台(OPENAPI)的 API 基于 HTTP 协议调用,以 HTTP POST 表单提交方式发送,编码方式为 UTF-8。开发者需根据 OPENAPI 协议自行封装 HTTP 请求进行调用,以下针对自行封装 HTTP 请求的调用原理进行详细说明。

特殊说明:不推荐使用把参数拼接在 URL 后面的方式发送请求,因为 URL 拼接参数的长度有限制,可能会导致接收到的数据不完整。

1.2. 调用流程

OPENAPI 主要调用流程如下:

  1. 填充消息参数字段
  2. 生成签名
  3. 封装 HTTP 请求
  4. 拿到 HTTP 响应
  5. 解析响应结果

1.3. 海外仓 API 调用入口

OPENAPI 提供测试环境给客户使用:

环境 地址
测试环境 http://kytest.800best.com/gateway/api/glink
生产环境 http://edi-glink.800best.com/gateway/api/glink

1.4. 海外仓 API 调用参数

OPENAPI 协议中需要的参数包括:bizDatasignserviceTypepartnerId

字段名 含义 类型 是否可空
bizData 业务数据,具体格式见各接口的请求参数说明 String N
serviceType 业务接口类型,如 GLINK_CREATE_ORDER_NOTIFY String N
partnerId 合作伙伴 ID(商家 ID),用于客户路由与校验 String N
sign 签名字符串 String N

1.5. 数字签名

1.5.1. 签名过程简介

为了 API 的调用过程更加安全,调用任何一个 API 都需要携带签名,百世海外仓 API 服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。百世海外仓 API 目前使用的是 MD5 签名算法,签名大体过程如下:

1. 生成待签名字符串

将 API 请求参数中的 bizDatapartnerKey 参数值取出,依次进行拼接,如:

参数 bizData 的值为:

<?xml version="1.0" encoding="UTF-8"?>
<request>
  <customerCode>TEST2</customerCode>
  <orderNumbers>TC170501001</orderNumbers>
</request>

参数 partnerKey 的值为:

123456

那么待签名的字符串就是:

<?xml version="1.0" encoding="UTF-8"?>
<request>
  <customerCode>TEST2</customerCode>
  <orderNumbers>TC170501001</orderNumbers>
</request>123456

2. 计算签名

将待签名字符串以 UTF-8 的格式转成字节流,然后对该字节流使用 MD5 摘要算法得到签名字节流,再将得到的签名字节流结果使用十六进制字符串表示,即生成了数字签名。

如:上面的待签名字符串得到的签名为:c1046d06d453b40cc0389271abf6c73b

:MD5 是 128 位长度的摘要算法,用 16 进制表示,一个 16 进制的字符能表示 4 个位,所以签名后的字符串长度固定为 32 个 16 进制字符。

1.5.2. 签名算法示例

Java 代码示例

参数为:bizData + partnerKey,encode 为 UTF-8

public static String makeSign(String data, String encode)
        throws NoSuchAlgorithmException, UnsupportedEncodingException {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(data.getBytes(encode));
    byte[] b = md.digest();
    StringBuilder output = new StringBuilder(32);
    for (int i = 0; i < b.length; i++) {
        String temp = Integer.toHexString(b[i] & 0xff);
        if (temp.length() < 2) {
            output.append("0");
        }
        output.append(temp);
    }
    return output.toString();
}

C# 代码示例

public static string MakeMd5Sign(string origin)
{
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] targetData = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(origin));
    StringBuilder sb = new StringBuilder("");
    foreach (byte b in targetData)
    {
        sb.AppendFormat("{0:x2}", b);
    }
    return sb.ToString();
}

PHP 代码示例

$partnerKey = '12345';
$bizData = '<xml></xml>';
$origin = $bizData . $partnerKey;
$sign = md5($origin);

1.6. 注意事项

a) HTTP 需要设置头部信息参数(Content-Type, application/x-www-form-urlencoded;charset=UTF-8);

b) 所有参数都是必传的;

c) 关于 URLEncode:

  • i. 做签名之前不要 URLEncode;
  • ii. 应检查发送 HTTP 请求的组件或方法里面是否有做 URLEncode,如果有则不用做额外的 URLEncode。比如 PHP 的 http_build_query() 方法就是自动做了 URLEncode。

d) 尽量避免使用在 URL 后面链接相关参数的方式发送请求。

e) 签名失败时请检查以下几项:

  • i. 提交 POST 请求时是否设置请求编码为 UTF-8;
  • ii. 待签名的数据是否已编码 UTF-8 转为字节流;
© Copyright QianYi Team 2025 All Rights Reserved            Updated 2026-09-07 06:28:57

results matching ""

    No results matching ""