代发外部仓对接文档 - v1.7

深圳芥舟科技有限公司

2022-01-18

版本所有 侵权必究

修改历史

版本日期修订人员修正信息
1.02022-01-18Hamsingli创建初版接口文档
1.12022-01-19Hamsingli新增物流发货接口
1.22022-01-25Hamsingli新增订单支付时间,购买人平台ID,支付类型字段
1.32022-02-08Hamsingli新增SesstionKey字段
1.42022-02-22Hamsingli去除不必要字段定义
1.52022-03-10Hamsingli添加商品维度税费字段
1.62022-08-02Hamsingli更新商品价格为4位小数
1.72022-09-15Hamsingli新增订单状态售后推送订阅接口

一、系统调用、部署关系图

二、芥舟开放平台接口调用

2.1 约定

  • ERP服务通过Https协议(支持TLS1.2版本)对外提供Web Api接口。

    API请求头信息:

    Accept: application/json

    Content-Type: application/json;charset=UTF-8

  • 所有请求内容需要包含参数appId(应用Id)version(1.0)time(UTC毫秒时间戳)sign(签名信息)signType(支持MD5)

2.2 环境信息、账号秘钥获取

  • 环境信息:

    测试环境: https://gwfat.kldidi.com,后文统一定义为变量TEST_PATH

    生产环境地址: https://gateway-cn.jieztech.com,后文统一定义为变量PRO_PATH

  • 账号密钥获取

    测试环境: 选择MD5加密方式时联系芥舟开发同事提供appIdappSecret给到外部系统。

    生产环境: 密钥生成及验证和测试环境一致、联系芥舟开发同事提供生产的相关授权资料。

2.3 签名、验签

  • 筛选

    获取所有请求参数,sign、signType参数不参与签名,需要剔除sign、signType参数。需要注意为空的参数不参与签名,空字符串需要参与签名。

  • 排序

    将筛选后的参数按照位置加字母升序排序(ASCII码递增排序),先按第一个字符键值排序,遇到相同字母按第二个字符键值排序,以此类推。对于多层级参数的情况,每个层级的参数根据各层级参数名的ASCII码从小到大排序。

  • 拼接

    将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待签名字符串。

  • 存在数组的情况

    如果参数中存在子json是数组的情况,直接使用数组原始key[数组下标]=值方式组合,参考示例3,

    如果参数中存在子json是数组的情况,且数组是KEY:VALUE方式,则对key进行ASCII码从小到大排序,然后使用数组原始key[下标]_子key方式组合,如:{id:1,param1:{key1:val1},param2:{data:[{name:zs,sex=boy},{name:ls,sex=girl}]}},组合后的字符串为: id=1&param1_key1=val1&data[0]_name=zs&data[0]_sex=boy&data[1]_name=ls&data[1]_sex=girl。参考示例4

  • 示例1: 请求参数

appId=802020070300001&orderNo=102020070300001&time=1593767721515&version=1.0

拼接后参数

appId=802020070300001&orderNo=102020070300001&time=1593767721515&version=1.0
  • 示例2: 请求参数
{
    "appId": "802020070300001",
    "orderNo": "102020070300001",
    "time": "1593767721515",
    "version": "1.0",
    "signType": "MD5"
}

拼接后参数

appId=802020070300001&orderNo=102020070300001&time=1593767721515&version=1.0
  • 示例3: 请求参数
{
    "appId": "802020070300001",
    "orderNo": "102020070300001",
    "time": "1593767721515",
    "orderNoList":["819000803560518","819000803560519"],
    "version": "1.0",
    "signType": "MD5"
}

拼接后参数

appId=802021042000001&orderNoList[0]=819000803560518&orderNoList[1]=819000803560519&time=1631241232765&version=1.0
  • 示例4: 请求参数
{
    "appId":"3512618851001196672",
    "version":"1.0",
    "sessionKey":"string",
    "goodsList":[
        {
            "sku":"4548366593300",
            "barcode":"4548366593300",
            "goodsName":"SABRINA连裤袜黑色80厚度2双装JM-L",
            "qty":"40"
        }
    ]
}

