Skip to content

价格管理 ​

PriceManagementController 对外提供两个接口:

接口请求方式地址用途
物流品类定位POST/openapi/priceManagement/categories/resolve定位主品,返回候选及配套品/附加品
物流报价计算POST/openapi/priceManagement/calculate使用确认后的品类 ID 和货物参数计算报价

推荐先定位品类,再调用物流报价。两个接口均遵循基础约定中的 AK/SK HMAC-SHA256 验签规则。

物流品类定位 ​

请求信息 ​

http
POST /openapi/priceManagement/categories/resolve
Content-Type: application/json

请求参数 ​

字段类型必填说明
queryString条件必填商品大类、主品名称、品类编码或配套/附加品名称,例如“床类”“实木床”“01-204”“床头柜”
mainCategoryIdString条件必填已确认的主品 ID,取自上一轮的 mainProduct.categoryId 或 mainProducts[].categoryId

请求规则:

  • query 和 mainCategoryId 至少传一个。
  • 两者同时传入时,优先使用 mainCategoryId。
  • 首次查询传 query;用户选定候选后,仍调用本接口并传 mainCategoryId。
  • mainCategoryId 只能是主品 ID,不能传配套品或附加品 ID。

请求示例一:关键词定位 ​

在 Apifox 中选择 Body -> raw -> JSON:

json
{
  "query": "床头柜"
}

请求示例二:确认候选主品 ​

json
{
  "mainCategoryId": "2011025668681089026"
}

示例 ID 仅用于说明。实际调用时必须使用接口返回的真实 categoryId。

响应参数 ​

统一响应字段 ​

字段类型说明
codeInteger业务状态码,200 表示请求成功
messageString响应信息;失败时返回错误原因
resultObject品类定位结果
traceIdString链路 ID,存在链路上下文时返回
successBooleancode=200 时为 true

result 字段 ​

字段类型返回条件说明
matchTypeString成功时当前定位结果
needSelectionBoolean成功时是否需要用户选择主品
nextActionString成功时AI 建议执行的下一步动作
matchedCategoryObjectCATEGORY匹配到的大类
mainProductObjectEXACT_MAIN唯一定位到的主品
mainProductsArrayCATEGORY、AMBIGUOUS、NOT_FOUND主品候选;未找到时为空数组

matchedCategory 字段 ​

字段类型说明
categoryCodeString大类编码
categoryNameString大类名称

mainProduct / mainProducts[] 字段 ​

字段类型说明
categoryIdString主品 ID;报价时填入 cargoList[].categoryId
categoryCodeString品类编码
categoryGroupCodeString所属大类编码
categoryGroupNameString所属大类名称
categoryNameString主品名称
packingCodeString包装方式字典值,未配置时不返回
packingNameString包装方式名称,未配置时不返回
countString单套件数
weightKgString单套重量,单位 kg
volumeM3String单套体积,单位 m³
combinationProductBoolean是否为组合商品
hasComponentsBoolean是否存在启用的配套品或附加品
componentsArray仅精确定位且存在子品时返回

components[] 字段 ​

字段类型说明
categoryIdString子品 ID;报价时填入子品的 cargoList[].categoryId
categoryCodeString子品品类编码
categoryGroupCodeString子品所属大类编码
categoryGroupNameString子品所属大类名称
categoryNameString子品名称
packingCodeString包装方式字典值
packingNameString包装方式名称
componentTypeStringMATCHING 配套品,ACCESSORY 附加品
componentTypeNameString配套品或附加品
countString单套件数
weightKgString单套重量,单位 kg
volumeM3String单套体积,单位 m³

业务状态字段 ​

matchType、needSelection 和 nextAction 是接口为 AI 对话流程定义的业务字段,不是品类表原始字段。

matchType含义返回数据
EXACT_MAIN已定位唯一主品mainProduct
CATEGORY只匹配到商品大类matchedCategory、mainProducts
AMBIGUOUS匹配到多个主品mainProducts
NOT_FOUND未找到主品、大类或子品关系空的 mainProducts
nextAction触发条件AI 动作
READY_FOR_QUOTE唯一主品且没有子品补齐报价参数后直接报价
CONFIRM_COMPONENTS唯一主品且存在 components询问用户运输哪些子品及数量
SELECT_MAIN_PRODUCT大类或多个候选让用户选择,再传 mainCategoryId 查询
REFINE_QUERY未找到追问品类、材质、尺寸或用途后重试

例如:

json
{
  "matchType": "EXACT_MAIN",
  "needSelection": false,
  "nextAction": "CONFIRM_COMPONENTS"
}

表示主品已经唯一确定,但存在配套品或附加品。AI 应先确认本次是否运输这些子品以及数量,再调用报价接口。

