主题
订单接口
创建订单
- 接口地址:
/openapi/order/createOrder - 请求方式:
POST - 说明:创建新订单,成功后返回具语运单号。
请求参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
pushType | String | 否 | 推送类型(历史兼容字段,创建接口可不传) |
sourceNo | String | 条件必填 | 第三方来源单号;与 cusSelfOid 二选一,优先取 sourceNo 作为业务单号 |
cusSelfOid | String | 条件必填 | 客户自有单号;与 sourceNo 二选一 |
companyWorkNo | String | 是 | 公司会员号 |
sendPCompany | String | 否 | 发货公司名称 |
sendPName | String | 建议 | 发货人姓名 |
sendPPhone | String | 建议 | 发货人手机 |
sendPTel | String | 否 | 发货人电话 |
sendSiteAddressText | String | 建议 | 发货地址省市区,逗号分隔(如:广东省,广州市,天河区) |
sendSiteAddressDetails | String | 建议 | 发货完整地址(含门牌) |
recePCompany | String | 否 | 收货公司名称 |
recePName | String | 建议 | 收货人姓名 |
recePPhone | String | 建议 | 收货人手机 |
recePTel | String | 否 | 收货人电话 |
receSiteAddressText | String | 是 | 收货地址省市区,逗号分隔;用于可配送区域校验 |
receSiteAddressDetails | String | 建议 | 收货完整地址(含门牌) |
deliveryType | String | 否 | 交货方式文本(服务端会尝试映射字典值) |
distributionType | String | 否 | 配送方式 1、客户自提 2、送货到楼下 3、送货到家 4、送货到家并安装 |
izLift | String | 否 | 是否有电梯 |
floor | Integer | 否 | 楼层数 |
sendRemark | String | 否 | 发货备注 |
transportType | String | 否 | 运输方式 |
receipyType | String | 否 | 回单方式 |
collectionGoodsMoney | BigDecimal | 否 | 代收货款 |
insuredMoney | BigDecimal | 否 | 保价金额 |
writeOffOid | String | 否 | 核销单号 |
logisticsQuotation | String | 否 | 物流报价 |
货物列表 jyOnlieOrderGood(兼容别名字段 orderGoodList):
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
goodsDesc | String | 否 | 货物名称 |
goodsDetail | String | 否 | 商品详细名称 |
cargoPack | String | 否 | 货物包装 |
goodsModel | String | 否 | 商品型号 |
piece | Integer | 否 | 套数 |
suit | Integer | 否 | 件数 |
installPrice | Integer | 否 | 安装件数 |
weight | Float | 否 | 重量(kg) |
volume | Float | 否 | 体积(m³) |
goodsPhoto | String | 否 | 货物图片 |
color | String | 否 | 颜色 |
lenth | Double | 否 | 长度(字段名历史拼写,保持 lenth) |
width | Double | 否 | 宽度 |
height | Double | 否 | 高度 |
dimension | String | 否 | 尺寸文本 |
请求示例
json
{
"cusSelfOid": "ORDER-001",
"sendPName": "发货人A",
"sendPPhone": "13800000000",
"sendSiteAddressText": "省,市,区",
"sendSiteAddressDetails": "详细地址A",
"recePName": "收货人B",
"recePPhone": "13900000000",
"receSiteAddressText": "省,市,区",
"receSiteAddressDetails": "详细地址B",
"jyOnlieOrderGood": [
{ "goodsDesc": "货物示例", "piece": 1 }
]
}响应示例
json
{
"code": 200,
"message": "success",
"result": "JY225051200001"
}| 字段 | 类型 | 说明 |
|---|---|---|
code | Integer | 业务状态码,200 表示成功 |
message | String | 返回消息 |
result | String | 具语运单号 |
修改订单
- 接口地址:
/openapi/order/updateOrder - 请求方式:
POST - 说明:按具语运单号更新已有订单。请求体与「创建订单」共用同一套字段定义(
OpenOrderDeliverDTO),但**必填规则、写入语义、可修改范围 **不同。 - 可修改状态:仅 待揽收(
0)或 已取消(2)的订单可修改;原单为已取消时,修改成功后会恢复为待揽收。
与创建订单的核心差异
| 维度 | 创建订单 | 修改订单 |
|---|---|---|
| 定位字段 | 无 | jyWaybillNo 必填 |
companyWorkNo | 必填 | 可选;不传沿用原单公司,传入则切换并重新校验权限 |
sourceNo | 必填(当前网关校验) | 可选;传入时作为附加匹配条件 |
receSiteAddressText | 建议传(用于区域校验) | 可选;不传沿用原单收货区域,传入则重新校验可配送 |
| 主表业务字段 | 按入参写入 | 未传 / 传 null 保留原值;传了具体值则更新 |
jyOnlieOrderGood | 可选 | 整表替换:每次修改都会删旧货物再写入;不传、null 或 [] 会清空货物 |
distributionType | 不传默认 1 | 不传时在服务端仍会按默认 1 处理,可能覆盖原值,建议显式传入 |
| 地址明细 | 按入参 | sendSiteAddressDetails / receSiteAddressDetails 不传时会写成空串,可能清空原明细 |
对接建议
生产环境修改订单时,建议按「创建订单成功时的全量字段」组包提交,尤其注意 jyOnlieOrderGood 必须带完整货物列表,避免误清空。
不可修改字段
以下字段不会随修改接口变更(由系统保留或单独处理):
| 字段 / 概念 | 说明 |
|---|---|
jyWaybillNo(sn) | 仅用于定位,不会被改写 |
| 订单状态 | 非取消态保持不变;原单为已取消时修改后恢复为待揽收 |
| 创建信息 | createBy、createTime 保留 |
| 商家归属 | deliveryId(商家 ID)保留 |
| 码码高单号 | mmgOrderNo 保留 |
| 订单来源 | orderSource 由当前 AccessKey 决定,不接受请求体覆盖 |
请求参数
与创建订单字段名、类型完全一致;下表重点说明修改时的必填与写入规则。
| 参数名 | 类型 | 修改时必填 | 写入规则 | 说明 |
|---|---|---|---|---|
jyWaybillNo | String | 是 | — | 具语运单号,定位待修改订单 |
pushType | String | 否 | 保留原值 | 历史兼容字段,可不传 |
sourceNo | String | 否 | 有值则更新 | 第三方来源单号;传入时须与原单 cusSelfOid 一致,否则报未找到订单 |
cusSelfOid | String | 否 | 有值则更新 | 客户自有单号;与 sourceNo 同时存在时,业务单号优先取 sourceNo |
companyWorkNo | String | 否 | 有值则切换公司 | 不传沿用原单公司;传入时按新公司做权限与区域校验 |
sendPCompany | String | 否 | 有值则更新 | 发货公司名称 |
sendPName | String | 否 | 有值则更新 | 发货人姓名 |
sendPPhone | String | 否 | 有值则更新 | 发货人手机 |
sendPTel | String | 否 | 有值则更新 | 发货人电话 |
sendSiteAddressText | String | 否 | 有值则更新 | 发货地址省市区,逗号分隔 |
sendSiteAddressDetails | String | 否 | 注意 | 不传会写成空串,可能清空原发货明细 |
recePCompany | String | 否 | 有值则更新 | 收货公司名称 |
recePName | String | 否 | 有值则更新 | 收货人姓名 |
recePPhone | String | 否 | 有值则更新 | 收货人手机 |
recePTel | String | 否 | 有值则更新 | 收货人电话 |
receSiteAddressText | String | 否 | 有值则更新并校验 | 收货省市区;传入时触发可配送区域校验,不传沿用原单区域 |
receSiteAddressDetails | String | 否 | 注意 | 不传会写成空串,可能清空原收货明细 |
deliveryType | String | 否 | 有值则更新 | 交货方式文本(服务端映射字典) |
distributionType | String | 否 | 注意 | 不传时服务端默认 1,建议显式传入 |
izLift | String | 否 | 有值则更新 | 是否有电梯 |
floor | Integer | 否 | 有值则更新 | 楼层数 |
sendRemark | String | 否 | 有值则更新 | 发货备注 |
transportType | String | 否 | 有值则更新 | 运输方式:整车 / 汽运 / 空运 / 铁运(文本映射为字典值) |
receipyType | String | 否 | 有值则更新 | 回单方式 |
collectionGoodsMoney | BigDecimal | 否 | 有值则更新 | 代收货款 |
insuredMoney | BigDecimal | 否 | 有值则更新 | 保价金额 |
writeOffOid | String | 否 | 有值则更新 | 核销单号 |
logisticsQuotation | String | 否 | 忽略 | 当前版本仅接收,未落库 |
货物列表 jyOnlieOrderGood(兼容别名 orderGoodList)——整表替换,每次必传完整列表:
| 参数名 | 类型 | 修改时必填 | 写入规则 | 说明 |
|---|---|---|---|---|
goodsDesc | String | 否 | 随列表整体替换 | 货物名称 |
goodsDetail | String | 否 | 随列表整体替换 | 商品详细名称 |
cargoPack | String | 否 | 随列表整体替换 | 货物包装 |
goodsModel | String | 否 | 随列表整体替换 | 商品型号 |
piece | Integer | 否 | 随列表整体替换 | 套数 |
suit | Integer | 否 | 随列表整体替换 | 件数 |
installPrice | Integer | 否 | 随列表整体替换 | 安装件数 |
weight | Float | 否 | 随列表整体替换 | 重量(kg) |
volume | Float | 否 | 随列表整体替换 | 体积(m³) |
goodsPhoto | String | 否 | 随列表整体替换 | 货物图片 |
color | String | 否 | 随列表整体替换 | 颜色 |
lenth | Double | 否 | 随列表整体替换 | 长度(字段名历史拼写,保持 lenth) |
width | Double | 否 | 随列表整体替换 | 宽度 |
height | Double | 否 | 随列表整体替换 | 高度 |
dimension | String | 否 | 随列表整体替换 | 尺寸文本 |
常见错误
| 场景 | message 示例 |
|---|---|
未传 jyWaybillNo | 请求体缺少必填字段 |
| 运单不存在或不属于本渠道 | 未找到可操作的订单 |
| 运单非待揽收/已取消 | 当前订单状态不允许此操作 |
传入的 companyWorkNo 无效 | 公司相关错误(如无对接权限) |
| 传入的收货区域不可配送 | 区域不支持类错误 |
请求示例
json
{
"jyWaybillNo": "JY225051200001",
"companyWorkNo": "101121",
"cusSelfOid": "ORDER-001",
"sendPName": "发货人A",
"sendPPhone": "13800000000",
"sendSiteAddressText": "广东省,深圳市,南山区",
"sendSiteAddressDetails": "科技园路1号",
"recePName": "收货人B-新",
"recePPhone": "13900011111",
"receSiteAddressText": "上海市,上海市,浦东新区",
"receSiteAddressDetails": "世纪大道200号",
"jyOnlieOrderGood": [
{ "goodsDesc": "电子配件", "piece": 1 }
]
}响应示例
json
{
"code": 200,
"message": "success",
"result": "JY225051200001"
}| 字段 | 类型 | 说明 |
|---|---|---|
code | Integer | 业务状态码,200 表示成功 |
message | String | 返回消息 |
result | String | 修改后的具语运单号(与请求中的 jyWaybillNo 一致) |
取消订单
- 接口地址:
/openapi/order/orderCancel - 请求方式:
POST - 说明:按运单号取消订单。
请求参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
jyWaybillNo | String | 是 | 具语运单号 |
请求示例
json
{
"jyWaybillNo": "JY225051200001"
}响应示例
json
{
"code": 200,
"message": "success",
"result": "取消成功"
}| 字段 | 类型 | 说明 |
|---|---|---|
code | Integer | 业务状态码,200 表示成功 |
message | String | 返回消息 |
result | String | 固定返回 取消成功 |
物流取消
- 接口地址:
/openapi/order/logisticsCancel - 请求方式:
POST - 说明:物流公司取消待揽收订单,将订单状态由「待揽收」(
0)更新为「物流取消」(2)。仅当订单当前为待揽收时可操作。
与「取消订单」的区别
「取消订单」(/openapi/order/orderCancel)为商家侧取消;「物流取消」为物流侧在揽收前取消发货,状态流转不同。
请求参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
jyWaybillNo | String | 是 | 具语运单号 |
请求示例
json
{
"jyWaybillNo": "JY225051200001"
}响应示例
json
{
"code": 200,
"message": "success",
"result": "取消发货成功"
}| 字段 | 类型 | 说明 |
|---|---|---|
code | Integer | 业务状态码,200 表示成功 |
message | String | 返回消息 |
result | String | 固定返回 取消发货成功 |
常见错误
| 场景 | message 示例 |
|---|---|
| 订单不存在 | 未找到可操作的订单 |
| 订单非待揽收状态 | 当前订单状态不允许此操作 |
| 无对接权限 | 该公司暂未开放对接权限 |
绑定物流运单
- 接口地址:
/openapi/order/bindWaybill - 请求方式:
POST - 说明:物流公司回传运单号,绑定物流运单并同步轨迹;订单状态由「待揽收」(
0)更新为「已揽收」(1)。绑定成功后会触发轨迹同步等后续处理。
请求参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
jyWaybillNo | String | 是 | 具语运单号 |
waybillNo | String | 是 | 物流运单号 |
companyId | String | 是 | 物流公司 ID(sys_config 主键) |
openDateTime | String | 是 | 开单时间,格式 yyyy-MM-dd HH:mm:ss |
请求示例
json
{
"jyWaybillNo": "JY225051200001",
"waybillNo": "SF1234567890",
"companyId": "101121",
"openDateTime": "2025-06-25 10:30:00"
}响应示例
json
{
"code": 200,
"message": "success",
"result": "发货成功"
}| 字段 | 类型 | 说明 |
|---|---|---|
code | Integer | 业务状态码,200 表示成功 |
message | String | 返回消息 |
result | String | 固定返回 发货成功 |
常见错误
| 场景 | message 示例 |
|---|---|
| 必填字段缺失 | 请求体缺少必填字段 |
| 开单时间格式错误 | 开单时间格式错误,要求 yyyy-MM-dd HH:mm:ss |
| 订单不存在 | 未找到可操作的订单 |
| 订单已绑定运单或非待揽收 | 当前订单状态不允许此操作 |
| 无对接权限 | 该公司暂未开放对接权限 |
可发货公司列表
- 接口地址:
/openapi/order/getCompanyList - 请求方式:
POST - 说明:根据目的地省市区查询可配送至该地区的物流公司列表;不传目的地时返回全部启用状态的物流公司。
请求参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
destinationAddress | String | 否 | 目的地省文本,逗号分隔(如 福建省 或 广东省);不传或为空时返回全部公司 |
请求示例
json
{
"destinationAddress": "福建省"
}响应示例
json
{
"code": 200,
"message": "",
"result": [
{
"shortName": "具语物流",
"companyNameZh": "具语物流有限公司",
"isExamine": 1,
"companyAddress": "福建省福州市鼓楼区XX路100号",
"areaDesc": "覆盖全省",
"busiLinkman": "张三",
"busiHotline": "0591-88888888",
"sort": 1,
"companyLogo": "https://example.com/logo.png",
"areaName": "福建省",
"authentication": 1,
"legalPerson": "李四",
"companyWorkNo": "101121"
}
]
}响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
shortName | String | 公司简称 |
companyNameZh | String | 公司中文名称 |
isExamine | Integer | 是否已审核 |
companyAddress | String | 公司地址 |
areaDesc | String | 区域描述 |
busiLinkman | String | 业务联系人 |
busiHotline | String | 业务热线 |
sort | Integer | 排序值 |
companyLogo | String | 公司 Logo URL |
areaName | String | 覆盖区域名称(逗号拼接) |
authentication | Integer | 是否已认证:1=已认证,0=未认证 |
legalPerson | String | 法人 |
companyWorkNo | String | 物流公司会员号 |