拼接后参数

appId=3512618851001196672&goodsList[0]_barcode=4548366593300&goodsList[0]_goodsName=SABRINA连裤袜黑色80厚度2双装JM-L&goodsList[0]_qty=40&goodsList[0]_sku=4548366593300&sessionKey=string&version=1.0d7de99ccbd3fbaab38261f7a067c0e49

注意:

拼接签名之前的参数时需使用参数的原始值状态,不能基于原始值进行其他编码转换,否则会造成签名验证失败。

  • signType = MD5:

签名需要将appSecret的值拼接在字符串后面,调用MD5算法生成sign;

appId: 802020070300001
appSecret: e338aeb855c94faca1c51a822740058e

请求参数

appId=802020070300001&orderNo=102020070300001&time=1593767721515&version=1.0&signType=MD5

拼接后签名前参数

appId=802020070300001&orderNo=102020070300001&time=1593767721515&version=1.0e338aeb855c94faca1c51a822740058e

请求信息

appId=802020070300001&orderNo=102020070300001&time=1593767721515&version=1.0&signType=MD5&sign=24f22a638358e27b2a4ae729eec33081

三、统一信息

3.1 公共请求参数

参数类型说明
appIdString商户级别,应用Id由芥舟提供
versionString接口版本: 默认传1.0
timeStringUTC毫秒时间戳
signTypeString

加密方式

MD5

signString签名信息

3.2 应答信息

3.2.1 统一应答参数

参数类型说明
successBool成功:true, 失败: false
codeString应答编码(具体参考:应答信息->应答编码)
messageString应答描叙信息
data泛型各接口有具体应答参数说明
  • 示例:
{
    "success": true,
    "code": "200",
    "message": "请求成功",
    "data": null
}

3.2.2 统一分页数据应答 data参数

参数类型说明
dataSourceList<泛型>每页数据
pageIndexInteger当前页码
pagesSizeInteger每页记录条数
pagesCountInteger总页数
recordsCountInteger总记录条数

3.2.3 应答编码

编码描述
200成功
110004appId不存在
110005签名错误

四、订单模块

4.1 代发订单拉取

  • 请求说明
请求项说明信息
正式请求路径{PRO_PATH}/apos.aps/api/DropShipping/QueryOrder
测试请求方式{TEST_PATH}/apos.aps/api/DropShipping/QueryOrder
请求方式POST
描述信息第三方平台商户维度向APOS拉取原始代发业务订单数据
  • 业务请求参数说明
请求位置Body
参数类型是否必填默认值说明
sessionKeyStringAPOS平台分发,与外部仓库1对1绑定
startTimeLong开始时间 (UTC 毫秒时间戳)
endTimeLong结束时间 (UTC 毫秒时间戳)
pageIndexInt1页码
pageSizeInt30分页大小,最大200
  • data应答参数说明

通用返回,请参考3.2.2 统一应答参数

参数描述类型长度说明
orderNo订单编号String64商户唯一
orderTime下单时间Long时间戳(毫秒)
orderPaidTime订单支付时间Long时间戳(毫秒)
orderAmount订单金额String32保留2位小数
orderTax订单税额String32保留2位小数
discountAmount订单总优惠String32保留2位小数
actualPayAmount实际支付金额String32保留2位小数
goodsAmount货品总价值String32保留2位小数
payNo支付单流水号String32支付单流水号
payType支付类型,支付宝或微信String32WeChat、AliPay
payCompany支付公司名称String第三方支付公司名称
payCompanyNo支付公司十位海关编码String支付公司海关备案编码
ebcCode电商企业代码String电商企业代码
ebcName电商企业名称String电商企业名称
ebpCode电商平台代码String电商平台代码
ebpName电商平台名称String电商平台名称
buyerId支付人购物平台IDString255支付人购物平台ID
buyerIdNumber支付人身份证号String255支付人身份证号
buyerName 支付人姓名String50支付人姓名
buyerMobile支付人手机号String支付人手机号
postAmount运费String255运费,保留小数点2位
receiverIdNumber收件人身份证号String255收件人身份证号
receiverName收件人姓名String255收件人姓名
receiverMobile收件人手机号String255收件人手机号
receiverCountry收件人国家String255收件人国家
receiverProvince收件人省String255收件人省
receiverCity收件人市String255收件人市
receiverDistrict收件人区String255收件人区
receiverAddress收件人详细地址String255收件人详细地址
receiverZip收件人邮编String255收件人邮编
note订单备注String255订单备注
goodsList订单商品信息明细List<Object>
└sku商品SKUString商品SKU
└barCode商品条码String商品条码
└goodsName商品名称String商品名称
└qty数量String数量
└salePrice商品原价String32保留4位小数
└dealPrice商品实际售价String32保留4位小数
└tax商品税费String32保留4位小数
└thirdSkuId第三方skuIdString32第三方sku
  • 参数示例

