运价推送接口

数据提供方用任意开发语言直接调用 HTTP 接口发送 JSON,不需要安装 SDK。

接口地址

接口用途
POST /prod-api/direct/admin/crawler-quotes/import同步导入,适合少量调试
POST /prod-api/direct/admin/crawler-quotes/import-async异步导入,正式批量推送使用
GET /prod-api/direct/admin/crawler-quotes/import-tasks/{taskId}查询异步任务结果

生产环境请使用系统实际的 HTTPS 域名作为前缀。正式批量推送建议使用异步接口,单批不超过 500 条。

身份认证

在「直连系统 → 日志监控 → 数据接入管理」中为每个数据提供方分配独立的 AppId 和 AppSecret。每次请求携带:

Content-Type: application/json
X-Direct-App-Id: 后台分配的 AppId
X-Direct-App-Secret: 后台分配的 AppSecret

不需要生成时间戳、Nonce 或 HMAC 签名。

请求示例

{
  "source": "CRAWLER",
  "batchNo": "BATCH_20260812_001",
  "platformCode": "PARTNER_A",
  "policyName": "合作方A政策",
  "quotes": [
    {
      "externalId": "PARTNER_A_20260812_SL516_E",
      "tripType": 1,
      "depCity": "BKK",
      "arrCity": "CNX",
      "currency": "CNY",
      "adultPrice": 1660,
      "adultTax": 181,
      "childPrice": 1300,
      "childTax": 181,
      "infantPrice": 200,
      "infantTax": 0,
      "seatCount": 9,
      "cabin": "E",
      "cabinClass": "ECONOMY",
      "checkedBaggage": "1-23",
      "handBaggage": "0-0",
      "refundChangeRule": {
        "passengerType": 0,
        "hasRefund": 0,
        "refund": "不得退票",
        "hasEndorse": 1,
        "endorse": "起飞前允许改期,收费 200 CNY",
        "hasNoShow": 1,
        "penalty": "未登机视为 No-show,收费 500 CNY"
      },
      "collectedAt": "2026-08-12 10:30:00",
      "journeys": [
        {
          "journeyNo": 1,
          "depCity": "BKK",
          "arrCity": "CNX",
          "segments": [
            {
              "segmentNo": 1,
              "carrier": "SL",
              "operatingCarrier": "SL",
              "flightNo": "SL516",
              "depAirport": "BKK",
              "arrAirport": "CNX",
              "depTime": "2026-09-01 15:50:00",
              "arrTime": "2026-09-01 17:05:00",
              "cabin": "E",
              "cabinClass": "ECONOMY",
              "aircraftCode": "320",
              "codeShare": 0
            }
          ]
        }
      ]
    }
  ]
}

批次字段

字段必填说明
source否固定为 CRAWLER,不传时后端自动补充
batchNo建议对接方批次号,便于定位问题
platformCode建议数据提供方或平台标识
policyId否已存在的政策分组编号
policyName否不传 policyId 时,按名称自动创建稳定的政策分组
quotes是报价数组,单批建议不超过 500 条

报价字段

字段必填说明
externalId是对接方报价唯一编号;相同编号和行程再次推送时更新原报价
tripType是1 单程、2 往返、5 多程
depCity / arrCity是城市三字码
adultPrice是成人票面价,不含税
adultTax否成人税费,默认 0
childPrice / childTax否儿童价格和税费;价格缺省时沿用成人价格
infantPrice / infantTax否婴儿价格和税费,默认 0
currency否币种,默认 CNY
seatCount否可售座位数,默认 0
cabin / cabinClass建议舱位和舱等,如 E、ECONOMY
checkedBaggage / handBaggage否托运 / 手提行李,1-23 表示 1 件 23KG,0-0 表示无免费行李
refundChangeRule否默认退改签规则,支持对象或数组(按乘客类型分别传)
supplierFields否供应商私有扩展对象,只供对应供应商验价、下单使用
collectedAt否报价采集时间,缺省为接收时间
journeys是行程数组,每个行程包含 segments 航段数组

返回说明

  • 同步接口:返回每条报价的处理结果、运价编码,以及是否为新增;
  • 异步接口:返回 taskId 和 Redis Stream ID,通过任务查询接口查看最终状态。

异步任务状态:PENDING、RUNNING、SUCCESS、PARTIAL_SUCCESS、FAILED。

注意事项

  1. AppSecret 只能通过安全渠道传递,不要写入公开仓库或前端代码;
  2. externalId 应长期稳定,刷新同一报价时继续使用原编号;
  3. 生产环境使用 HTTPS,并配置连接超时、失败重试和请求日志;
  4. 长时间没有重新推送的运价库存会被自动清理,请按约定周期持续刷新有效报价;
  5. 同一航线有多种托运行李额时,拆成多条报价分别推送。