配送开放平台接口文档
Delivery Open Platform API Documentation · 版本 v1.0
1. 请求协议说明
合作方调用配送开放平台 API,需按照以下步骤:
组装参数 → 生成签名 → 拼装 HTTP 请求 → 发起 HTTP 请求 → 得到 HTTP 响应 → 解析 JSON
| 规则 |
说明 |
| 传输协议 |
HTTPS(生产环境)/ HTTP(测试环境) |
| 参数格式 |
application/json |
| 字符编码 |
UTF-8 |
| 请求方式 |
POST |
💡 单位约定:金额单位为分,距离单位为米,重量单位为克。
2. 公共入参与签名算法
公共入参
| 参数名称 |
类型 |
必传 |
描述 |
appId |
String |
YES |
开发者 appId |
sourceId |
String |
YES |
商户ID |
sign |
String |
YES |
签名(MD5 32位大写) |
timestamp |
Long |
YES |
时间戳(毫秒级) |
data |
String |
视接口而定 |
业务入参(必须是 JSON 字符串) |
签名生成步骤
- 将所有公共参数按字典序排序,排除空值和
sign 字段
- 拼接为
参数1值1参数2值2... 格式(UTF-8 编码)
- 在拼接串前加上
AppSecret,得到待加密字符串
- 对待加密字符串进行 MD5 散列(32位大写),赋值给
sign
- 若存在
data 参数且不为空,其值以 JSON 字符串格式参与拼接(内部无需排序)
签名示例
// 原始参数(按字典序排列后拼接)
appId = xyh3fesgxb45hn
data = {"orderNo":"XY05612026858924221"}
sourceId = S5251541532
timestamp = 1685952266956
示例1:data 不为空
// 拼接串(AppSecret + 参数键值对)
String raw = "dfwsx8wf46wjym" // AppSecret
+ "appIdxyh3fesgxb45hn" // appId
+ "data{\"orderNo\":\"XY05612026858924221\"}" // data
+ "sourceIdS5251541532" // sourceId
+ "timestamp1685952266956"; // timestamp
示例2:data 为空
// 拼接串(AppSecret + 参数键值对)
String raw = "dfwsx8wf46wjym" // AppSecret
+ "appIdxyh3fesgxb45hn" // appId
+ "sourceIdS5251541532" // sourceId
+ "timestamp1685952266956"; // timestamp
// 生成签名
String sign = MD5(raw).toUpperCase();
// 结果示例1: "ACD2BAB4E2E7BF49118922B0E853ED74" (32位大写)
// 结果示例2: "02840D6E2DF711A4D752D90DED074C64" (32位大写)
3. 返回值规则
| 规则 |
说明 |
| 数据格式 |
application/json |
| 字符编码 |
UTF-8 |
| 数据结构 |
{"code": 状态码, "msg": 信息, "data": 数据} |
4. 询价接口
POST
/openapi/v1/delivery/preCallOrder
用于获取各配送商的预估配送费和距离信息,配合「下单」接口使用。
data 业务参数
| 参数 |
类型 |
必传 |
说明 |
outOrderNo |
String |
YES |
接入方平台订单号(唯一标识,每次需更换) |
cityName |
String |
YES |
城市名称(例:成都市),暂不支持区级 |
toReceiverName |
String |
YES |
收件人姓名 |
toMobile |
String |
YES |
收件人电话 |
toAddress |
String |
YES |
收件人地址(市区街道) |
toAddressDetail |
String |
NO |
收件人详细地址(楼栋门牌) |
toLat |
Double |
YES |
收件人纬度(高德坐标) |
toLng |
Double |
YES |
收件人经度(高德坐标) |
fromSenderName |
String |
YES |
发件人名称 |
fromMobile |
String |
YES |
发件人电话 |
fromAddress |
String |
YES |
发件人地址 |
fromLat |
Double |
YES |
发件人纬度(高德坐标) |
fromLng |
Double |
YES |
发件人经度(高德坐标) |
orderType |
Integer |
YES |
1:普通订单,2:预订单 |
productType |
Integer |
YES |
物品类型:1餐饮 2鲜花 3蛋糕 4商超 5医药 6母婴 7服饰 8数码 9其他 |
totalAmount |
Integer |
YES |
货品总金额(分) |
productCount |
Integer |
YES |
货品件数 |
weight |
Integer |
YES |
重量(克),必须大于 0 |
productList |
Array |
YES |
商品列表,含 {"name":"麻辣香锅","count":"1","price":"1000"} |
source |
String |
YES |
来源平台编码(见渠道枚举) |
callbackUrl |
String |
NO |
回调地址 |
subscribeTime |
Long |
NO |
预约送达时间戳 |
sourceOrderNo |
String |
NO |
来源订单号 |
orderNumber |
String |
NO |
取货号 |
orderTime |
String |
NO |
订单时间(如:2025-03-18 15:21:00) |
orderRemark |
String |
NO |
订单备注 |
fiveRate |
Integer |
NO |
天气等级:0正常 1轻微恶劣 2恶劣 3极恶劣 4罕见恶劣 |
orderDistance |
Integer |
NO |
订单距离(米) |
返回字段说明
| 返回字段 |
类型 |
说明 |
orderNo |
String |
平台配送订单号 |
deliveryCode |
Integer |
配送商编号 |
deliveryName |
Integer |
配送商 |
price |
Integer |
实际配送费(分)= 配送费+保价+小费+其他-优惠 |
distance |
Integer |
配送距离(米) |
成功响应
{
"code": 200,
"msg": "成功",
"succeed": true,
"data": {
"orderNo": "XY022705832278396038",
"deliveryList": [
{
"deliveryCode": "1",
"deliveryName": "顺丰同城",
"price": 420,
"distance": 1200
},
{
"deliveryCode": "2",
"deliveryName": "蜂鸟跑腿",
"price": 610,
"distance": 1200
}
]
}
}
5. 下单接口
ℹ️ 异步下单接口,需先调用询价接口。下单失败会通过回调推送取消状态。
POST
/openapi/v1/delivery/pushOrder
data 业务参数
| 参数 |
类型 |
必传 |
说明 |
orderNo |
String |
YES* |
平台配送订单号(询价返回) |
outOrderNo |
String |
YES* |
接入方订单号 |
deliveryCodeList |
Array |
NO |
呼叫配送商编码组,为空则呼叫询价接口所有配送商 |
orderNumber |
String |
NO |
取货号 |
source |
String |
NO |
来源平台编码(见渠道枚举) |
toReceiverName |
String |
NO |
收件人姓名 |
toMobile |
String |
NO |
收件人电话 |
toAddress |
String |
NO |
收件人地址 |
toAddressDetail |
String |
NO |
收件人详细地址 |
orderRemark |
String |
NO |
订单备注 |
6. 小费接口
POST
/openapi/v1/delivery/additionFee
⚠️ 仅在下单成功后可调用,tipFee 单位为分,必须大于 0。
data 业务参数
| 参数 |
类型 |
必传 |
说明 |
orderNo |
String |
YES* |
平台配送订单号 |
outOrderNo |
String |
YES* |
接入方订单号 |
businessSn |
Long |
YES |
业务流水号(幂等校验) |
tipFee |
Integer |
YES |
小费金额(分),大于 0 |
7. 取消接口
POST
/openapi/v1/delivery/cancelOrder
data 业务参数
| 参数 |
类型 |
必传 |
说明 |
orderNo |
String |
YES* |
平台配送订单号 |
outOrderNo |
String |
YES* |
接入方订单号 |
cancelType |
String |
YES |
1商家取消 2系统取消 4其他平台接单取消 20其他(自定义描述) |
cancelMessage |
String |
NO |
取消原因 |
返回字段说明
| 返回字段 |
类型 |
说明 |
punishAmount |
Integer |
违约金(分) |
8. 配送详情接口
POST
/openapi/v1/delivery/info
查询订单完整配送状态信息,包括骑手信息、时间节点、费用明细等。
data 业务参数
| 参数 |
类型 |
必传 |
说明 |
orderNo |
String |
YES* |
平台配送订单号 |
outOrderNo |
String |
YES* |
接入方订单号 |
返回字段说明
| 返回字段 |
类型 |
说明 |
status |
Integer |
状态:20支付成功 30骑手抢单 35骑手到店 40配送中 50已完成 60已取消 70配送失败 |
orderNo |
String |
平台配送订单号 |
outOrderNo |
String |
接入方订单号 |
deliveryCode |
Integer |
配送商编号 |
deliveryName |
Integer |
配送商 |
distance |
Integer |
配送距离(米) |
price |
Integer |
实际配送费(分)= 配送费+保价+小费+其他-优惠 |
tip |
Integer |
小费金额 |
pickUpPhotos |
Array |
取件照片 |
finishPhotos |
Array |
妥投照片 |
courierName |
String |
骑手姓名 |
courierMobile |
String |
骑手电话 |
cancelType |
String |
取消原因码 |
cancelMessage |
String |
取消原因 |
punishAmount |
Integer |
违约金(分) |
takeOrderTime |
String |
骑手抢单时间 |
arriveTime |
String |
骑手到店时间 |
pickUpTime |
String |
骑手取货时间 |
finalTime |
String |
结束时间 |
9. 骑士位置接口
POST
/openapi/v1/delivery/rider
data 业务参数
| 参数 |
类型 |
必传 |
说明 |
orderNo |
String |
YES* |
平台配送订单号 |
outOrderNo |
String |
YES* |
接入方订单号 |
返回字段说明
| 返回字段 |
类型 |
说明 |
lat |
String |
纬度 |
lng |
String |
经度 |
name |
String |
骑手姓名 |
mobile |
String |
骑手电话 |
time |
Long |
位置更新时间戳 |
10. 余额查询接口
POST
/openapi/v1/wallet/getBalance
返回字段说明
| 返回字段 |
类型 |
说明 |
balance |
Integer |
余额(分) |
11. 回调通知接口
ℹ️ 当配送状态变化时,平台将向您的 callbackUrl 推送通知。
请返回 {"code":200,"msg":"ok"} 表示接收成功。
失败重试策略:10秒 → 30秒 → 1分钟(共3次)
回调 data 核心字段
| 参数 |
类型 |
说明 |
type |
Integer |
1状态回调 2异常上报 3骑手变更回调 |
status |
Integer |
状态:20支付成功 30骑手抢单 35骑手到店 40配送中 50已完成 60已取消 70配送失败 |
orderNo |
String |
平台配送订单号 |
outOrderNo |
String |
接入方订单号 |
deliveryCode |
Integer |
配送商编号 |
deliveryName |
Integer |
配送商 |
price |
Integer |
实际配送费(分)= 配送费+保价+小费+其他-优惠 |
pickUpPhotos |
Array |
取件照片 |
finishPhotos |
Array |
妥投照片 |
courierName |
String |
骑手姓名 |
courierMobile |
String |
骑手电话 |
cancelType |
String |
取消原因码 |
cancelMessage |
String |
取消原因 |
punishAmount |
Integer |
违约金(分) |
msg |
String |
异常上报信息 |
time |
String |
事件时间 |
1. 状态码
2 渠道枚举
| 编码 |
渠道名称 |
1 |
抖音外卖 |
2 |
饿了么 |
3 |
美团闪购 |
4 |
美团外卖 |
5 |
饿了么零售 |
6 |
抖音小时达 |
7 |
京东到家 |
8 |
京东秒送 |
10 |
快手外卖 |
11 |
微信 |
12 |
淘宝闪购 |
20 |
私域订单 |
配送接口文档 · 仅供对接使用 · 请勿外传