请求信息:

{
    "appId":"802020070300001",
    "time":"1642479037000",
    "version":"1.0",
    "sign":"24f22a638358e27b2a4ae729eec33081",
    "signType":"MD5",
    "sourceType":"1001",
    "sessionKey":"202cb962ac59075b964b07152d234b70",
    "startTime":1642479037000,
    "endTime":1642479697005,
    "pageIndex":1,
    "pageSize":200
}

响应:

{
    "data":{
        "dataSource":[
            {
                "orderNo":"854123658954412-1",
                "orderTimestamp":"1642479697005",
                "orderAmount":"31.00",
                "orderTax":"5.00",
                "discountAmount":"4.00",
                "actualPayAmount":"31.00",
                "goodsAmount":"20.00",
                "ebcCode":"525896358741256325",
                "ebcName":"测试公司",
                "ebpCode":"525896358741256325",
                "ebpName":"测试公司",
                "payNo":"55555555555555",
                "payCompany":"财付通支付科技有限公司",
                "payCompanyNo":"4403169D3W",
                "buyerIdNumber":"352227199805116235",
                "buyerName":"张三.",
                "buyerMobile":"18565214589",
                "postAmount":"10.00",
                "receiverIdNumber":"352227199805116235",
                "receiverName":"李四",
                "receiverMobile":"18565214589",
                "receiverCountry":"中国",
                "receiverProvince":"广东省",
                "receiverCity":"深圳市",
                "receiverDistrict":"宝安区",
                "receiverAddress":"新安街道新天地3栋555",
                "receiverZip":"",
                "goodsList":[
                    {
                        "sku":"8856558",
                        "barCode":"5555555",
                        "goodsName":"测试品",
                        "qty":"2.00",
                        "salePrice":"10.00",
                        "dealPrice":"8.00",
                        "thirdSkuId":"8856558"
                    }
                ]
            }
        ],
        "pageIndex":1,
        "pagesCount":1,
        "pageSize":10,
        "recordsCount":1
    },
    "success":true,
    "message":"操作成功",
    "code":"200"
}

4.2 清关状态回传

  • 请求说明
请求项说明信息
正式请求路径{PRO_PATH}/apos.aps/api/DropShipping/DeclareStatusNotify
测试请求方式{TEST_PATH}/apos.aps/api/DropShipping/DeclareStatusNotify
请求方式POST
描述信息第三方清关状态回传
  • 业务请求参数说明
请求位置Body
参数类型是否必填默认值说明
orderNoString订单编号
returnStatusInt申报状态:450:申报中; 800:放行;9999:失败;
returnInfoString申报信息
declareTimeLong申报时间(UTC毫秒时间戳)
expressNoString选填 (returnStatus=800必填)物流单号
expressChannelCodeString选填(returnStatus=800必填)物流企业海关备案编号
expressNameString选填 (returnStatus=800必填)物流名称
  • data应答参数说明

通用返回,请参考3.2.1 统一应答参数

  • 参数示例

请求信息:

