运价推送接口
数据提供方用任意开发语言直接调用 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。
注意事项
- AppSecret 只能通过安全渠道传递,不要写入公开仓库或前端代码;
externalId应长期稳定,刷新同一报价时继续使用原编号;- 生产环境使用 HTTPS,并配置连接超时、失败重试和请求日志;
- 长时间没有重新推送的运价库存会被自动清理,请按约定周期持续刷新有效报价;
- 同一航线有多种托运行李额时,拆成多条报价分别推送。