火车票订单查询
- 接口(建议后缀):/order/train/queryOrder
- Method:POST
- 数据格式:Json
- 调用方:每刻
- 接口说明:每刻将通过该接口,获取特定范围的火车票订单数据
[warning] 对接前先看:
目前常见的参数组合(以下例子不包括必填参数)示例:
- 每日凌晨定时任务:startDate + endDate 拉取该时间范围内对应 externalCorpCode 企业的订单;
- 申请单申请人触发:externalApprovalNo 拉取指定申请单下预定的订单;
- 管理员或者预定人触发丢失订单的补充拉取:externalEmployeeCode + startDate + endDate 拉取指定员工;
- 第三方对接了第三方订单通知实时推送接口:orderId + operationId 直接拉取对应订单;
当订单进入每刻后,很快就会生成费用,甚至费用可能已经报销,原则上是不允许第三方订单进行修改(尤其是金额),如果这笔订单传的金额不正确,或者人为因素导致订单金额多了或者少了,可以采取 orderId 保持原单不变,生成一笔新的 operationId 订单,金额为该笔订单多了或少了的金额。
请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
externalCorpCode | String | Y | 企业在第三方的唯一标识 |
externalEmployeeCode | String | [1] | 下单人在第三方的唯一编码 |
externalApprovalNo | String | [1] | 申请单在第三方唯一编码 |
orderId | String | [1] | 订单号 |
operationId | String | [1] | 操作号 |
startDate | String | [2] | 开始日期(yyyy-MM-dd)[3] |
endDate | String | [2] | 结束日期(yyyy-MM-dd)[3] |
dateType | String | N | 参考时间(不传时等同 OPERATION) |
onlyApprovingOrder | bool | N | 限定只拉取审批中的订单(默认不传,不传按 false 处理) |
pageNo | int | Y | 第几页(从第1页开始) |
pageSize | int | Y | 每页容量(最大为 100) |
[info] 说明:
[1] 非必填参数,至少填写一个,可以填写多个,如果填写了多个,条件是叠加的,比如四个个字段都有值,externalCorpCode 企业、externalEmployeeCode 员工、approval 申请单和 orderId 订单对应的订单信息。
[2] 没有开始与结束日期,默认结束日期为请求日期;只有开始时间,表示从开始日期到调用日期的订单;只有结束日期,开始日期为结束日期的前一个月。
[3] 默认开始时间为00:00,默认结束时间为23:59。
参考时间
code | 定义 |
---|---|
ORDER | 订单时间(暂不支持) |
OPERATION | 操作时间 |
响应结构
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
success | bool | Y | 请求是否成功 |
errorMessage | String | N | 失败信息(当 success 为 false 时,失败信息为必填) |
data | List<TrainOrder> | Y | 订单详情列表 |
hasNextPage | bool | N | 是否有下一页 |
[warning] 关于请求分页如何结束:
hasNextPage = false 标志着分页结束,success 仅表示请求是否成功。
TrainOrder
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
orderId | String | Y | 订单在第三方的唯一编码 |
operationId | String | Y | 操作在第三方的唯一编码 |
originalOperationId | String | [4] | 关联原操作号 |
String | N | ||
String | N | ||
sourceAppCode | String | N | 实际供应商(TMC)原 originalAppCode 废弃,保留接收,但新对接 TMC 使用该字段 |
sourceOrderId | String | N | 实际供应商订单号 |
externalCorpCode | String | Y | 企业在第三方的唯一编码 |
externalEmployeeCode | String | Y | 预订人在第三方的唯一编码 |
externalEmployeeName | String | N | 预订人在第三方的姓名 |
externalDepName | String | N | 预订人在第三方部门名称 |
externalApprovalNo | String | N | 申请单在第三方的唯一编码 |
status | String | Y | 订单状态 |
onBusiness | bool | N | 是否因公 |
isOnline | bool | N | 是否在线预订 |
orderAt | String | Y | 预订时间(yyyy-MM-dd HH:mm:ss) |
operationAt | String | N | 订单状态改变时间(yyyy-MM-dd HH:mm:ss) |
paidAt | String | Y | 支付时间(yyyy-MM-dd HH:mm:ss) |
payType | String | Y | 付款方式 |
totalFee | BigDecimal | Y | 订单总金额=企业支付(corpPayFee) + 个人支付(personalPayFee) |
corpPayFee | BigDecimal | Y | 订单企业支付部分金额 |
personalPayFee | BigDecimal | Y | 订单个人支付部分金额 |
changeFee | BigDecimal | N | 改签费,仅改签明细需要有值,=改签差价+ 改签手续费(12306收取) |
changeServiceFee | BigDecimal | N | 仅改签明细有值的改签服务费(TMC收取) |
refundFee | BigDecimal | N | 退票费,仅退票明细有值(12306收取) |
refundServiceFee | BigDecimal | N | 仅退票明细有值的退票服务费(TMC收取) |
serviceFee | BigDecimal | N | 仅预订有值的预订服务费(TMC收取) |
extraServiceFee | BigDecimal | N | 额外服务费 |
BigDecimal | N | ||
BigDecimal | N | ||
BigDecimal | N | ||
platformAgencyFee | BigDecimal | N | 平台服务费(平台收取的服务费,区别于实际供应商服务费) |
currency | String | Y | 货币类型(人民币为 CNY) |
incompatibleReason | String | N | 不符合申请单的原因 |
remark | String | N | 订单备注 |
approver | String | N | 授权人在第三方中的唯一标识 |
approver2 | String | N | 授权人在第三方中的唯一标识 |
ticketList | List<TrainTicket> | Y | 预订火车票列表 |
settlementBatchNo | String | N | 结算批次号 |
useStatus | OrderUseStatus | N | (要传该字段请和每刻确认)订单使用状态 |
[info] 说明:
[4]火车票发生改签与退票操作才会关联原订单号或原操作号,详细信息请阅读订单同步首页的描述。
订单状态
code | 定义 |
---|---|
O | 预订单(首次购票的订单) |
C | 改签单(首次改签/N次改签) |
R | 退票单 |
付款方式
code | 定义 |
---|---|
PERSONAL_PAY | 个人支付 |
CORP_ACCOUNT_PAY | 公司支付 |
MIX_PAY | 混合支付 |
TrainTicket
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
trainNo | String | Y | 车次号 |
departureTime | String | Y | 出发时间(yyyy-MM-dd HH:mm:ss) |
arrivalTime | String | Y | 到达时间(yyyy-MM-dd HH:mm:ss) |
tripDuration | String | N | 行程时间(分钟) |
departureCity | City | Y | 出发城市 |
arrivalCity | City | Y | 到达城市 |
departureStation | String | Y | 出发车站 |
arrivalStation | String | Y | 到达车站 |
seat | String | Y | 座位 |
ticketPrice | BigDecimal | Y | 实际支付票价,改签明细值=改签票差价(changeDiffFee),退票明细值=(预订支付票价+改签费)的负值 |
tmcServiceFee | BigDecimal | Y | TMC 服务费 |
insuranceFee | BigDecimal | Y | 保险费 |
client | Client | Y | 乘车人 |
座位定义
code | 定义 |
---|---|
SECOND_CLASS | 二等座 |
FIRST_CLASS | 一等座 |
BUSINESS_CLASS | 商务座 |
PREMIER_CLASS | 特等座 |
SLEEPER | 动卧 |
DELUXE_SLEEPER | 高级软卧 |
SOFT_SLEEPER | 软卧 |
HARD_SLEEPER | 硬卧 |
FIRST_SLEEPER | 一等卧 |
SECOND_SLEEPER | 二等卧 |
SOFT_BOX | 一人软包 |
SOFT_SEAT | 软座 |
HARD_SEAT | 硬座 |
NO_SEAT | 无座 |
Client
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
externalEmployeeCode | String | [5] | 乘车人唯一标识 |
name | String | Y | 姓名 |
identityType | String | N | 乘车人证件类型 |
identityCode | String | N | 乘车人证件号 |
[info] 说明:
[5] 乘车人可能不是企业员工,如果填写了该字段,表示为企业员工,如果只有姓名,表示外部同行人。
数据示例
以下示例仅企业支付:
- 原票:全价 1000,票价 1000,TMC服务费 30,保险 20
- 第一次改签:只做改期,未升舱,并退掉了保险,改签手续费 0
- 第二次改签:改签并且升级座等,改签费(改签临期手续费 30 + 票差价 470) 500,并重新买了一份 20 的保险
- 退票:退票手续费 100,TMC服务费 30 是不退的
类型 | 原订单 | 第一次改签 | 第二次改签 | 退票 | ||
---|---|---|---|---|---|---|
TrainOrder | 订单总金额 | totalFee | 1050 | -20 | 520 | -1390 |
企业支付金额 | corpPayFee | 1050 | -20 | 520 | -1390 | |
改签费 | changeFee | 0 | 0 | 500 | 0 | |
改签服务费 | changeServiceFee | 0 | 0 | 0 | 0 | |
退票费 | refundFee | 0 | 0 | 0 | 100 | |
服务费 | serviceFee | 30 | 0 | 0 | 0 | |
保险费 | insuranceFee | 20 | -20 | 20 | -20 | |
TrainTicket | 票价 | ticketPrice | 1000 | 0 | 470 | -1470 |
TMC 服务费 | tmcServiceFee | 30 | 0 | 0 | 0 | |
保险费 | insuranceFee | 20 | -20 | 20 | -20 |
示例
[warning] 重要:
示例维护并非和文档字段维护一样频繁,如果遇到示例和文档不一致,请以文档为准
请求头:
{
"tokenId": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJtYXljdXJfand0X2Rldl9pZCIsInN1YiI6IlBGMjAwNjIwMTI1NU5GTk8iLCJpYXQiOjE2MDQ2MzA5NjYsImF1ZCI6IlBMQVRGT1JNIiwiZXhwIjoxNjA0NjM0NTY2LCJwcm9kdWN0TGluZSI6IkRBVEFfSFVCIn0.AyNIwPtGUXxFMuHO8Bx-4XeXNyWYRcot40MfsL1swr4"
}
请求示例:
1.每日凌晨定时任务
{
"externalCorpCode": "0123456",
"startDate": "2024-06-12",
"endDate": "2024-06-19",
"pageNo": 1,
"pageSize": 50
}
2.申请单申请人触发
{
"externalCorpCode": "0123456",
"externalApprovalNo": "AE94527002203135xxx",
"pageNo": 1,
"pageSize": 50
}
3.管理员或者预定人触发丢失订单的补充拉取
{
"externalCorpCode": "0123456",
"externalEmployeeCode": "48edc82xxx",
"startDate": "2024-06-12",
"endDate": "2024-06-19",
"pageNo": 1,
"pageSize": 50
}
4.第三方对接了第三方订单通知实时推送接口
{
"externalCorpCode": "021343",
"orderId": "13406390267",
"operationId": "13406390267",
"pageNo": 1,
"pageSize": 50
}
响应示例:
{
"success": true,
"errorMessage": null,
"data": [
{
"orderId": "13406390267",
"operationId": "13406390267",
"originalOperationId": null,
"externalCorpCode": "0123456",
"externalEmployeeCode": "48edc82xxx",
"externalEmployeeName": "xxx",
"externalApprovalNo": "a00a7e3xxxx",
"status": "O",
"onBusiness": true,
"isOnline": true,
"orderAt": "2024-06-18 15:43:11",
"operationAt": "2024-06-18 15:45:09",
"payType": "CORP_ACCOUNT_PAY",
"totalFee": 48.00,
"corpPayFee": 48.00,
"personalPayFee": 0.0,
"changeFee": 0.0,
"changeServiceFee": 0.0,
"refundFee": 0.0,
"refundServiceFee": 0.0,
"serviceFee": 6.00,
"extraServiceFee": 0.0,
"taxFee": 0.0,
"deductibleTaxFee": 0.0,
"nonDeductibleTaxFee": 0.0,
"currency": "CNY",
"incompatibleReason": "",
"remark": "",
"approver": null,
"approver2": null,
"ticketList": [
{
"trainNo": "G7139",
"departureTime": "2024-06-18 16:44:00",
"arrivalTime": "2024-06-18 17:18:00",
"tripDuration": "34",
"departureCity": {
"code": "CT320500",
"name": "苏州"
},
"arrivalCity": {
"code": "CT310000",
"name": "上海"
},
"departureStation": "苏州",
"arrivalStation": "上海虹桥",
"seat": "SECOND_CLASS",
"ticketPrice": 42.00,
"tmcServiceFee": 6.0,
"insuranceFee": 0.0,
"client": {
"externalEmployeeCode": "48edc82xxx",
"name": "xxx",
"identityType": "身份证",
"identityCode": "xxxxxxxxxxxxxxxxxx"
}
}
],
"paidAt": "2024-06-18 15:45:09"
}
],
"hasNextPage": false
}