# 线下物流发货
接口地址: http://www.damaijia168.com/vv/external/v1/requestTbErp/taobao-logistics-offline-send
请求方式: POST
传参方式: JSON
返回格式: JSON
# 请求头参数
| 参数 | 类型 | 必选 | 值 | 示例 |
|---|---|---|---|---|
| Authorization | string | 是 | 授权 access_token | 1798c6aadec33d1bc2f5b707f1049aefexxxx |
# 请求参数
| 参数 | 类型 | 必选 | 描述 |
|---|---|---|---|
| shop_id | string | 是 | 店铺 ID |
| params | object | 是 | 参数 |
| sub_tid | number[] | 是 | 需要拆单发货的子订单集合,针对的是一笔交易下有多个子订单需要分开发货的场景;1 次可传人多个子订单号,子订单间用逗号隔开;为空表示不做拆单发货。 |
| tid | number | 是 | 淘宝交易 i_d |
| is_split | number | 是 | 表明是否是拆单,默认值 0,1 表示拆单 |
| out_sid | string | 是 | 运单号。具体一个物流公司的真实运单号码。淘宝官方物流会校验,请谨慎传入; |
| company_code | string | 是 | 物流公司代码。如"POST"就代表中国邮政,"ZJS"就代表宅急送。 |
| sender_id | number | 是 | 卖家联系人地址库 i_d,可以通过 taobao.logistics.address.search 接口查询到地址库 i_d。如果为空,取的卖家的默认取货地址 |
| cancel_id | number | 是 | 卖家联系人地址库 i_d,可以通过 taobao.logistics.address.search 接口查询到地址库 i_d。 如果为空,取的卖家的默认退货地址 |
| feature | string | 是 | feature 参数格式 范例: ident_code=tid1:识别码 1,识别码 2 |
| seller_ip | string | 是 | 商家的 i_p 地址 |
| edition | string | 否 | 版本 默认:1(不传默认为1) 1:1.0,2:2.0 |
# 请求示例
{
"shop_id":173926031,
"params":{
"sub_tid": "1,2,3",
"shop_id": "123456789",
"tid": 123,
"is_split": 0,
"out_sid": "123456789",
"company_code": "POST",
"sender_id": 123456,
"cancel_id": 123456,
"feature": "ident_code=tid:aaa,bbb;machine_code=tid2:aaa;",
"seller_ip": "192.168.1.10"
}
}
# 请求代码示例
cURL请求代码示例
curl --location --request POST 'http://www.damaijia168.com/vv/external/v1/requestTbErp/taobao-logistics-offline-send' --header 'Authorization: 1798c6aadec33d1bc2f5b707f1049aefexxxx' --header 'Content-Type: application/json' --data-raw '{
"subTid": "1,2,3",
"shop_id": "123456789",
"tid": 123,
"isSplit": 0,
"outSid": "123456789",
"companyCode": "POST",
"senderId": 123456,
"cancelId": 123456,
"feature": "identCode=tid:aaa,bbb;machineCode=tid2:aaa;",
"seller_ip": "192.168.1.10"
}'
PHP请求代码示例
<?php
$curl = curl_init();
curlSetopt_array($curl, array(
CURLOPT_URL => 'http://www.damaijia168.com/vv/external/v1/requestTbErp/taobao-logistics-offline-send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"subTid": "1,2,3",
"shop_id": "123456789",
"tid": 123,
"isSplit": 0,
"outSid": "123456789",
"companyCode": "POST",
"senderId": 123456,
"cancelId": 123456,
"feature": "identCode=tid:aaa,bbb;machineCode=tid2:aaa;",
"seller_ip": "192.168.1.10"
}',
CURLOPT_HTTPHEADER => array(
'Authorization: 1798c6aadec33d1bc2f5b707f1049aefexxxx',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
JAVA请求代码示例
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"subTid\": \"1,2,3\",\r\n \"shop_id\": \"123456789\",\r\n \"tid\": 123,\r\n \"isSplit\": 0,\r\n \"outSid\": \"123456789\",\r\n \"companyCode\": \"POST\",\r\n \"senderId\": 123456,\r\n \"cancelId\": 123456,\r\n \"feature\": \"identCode=tid:aaa,bbb;machineCode=tid2:aaa;\",\r\n \"seller_ip\": \"192.168.1.10\"\r\n}");
Request request = new Request.Builder()
.url("http://www.damaijia168.com/vv/external/v1/requestTbErp/taobao-logistics-offline-send")
.method("POST", body)
.addHeader("Authorization", "1798c6aadec33d1bc2f5b707f1049aefexxxx")
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
Python请求代码示例
import requests
import json
url = "http://www.damaijia168.com/vv/external/v1/requestTbErp/taobao-logistics-offline-send"
payload = json.dumps({
"subTid": "1,2,3",
"shopId": "5********8",
"tid": ********,
"isSplit": 1,
"outSid": "1830********12227",
"companyCode": "POST",
"senderId": 123456,
"cancelId": 123456,
"feature": "identCode=tid:aaa,bbb;machineCode=tid2:aaa;",
"sellerIp": "192.168.1.10"
})
headers = {
'Authorization': 'd964d7b9c4365a538d9b12661f********',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
# 响应参数
| 参数 | 类型 | 描述 |
|---|---|---|
| data | object | 返回数据 |
| ----is_success | Boolean | 返回发货是否成功。 |
| ----deduct_money | int | 消耗点券 |
| status | int | 状态码,0为成功 |
# 返回数据
{
"data": {
"is_success": true,
"deduct_money": 4
},
"status": 0
}
# 错误码
| 状态码(status) | 错误信息 | 解决方案 |
|---|---|---|
| 132 | 请求格式必须为JSON | 修改请求参数格式为json |
| 422 | 参数列表不合法,在err中会给出提示 | 根据提示做相应修改 |
| 200 | 认证失败 | 请确保请求头里的Authorization存在或者未过期 |
| 422 | 物流订单不存在 | 调用发货接口前要先判断 tid 是不是自己的 tid或者说tid 是否存在,最好用搜索出来的 tid 列表里面的数据传入。 |
| 422 | 没有权限进行发货 | 在发货前要判断好订单的状态,只有交易存在、属于自己、并且是等待卖家发货的才能发,其余的状态不能调用这个接口。 |
| 422 | 订单状态不对 | 1.遇到 isv 开头的错误不要在程序重试 2.建议在发货前先调用交易 API 如:taobao.trade.fullinfo.get 来查询这个订单的状态,根据订单状态再做相应的处理,避免状态为已发货订单进行重复发货 |
| 422 | 没有选择物流公司 | 对物流公司(companyCode)做好校验,没有选择 companyCode 的不允许其发货。 |
| 422 | 运单号为空 | 对运单号(out_sid)进行校验,没有传入 out_sid 不允许其发货。 |
| 422 | 运单号不符合规则或已经被使用 | 每个物流公司都有特定的运单号规则,参照该运单号规则在前端对运单号是否符合对应的规则进行校验,不符合规则的不允许其发货。 |
| 422 | 参数无效,格式不对、非法值、越界等 | 请校验参数后重试 |
| 422 | 参数为空 | 必填参数为空,如 tid 为空,请确保必选参数不为空 |
| 422 | 地址库不存在或该地址库不属于当前用户 | 可以通过此接口查询地址库 taobao.logistics.address.search |
| 422 | 已生成发货单 | 已经生成发货单的订单不能发货 |
| 422 | 物流公司名称过长 | 物流公司名称过长,长度请控制在20 个字符以内 |
| 422 | 该物流公司不支持自己联系 | 通过 taobao.logistics.companies.get 查询支持自已联系的物流公司 |
| 422 | 该交易状态不正确,不能发货 | 建议在发货前先调用交易 API 如:taobao.trade.fullinfo.get 来查询这个订单的状态,根据订单状态再做相应的处理,避免状态为已发货订单进行重复发货 |
| 422 | 对不起,您尚未成功订购 E 速宝物流服务 | 请订购E速宝服务 |
| 422 | 对不起,该订单超出了 E 速宝的服务范围,请联系小二处理 | 请检查收货地址和发货地址 |
| 422 | top 接口不允许对拆单订单操作 | |
| 422 | 运单号被识别为假,无法发货 | 输入正确的运单号 |
| 422 | 您填写的运单号已经过期无效,不允许用此物流运单号发货 | 输入正确的运单号 |
| 422 | 您此笔交易订单付款时间晚于快递公司揽收时间,此物流运单号不能使用 | 输入正确的运单号 |
| 422 | 您此笔交易订单收货人地址信息与快递公司签收地址信息不匹配,此物流运单号不能使用 | 输入正确的运单号 |
| 422 | 运单号已被使用,当前订单非真, 此物流单号不能使用 | 输入正确的运单号 |
| 422 | 您填写的运单号已被使用,不允许用此物流运单号发货 | 输入正确的运单号 |
| 422 | 您的收货人信息与发货人信息一致,不允许发货 | 请确认收件人和发货人信息是否相同 |
| 422 | 拆单标记 和子订单列表两者必须都填或者都不填 | |
| 422 | 子订单交易号为空 | 当传递 isSplit 为 1 时,必须传递该订单下的子订单交易号 |
| 422 | 订单已拆单,必须传入子交易号列表 | 这个是已经被拆单的,操作这个订单发货时,必须带有子订单列表 |
| 422 | 订单已拆单,请走拆单逻辑 | 订单已拆单,必须传入 issplit 和子订单列表 |
| 422 | 当前操作的订单是拆单订单,拆单标记和子订单列表都必须传递 | 在操作拆单订单时,传递拆单标记和子订单列表 |
| 422 | 订单已经被拆单,isSplit 必须是 1 | 订单被拆单,isSplit 等于 1 |
| 422 | 接入拆单异常 | 拆单逻辑未知错误,请确认发货参数无异常后重试 |
| 422 | 未查到物流订单 | 请确认参数后重试 |
| 422 | 当前操作的订单不是拆单订单,拆单标记和子订单列表都不能带入 | 不带入拆单标记和子订单列表 |
| 422 | 子订单号没有精确匹配 | 传入的子订单交易号必须完全匹配物流包裹中的子订单 |
| 422 | 输入的用户 Id 或交易订单号不正确,未查到交易订单 | 检查用户 ID 和交易订单号后重试 |
| 422 | 非拆单订单的物流订单数不等于 1 | 请联系淘宝物流开发 |
| 422 | 物流订单不存在 | sessionkey 对应的 nick 和订单(tid) 对应 nick 不一致导致报错,调用发货接口前要先判断 tid 是不是属于卖家自身的 tid 。 |
| 422 | 拆单校验未通过 | 请确认相关参数正确后重试 |
| 422 | 发货类型不匹配。如虚拟商品订单、家装类订单(仅能通过卖家后台页面发货),如使用该接口发货,会出现这个报错。 | 报错后禁止重试,并提示用户通过虚拟发货接口或到页面操作发货 |
| 422 | feature 参数格式不对。 | 请确认feature 参数正确后重试。 |
| 422 | 系统异常 | 1、先检查是参数是否正确。如 companyCode 传入了 out_sid(运单号);订单号(tid)和 sessionkey 对应的不是同一个卖家等 。 2、若参数无误,报错后可稍等后重试 1 次 。 |
| 422 | 非法的 nick,无权查询 | 入参时 tid 和 sessionkey 对应的卖家 nick 不是同一个导致, 确认一致后重试 |
| 422 | 发货异常,请稍等后重试 | 请检查参数正确后重试 |
| 422 | 物流公司不存在或被禁用 | 一般是发货时,非淘宝合作物流公司,companyCode 传入 other 等英文字符导致 。发货时如非淘宝合作物流公司,请直接输入物流公司名称,不能填 other |
| 422 | 发货使用物流公司不支持 | 部分物流公司被清退导致,更换其它物流公司发货 |
| 422 | 物流订单状态不为新建状态,无需发货处理 | 发货时检查订单状态,已发货订单不要重复发货,仅对待发货的订单发货。 |
| 422 | 物流的订单状态为关闭状态,无需发货 | 发货时检查订单状态,非等待发货状态,无需发货 |
| 422 | 您的订单无法通过此接口进行发货操作 | 请联系客服进行咨询 |