实际 JSON 值是 EXACT_MAIN,不包含 Markdown 转义符 \。

返回示例 ​

请求:

json
{
  "mainCategoryId": "2011025668681089026"
}

响应:

json
{
  "message": "",
  "code": 200,
  "result": {
    "matchType": "EXACT_MAIN",
    "needSelection": false,
    "nextAction": "CONFIRM_COMPONENTS",
    "mainProduct": {
      "categoryId": "2011025668681089026",
      "categoryCode": "01-204",
      "categoryGroupCode": "01",
      "categoryGroupName": "床类",
      "categoryName": "实木床",
      "count": "1",
      "weightKg": "120",
      "volumeM3": "1.80",
      "combinationProduct": true,
      "hasComponents": true,
      "components": [
        {
          "categoryId": "2011025680000000001",
          "categoryCode": "01-301",
          "categoryGroupCode": "01",
          "categoryGroupName": "床类",
          "categoryName": "床头柜",
          "componentType": "MATCHING",
          "componentTypeName": "配套品",
          "count": "1",
          "weightKg": "20",
          "volumeM3": "0.20"
        }
      ]
    }
  },
  "traceId": "20260912160100-example-main",
  "success": true
}

物流报价计算 ​

请求信息 ​

http
POST /openapi/priceManagement/calculate
Content-Type: application/json

请求参数 ​

字段类型必填说明
sendAddressString是发货地址,需要能够识别省、市、区
receiveAddressString是收货地址,需要能够识别省、市、区,同时用于超区费匹配
distributionTypeString否1 自提、2 到楼下、3 到家、4 到家并安装;默认 1
merchantWorkNoString否商家会员号;默认从伙伴配置获取
bindWorkNoString否指定物流公司会员号
cargoListArray是货物列表,至少一项
cargoList[].categoryIdString是品类定位接口返回的主品或子品 categoryId;旧字段 categoryName 暂时兼容,但不建议继续使用
cargoList[].pieceString按计费方式本行货物套数
cargoList[].suitString按计费方式本行货物件数
cargoList[].weightString按计费方式本行货物合计重量,单位 kg
cargoList[].volumeString按计费方式本行货物合计体积,单位 m³
cargoList[].parentIdString子品必填主品不传;子品传所属主品的 categoryId

请求示例:主品及配套品 ​

json
{
  "sendAddress": "广东省深圳市南山区科技园1号",
  "receiveAddress": "广东省广州市天河区体育西路100号",
  "distributionType": "4",
  "cargoList": [
    {
      "categoryId": "2011025668681089026",
      "piece": "1",
      "suit": "1",
      "weight": "120",
      "volume": "1.80"
    },
    {
      "categoryId": "2011025680000000001",
      "parentId": "2011025668681089026",
      "piece": "2",
      "suit": "2",
      "weight": "40",
      "volume": "0.40"
    }
  ]
}

子品的 parentId 必须指向主品。重量和体积是当前货物行对应数量的合计值。

响应参数 ​

result 是按 totalFee 从低到高排列的报价数组。

字段类型说明
result[].companyWorkNoString物流公司会员号
result[].companyNameString物流公司名称
result[].areaNameString命中的价格区域
result[].trunkFeeDecimal干线费,单位元
result[].branchFeeDecimal支线费,单位元
result[].deliveryInstallFeeDecimal送货/安装服务费,单位元
result[].excessVolumeFeeDecimal超方费,单位元
result[].superzoneFeeDecimal超区费,单位元
result[].totalFeeDecimal总费用,单位元

返回示例 ​

json
{
  "message": "",
  "code": 200,
  "result": [
    {
      "companyWorkNo": "300061",
      "companyName": "示例物流A",
      "areaName": "广州区域",
      "trunkFee": 100.00,
      "branchFee": 20.00,
      "deliveryInstallFee": 30.00,
      "excessVolumeFee": 0.00,
      "superzoneFee": 0.00,
      "totalFee": 150.00
    },
    {
      "companyWorkNo": "300088",
      "companyName": "示例物流B",
      "areaName": "广州区域",
      "trunkFee": 105.00,
      "branchFee": 25.00,
      "deliveryInstallFee": 35.00,
      "excessVolumeFee": 0.00,
      "superzoneFee": 10.00,
      "totalFee": 175.00
    }
  ],
  "traceId": "20260912161000-example-price",
  "success": true
}

计费说明 ​

  • 协议价优先,未配置协议价时使用公布价。
  • 干线费根据后台计费方式按体积、套数或重量计算。
  • 配送方式影响支线费和送货安装费。
  • 超方费按总体积计算。
  • 超区费根据 receiveAddress 匹配。

具语物流开放平台