{
    "appId":"802020070300001",
    "orderNo":"854123658954412-1",
    "time":"1637737175000",
    "returnStatus":450,
    "declareTime":1637737175000,
    "returnInfo":"申报中",
    "version":"1.0",
    "sign":"ed77d0038a0e684e2b1ba6ba3117adb8",
    "signType":"MD5"
}

响应:

{
    "success": true,
    "code": "200",
    "message": "请求成功",
    "data": null
}

4.3 物流发货

  • 请求说明
请求项说明信息
正式请求路径{PRO_PATH}/apos.aps/api/DropShipping/ExpressStatusNotify
测试请求方式{TEST_PATH}/apos.aps/api/DropShipping/ExpressStatusNotify
请求方式POST
描述信息第三方清关状态回传
  • 业务请求参数说明
请求位置Body
参数类型是否必填默认值说明
orderNoString订单编号
expressNoString物流单号
expressChannelCodeString物流企业海关备案编号
expressNameString物流名称
  • data应答参数说明

通用返回,请参考3.2.1 统一应答参数

  • 参数示例

请求信息:

{
    "appId":"802020070300001",
    "orderNo":"854123658954412-1",
    "time":"1637737175000",
    "expressNo":"SF885412569",
    "expressChannelCode":"1637737175000",
    "expressChannelName":"顺丰国际",
    "version":"1.0",
    "sign":"ed77d0038a0e684e2b1ba6ba3117adb8",
    "signType":"MD5"
}

响应:

{
    "success": true,
    "code": "200",
    "message": "请求成功",
    "data": null
}

4.4 订单状态变更推送

  • 请求说明
请求项说明信息
正式请求路径第三方提供,apos后台配置
测试请求方式第三方提供,apos后台配置
请求方式POST
描述信息订单状态支付,售后变更推送
  • 业务请求参数说明
请求位置Body
参数类型是否必填默认值说明
webhookNameString订阅名
webhookCodeString订阅类型Code:订单状态变更=1001
webhookUrlString推送地址
secretString秘钥
timeString推送时间格式:yyyy-MM-dd HH:mm:ss
databody核心推送内容体
└orderNoString订单号
└orderStateString订单状态:已支付=2,已签收=16,售后=32
  • data应答参数说明
参数描述类型说明
Bool是否成功Booltrue:成功
false:失败
  • 参数示例

请求信息:

{
    "webhookName":"订单状态订阅",
    "secret":"",
    "webhookCode":1001,
    "webhookUrl":"http://gateway.gvtfat.com/apos.notify/api/NotifyTest/NotifyTest",
    "time":"2022-02-23 11:17:33",
    "data":{
        "orderNo":"3417701946726043648",
        "orderState":2
    }
}

响应:

{
    "success": true,
    "message": "操作成功",
    "code": "200",
    "data": true
}

五、库存模块

5.1 仓库库存同步

  • 请求说明
请求项说明信息
正式请求路径{PRO_PATH}/apos.aps/api/DropShipping/StockNotify
测试请求方式{TEST_PATH}/apos.aps/api/DropShipping/StockNotify
请求方式POST
描述信息第三方仓库库存信息回传
  • 业务请求参数说明
请求位置Body
参数类型是否必填默认值说明
sessionKeyStringAPOS平台分发,与外部仓库1对1绑定
goodsListList<Object>
└skuString第三方skuId
└barcodeString选填商品条码
└goodsNameString商品名称
└qtyString可售库存数量
└thirdSkuIdString选填如果没有默认等于sku货号
  • data应答参数说明

通用返回,请参考3.2.1 统一应答参数

  • 参数示例

请求信息:

{
    "appId":"802020070300001",
    "time":"1637737175000",
    "version":"1.0",
    "sign":"ed77d0038a0e684e2b1ba6ba3117adb8",
    "signType":"MD5",
    "sourceType":"1001",
    "sessionKey":"hd77d0038a0e684e2b1ba6ba3127agsa",
    "goodsList":[
        {
            "sku":"8856558",
            "barcode":"5555555",
            "goodsName":"测试品",
            "qty":"2.00"
        }
    ]
}

响应:

{
    "success": true,
    "code": "200",
    "message": "请求成功",
    "data": null
}