线下票免(12306)账号购票下单接口。
重要说明:
遇到卧铺传下铺价格、儿童票传成人票的价格,,,平台先按照最高票价预收,如果最终实际出票金额低于预收金额,平台将自动退差。
下单成功后请及时支付,新订单30分钟未支付订单将自动取消。
请商户严格按照该预订流程对接,不然会存在:无效订单占比过高(即:只下单不支付的单子),接口账户被系统自动封禁的风险。

| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的APPKEY |
| customerOrderNo | string | 是 | 采购商的订单号 |
| contactName | string | 是 | 订单联系人姓名 |
| contactMobile | string | 是 | 订单联系人手机号 |
| callBackUrl | string | 否 | 出票结果回调地址(出票成功/失败时,将通过此地址回调给采购商,回调详见:订单状态推送通知说明) |
| refundTicketCallbackUrl | string | 否 | 退票结果回调地址(退票成功/失败时,将通过此地址回调给采购商,回调详见:订单状态推送通知说明)PS:用于之前线下跑腿代退的退票结果异步回调的,该服务已暂停,所以该回调地址暂时用不到,,本人车票退票和快捷退票都是同步返回退票结果的 |
| refundMoneyCallbackUrl | string | 否 | 退款回调地址(退款时,将通过此地址回调给采购商,回调详见:订单状态推送通知说明) |
| trainSegments | TrainSegment[] | 是 | 行程信息,支持联程(单程时该数组长度就是1,联程是就是2) |
| trainCode | string | 是 | 车次号 |
| fromStation | string | 是 | 出发站 |
| toStation | string | 是 | 到达站 |
| fromDateTime | string | 是 | 出发日期及时间,精确到分钟,格式:yyyy-MM-dd HH:mm,如:2025-01-15 06:02 |
| toDateTime | string | 是 | 到达日期及时间,精确到分钟,格式:yyyy-MM-dd HH:mm,如:2025-01-15 06:02 |
| isAcceptStanding | bool | 是 | 是否接受无座,默认不接收(如果坐席seatType选择的就是无座 =98,记得将这个字段传true,否则可能会被拒单) |
| chooseSeats | string | 否 | 选座信息,格式:1/A|1/B|2/F,表示1排A座,1排B座,2排F座 (PS: 商务座坐席号分为A、C、F ,一等座坐席号为A、C、D、F,二等车坐席号为A、B、C、D、F) ( 2026-05-11 新增 ) |
| chooseSeatsPriority | int | 否 | 选座优先级别:0-优先,1-必须 , 选座时和chooseSeats字段必须同时传值 ( 2026-05-11 新增 ) |
| chooseSleeper | string | 否 | 选铺信息: 铺位类型/数量多个|分割,1/1:上铺一张,2/1:中铺一张,3/1:下铺一张 例如:1/1|3/1|2/1 ( 2026-05-11 新增 ) |
| chooseSleeperPriority | int | 否 | 选铺优先级别:0-优先,1-必须 ,选铺时和chooseSleeper必须同时传值 ( 2026-05-11 新增 ) |
| aisleWindow | string | 否 | 靠窗靠过道: 2/1|1/2 表示 靠走廊/1张|靠窗/2张 ( 2026-05-11 新增 ) |
| aisleWindowPriority | int | 否 | 靠窗靠过道优先级别:0-优先,1-必须 ,指定时 和aisleWindow 必须同时传值 ( 2026-05-11 新增 ) |
| adjacentPriority | int | 否 | (可选项)连座优先级:0-优先,1-必须 ( 2026-05-11 新增 ) |
| passengers | Passenger[] | 是 | 乘客信息 |
| name | string | 是 | 乘客姓名 |
| cardType | int | 是 | 证件类型( 身份证 = 1,护照 = 2, 港澳居民来往内地通行证 = 3 , 台湾居民来往大陆通行证 = 4 ,外国人永久居留身份证 = 8 ,港澳台居民居住证 = 9 ) |
| cardNo | string | 是 | 证件号码 |
| mobile | string | 是 | 手机号 |
| ticketType | int | 是 | 火车票票种( 成人票 = 1,儿童票 = 2, 学生票 = 3, 残军票 = 4) |
| seatType | int | 是 | 席别类型(商务座 = 1,特等座 = 2,一等座 = 3,二等座 = 4,高级软卧 = 5,软卧 = 6,动卧 = 7 ,硬卧 = 8,软座 = 9,硬座 = 10,一等卧 = 11,二等卧 = 12,高级动卧 = 13, 一等软座 = 14 , 二等软座 = 15, 特等软座 = 16, 包厢硬卧 = 17, 一人软包 = 18, 多功能座 = 19, 无座 =98,其他 = 99) |
| preTicketPrice | decimal | 是 | 预收票价( 卧铺时传最高的下铺票价,儿童/学生/参军票时传成人票价 ) |
| birthday | string | 否 | 出生日期(格式:yyyy-MM-dd , 当cardType = 2,3,4,8时必填) |
| cardValidEndDate | string | 否 | 证件有效期截止日期(格式:yyyy-MM-dd , 当cardType = 2,3,4,8时必填) |
| sex | int | 否 | 性别(男 = 1 , 女 = 2 , 当cardType = 2,3,4,8时必填) |
| countryCode | string | 否 | 国家/地区 代码(当cardType = 2,8时必填。可向平台索取所有国家/地区代码静态数据) |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 下单结果(非出票结果),true:下单成功,false下单失败 |
| msg | string | 下单失败时,失败原因 |
| data | object | 业务参数(success为true时才有值,false时为null) |
| orderNo | string | 订单号 |
| totalPreTicketPriceAmount | decimal | 订单中所有乘客的预收票价(下单请求参数中preTicketPrice字段)之和(余额支付时,将按照此金额收取。如果最终实际总出票价大于此值将会被拒单出票失败,小于此值时,出票成功后将自动退还多收取的票差) |
单程下单请求示例:
{
"appKey": "您申请的APPKEY",
"customerOrderNo": "2025011022150473",
"contactName": "张三",
"contactMobile": "13912345678",
"callBackUrl": "https://xxxxxx/outTicketResultCallback",
"refundTicketCallbackUrl": "https://xxxxxx/refundTicketResultCallback",
"refundMoneyCallbackUrl": "https://xxxxxx/refundMoneyCallback",
"trainSegments": [
{
"trainCode": "K1158",
"fromStation": "合肥",
"toStation": "蚌埠",
"fromDateTime": "2025-01-15 06:02",
"toDateTime": "2025-01-15 08:15",
"isAcceptStanding": false,
"isAcceptOtherSeat": false,
"passengers": [
{
"name": "张三",
"cardType": "1",
"cardNo": "340123197209183099",
"mobile": "13912345678",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 77.5
},
{
"name": "李四",
"cardType": "1",
"cardNo": "441721198812150039",
"mobile": "13912345678",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 77.5
},
{
"name": "王二",
"cardType": "1",
"cardNo": "620821200112042422",
"mobile": "13912345670",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 77.5
}
]
}
]
}
联程下单请求示例:
{
"appKey": "您申请的APPKEY",
"customerOrderNo": "2025011022150485",
"contactName": "张三",
"contactMobile": "13912345678",
"callBackUrl": "https://xxxxxx/outTicketResultCallback",
"refundTicketCallbackUrl": "https://xxxxxx/refundTicketResultCallback",
"refundMoneyCallbackUrl": "https://xxxxxx/refundMoneyCallback",
"trainSegments": [
{
"trainCode": "K1158",
"fromStation": "合肥",
"toStation": "蚌埠",
"fromDateTime": "2025-01-15 06:02",
"toDateTime": "2025-01-15 08:15",
"isAcceptStanding": false,
"isAcceptOtherSeat": false,
"passengers": [
{
"name": "张三",
"cardType": "1",
"cardNo": "340123197209183099",
"mobile": "13912345678",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 77.5
},
{
"name": "李四",
"cardType": "1",
"cardNo": "441721198812150039",
"mobile": "13912345678",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 77.5
},
{
"name": "王二",
"cardType": "1",
"cardNo": "620821200112042422",
"mobile": "13912345670",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 77.5
}
]
},
{
"trainCode": "K1276",
"fromStation": "蚌埠",
"toStation": "呼和浩特",
"fromDateTime": "2025-01-15 16:45",
"toDateTime": "2025-01-16 19:08",
"isAcceptStanding": false,
"isAcceptOtherSeat": false,
"passengers": [
{
"name": "张三",
"cardType": "1",
"cardNo": "340123197209183099",
"mobile": "13912345678",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 343.5
},
{
"name": "李四",
"cardType": "1",
"cardNo": "441721198812150039",
"mobile": "13812345678",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 343.5
},
{
"name": "王二",
"cardType": "1",
"cardNo": "620821200112042422",
"mobile": "13812345679",
"ticketType": 1,
"seatType": 8,
"preTicketPrice": 343.5
}
]
}
]
}
下单成功示例:
{
"data": {
"orderNo": "TX25011213525343937",
"totalPreTicketPriceAmount": 232.5
},
"success": true,
"msg": "请求成功"
}
下单失败示例:
{
"data": null,
"success": false,
"msg": "火车票票款余额不足,当前账户火车票票款余额:8.51小于订单票款总金额:232.5"
}
余额支付接口,线下票订单是先支付(按照最高票价预收:卧铺按照下铺、儿童/学生/残军按照成人),再出票的。出票成功后若有票差系统自动退回多收取的票差。
PS:
1、该接口的响应参数同步返回支付结果,所以支付结果无需异步回调。
2、支付成功不代表出票成功,支付成功后,需通过轮询订单详情接口 或 通过出票结果回调接口根据订单状态 来判断最终是否出票成功。
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的APPKEY |
| orderNo | string | 是 | 订单号 |
| payAmount | string | 否 | 支付金额,为空(null)不校验,传值就会和订单总金额比对,一致才能代扣成功(传值时就参与签名,为null时不参与签名) |
| sign | string | 是 | 签名校验值,md5(secretKey+orderNo+payAmount+secretKey),secretKey为请求密钥,开通账户时即可获得,加密结果转为32位小写。【注意:加密前的拼接原串不包含'+'】 |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 支付结果,true表示余额支付成功,false表示余额支付失败。 |
| msg | string | 当支付失败,失败原因 |
{
"appKey": "您申请的APPKEY",
"orderNo": "TX25010812025423013",
"payAmount": 232.5,
"sign":"17fb3f159a93cf6a5d0275565d1a0954"
}
支付成功示例:
{
"data": true,
"success": true,
"msg": "请求成功"
}
支付失败示例(payAmount校验失败):
{
"data": null,
"success": false,
"msg": "线下火车票订单(TX25011116315444200)支付金额不一致(订单:232.50,参数:1263)!"
}
支付失败示例(余额不足):
{
"data": null,
"success": false,
"msg": "钱包余额不足!!!"
}
每次只能提交一张客票的退票申请,如需退多张票请分多次提交。
该接口请求成功,仅代表退票申请成功,最终退票结果(退票成功或失败)将推送到下单接口预留的(refundTicketCallbackUrl)退票结果回调地址中,回调内容详见: 回调接口文档
跑腿代退服务已暂停服务,请引导用户使用通过线上退票(有账号的可使用 【本人车票退票接口】申请退票,无账号的可使用【快捷退票接口】申请退票)
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的APPKEY |
| orderNo | string | 是 | 订单号 |
| passengerID | string | 是 | 乘客ID(订单详情接口有返回,可在出票成功时,和座位号等客票信息一起保存到本地对应客票上 ) |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | string | true表示退票申请成功,false表示退票申请失败(PS: 返回true时,仅代表退票申请成功,是否退票成功结果将会通过退票回调接口推送给采购,也可轮询订单详情接口获取) |
| msg | string | 申请失败时,失败原因 |
{
"appKey": "您申请的APPKEY",
"orderNo": "TX25011116315444200",
"passengerID": 113
}
请求成功示例:
{
"data": true,
"success": true,
"msg": "请求成功"
}
请求失败示例:
{
"data": null,
"success": false,
"msg": "退票乘客ID有误,线下火车票订单(TX25011116315444200)中未找到乘客ID(1132)的客票信息"
}
{
"data": null,
"success": false,
"msg": "当前客票正在退票处理中,无需重复申请"
}
改签下单接口,,改签可能需要先支付,也可能无需支付,是否需要先支付根据该接口响应参数中的totalPrePayAmount判断,大于0表示需要先支付,等于0表示无需支付。PS:无论是否需要支付,改签下单成功后,都需要调用 改签确认/支付接口进行确认改签,,否则30分钟后改签单将超时未确认改签自动取消掉。
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的APPKEY |
| orderNo | string | 是 | 订单号 |
| callBackUrl | string | 是 | 改签结果回调地址 |
| oldTrainSegment | OldTrainSegment | 是 | 改签前的原车次信息 |
| trainCode | string | 是 | 车次号 |
| fromStation | string | 是 | 出发站 |
| toStation | string | 是 | 到达站 |
| trainSegment | NewTrainSegment | 是 | 改签到的目标车次信息 |
| trainCode | string | 是 | 改签后的新车次号 |
| fromStation | string | 是 | 改签后的新出发站 |
| toStation | string | 是 | 改签后的新到达站 |
| fromDateTime | string | 是 | 改签后的新出发日期及时间,精确到分钟,格式:yyyy-MM-dd HH:mm,如:2025-01-15 06:02 |
| toDateTime | string | 是 | 改签后的新到达日期及时间,精确到分钟,格式:yyyy-MM-dd HH:mm,如:2025-01-15 06:02 |
| tickets | ReqChangeTicket[] | 是 | 改签客票信息 |
| name | string | 是 | 乘客姓名 |
| cardType | int | 是 | 证件类型( 身份证 = 1,护照 = 2, 港澳居民来往内地通行证 = 3 , 台湾居民来往大陆通行证 = 4 ,外国人永久居留身份证 = 8 ,港澳台居民居住证 = 9 ) |
| cardNo | string | 是 | 证件号码 |
| ticketType | int | 是 | 火车票票种( 成人票 = 1,儿童票 = 2, 学生票 = 3, 残军票 = 4) |
| seatType | int | 是 | 改签后新的席别类型(商务座 = 1,特等座 = 2,一等座 = 3,二等座 = 4,高级软卧 = 5,软卧 = 6,动卧 = 7 ,硬卧 = 8,软座 = 9,硬座 = 10,一等卧 = 11,二等卧 = 12,高级动卧 = 13, 一等软座 = 14 , 二等软座 = 15, 特等软座 = 16, 包厢硬卧 = 17, 一人软包 = 18, 多功能座 = 19, 无座 =98,其他 = 99) |
| preTicketPrice | int | 是 | 改签后新票的预收票价( 卧铺时传最高的下铺票价,儿童/学生/参军票时传成人票价 ) |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | true表示改签下单成功,false表示改签下单失败 |
| msg | string | 当改签下单失败时,失败原因 |
| data | object | 当改签成功时才有值,具体类型如下 |
| chaNo | string | 改签单号 |
| totalPrePayAmount | string | 改签单需预付款金额(大于0表示确认改签时需要先支付) |
{
"appKey": "您申请的APPKEY",
"orderNo": "TX25011116315444200",
"callBackUrl": "https://xxxxxx/changeCallback",
"oldTrainSegment": {
"trainCode": "K1158",
"fromStation": "合肥",
"toStation": "蚌埠"
},
"trainSegment": {
"trainCode": "K1158",
"fromStation": "合肥",
"toStation": "蚌埠",
"fromDateTime": "2025-01-20 06:02",
"toDateTime": "2025-01-20 08:15"
},
"tickets": [
{
"name": "李四",
"cardType": "1",
"cardNo": "441721198812150039",
"ticketType": 1,
"seatType": 10,
"preTicketPrice": 23.5
},
{
"name": "王二",
"cardType": "1",
"cardNo": "620821200112042422",
"ticketType": 1,
"seatType": 10,
"preTicketPrice": 23.5
}
]
}
改签下单成功示例1(无需支付):
{
"data": {
"chaNo": "TX25011116315444200C5029",
"totalPrePayAmount": 0.0
},
"success": true,
"msg": "请求成功"
}
改签下单成功示例2(需支付):
{
"data": {
"chaNo": "TX25011116315444200C5029",
"totalPrePayAmount": 50.5
},
"success": true,
"msg": "请求成功"
}
改签下单失败示例:
{
"data": null,
"success": false,
"msg": "李四正在改签中,无法再次申请改签!"
}
当上一步【改签下单接口】同步返回参数中的改签单需预付款金额(totalPrePayAmount字段)大于0时,将直接用余额支付该金额,支付成功后,开始操作改签。当无需支付时(totalPrePayAmount=0时),确认改签成功后,将开始操作改签。
该步请求成功后,仅代表改签确认/支付成功。最终改签结果(改签成功/失败)将异步回调【改签下单接口】传入的callBackUrl改签结果回调地址中,也可通过轮询订单详情接口同步改签结果。
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的APPKEY |
| chaNo | string | 是 | 改签单号(改签下单接口同步返回的chaNo字段) |
| payAmount | decimal | 否 | 改签支付金额(即 改签单待支付金额 needPayAmount字段值 ,传入将验证支付金额;传值时就参与签名,为null时不参与签名) |
| sign | string | 是 | 签名校验值,md5(secretKey+chaNo+payAmount+secretKey),secretKey为请求密钥,开通账户时即可获得。加密结果转为32位小写 |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | true:改签确认/支付成功,false改签改签确认/支付失败 |
| msg | bool | 当改签确认/支付失败时,失败原因 |
{
"appKey": "您申请的APPKEY",
"chaNo": "TX25011116315444200C5029",
"payAmount": "50.5",
"sign": "17fb3f159a93cf6a5d0275565d1a0954"
}
成功示例:
{
"data": true,
"success": true,
"msg": "请求成功"
}
失败示例:
{
"data": null,
"success": false,
"msg": "改签单(TX25011116315444200C5029)待支付金额:0.00,与确认改签接口传入的支付金额payAmount:50.5不一致!"
}
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 接口账户appKey |
| orderNo | string | 是 | 线下火车票订单号 |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| orderNo | string | 线下火车票订单号 |
| trainRangeType | int | 订单车程类型: 单程 = 0, 联程 = 1 |
| totalTicketPriceAmount | decimal | 订单中所有客票的实际出票票价之和,即订单总的实际出票票款金额 (出票成功才有值) |
| totalPreTicketPriceAmount | decimal | 订单中所有客票的预收票价之和,即订单总的预收票款金额( 卧铺按照下铺收,儿童按照成人收 ),新订单支付先按这个金额收取,出票成功后有差额自动退差 |
| totalOutTicketServiceFee | decimal | 订单中所有客票的出票服务费之和,即订单总的出票服务费( 出票成功才扣出票服务费 ) |
| outTicketServiceFeePerTicket | decimal | 单张票的出票服务费 |
| numberOfTickets | int | 订单总的客票张数( 单程一人一张票,联程一人两张票 ) |
| customerOrderNo | string | 采购商订单号 |
| orderNo12306 | string | 12306订单号,即E打头的取票号,出票成功才有值 |
| orderStatus | int | 订单状态枚举值( 新订单待支付 = 2, 已支付待出票 = 100 , 出票中 = 7 , 出票成功 = 8 , 出票失败 = 9 , 已取消 = 5 ) , 是否出票成功以该字段为准 |
| payStatus | int | 支付状态(0未支付 1已支付) |
| payTime | string | 支付时间,支付成功才有值,如:2025-01-12 23:00:22 |
| ticketTime | string | 出票时间,出票成功才有值,如:2025-01-12 23:01:53 |
| contactName | string | 联系人 |
| contactMobile | string | 联系人手机号 |
| callbackUrl | string | 出票结果回调地址 |
| refundTicketCallbackUrl | string | 退票结果回调地址 |
| unFinishedReason | string | 当出票失败时,失败原因。可通过该字段查看是什么原因出票失败 |
| refundAmount | decimal | 出票失败退款金额 或 出票成功价差退款金额 |
| refundSuccessTime | string | 出票失败退款 或 出票成功价差退款的退款成功时间 |
| createTime | string | 下单时间 |
| trainSegments | TrainSegment[] | 车程信息(当trainRangeType为0=单程时,车程数组长度为1,当trainRangeType为1=联程时,车程数组长度为2) |
| trainSegmentID | string | 车程ID(单程就是订单号;联程时第一程就是:订单号_1 , 第二程就是:订单号_2 ) |
| trainCode | string | 车次号 |
| fromStation | string | 出发站 |
| toStation | string | 到达站 |
| fromDateTime | string | 出发日期及时间(精确到分钟) |
| toDateTime | string | 到达日期及时间(精确到分钟) |
| ticketEntrance | string | 检票口 |
| tickets | Ticket[] | 客票信息,(对象数组,长度 和下单的乘客人数一致) |
| passengerID | int | 客票ID,值唯一。申请退票时需要传入此值,建议在出票成功时和车厢、座位号等信息一起保存到本地 |
| name | string | 乘客姓名 |
| cardType | int | 证件类型( 身份证 = 1,护照 = 2, 港澳居民来往内地通行证 = 3 , 台湾居民来往大陆通行证 = 4 ,外国人永久居留身份证 = 8 ,港澳台居民居住证 = 9 ) |
| cardNo | string | 证件号码 |
| mobile | string | 手机号 |
| birthday | string | 出生日期 |
| sex | string | 性别(对应枚举Sex值 0=未知 1=男 2=女) |
| cardValidEndDate | string | 证件有效期截止日期 |
| countryCode | string | 国家/地区(代码),当证件类型是外国人永久居留身份证和护照时需要填写 |
| ticketType | int | 票种类型(对应枚举TrainTicketType值: 成人票 = 1,儿童票 = 2, 学生票 = 3, 残军票 = 4) |
| seatType | int | 席别类型(商务座 = 1,特等座 = 2,一等座 = 3,二等座 = 4,高级软卧 = 5,软卧 = 6,动卧 = 7 ,硬卧 = 8,软座 = 9,硬座 = 10,一等卧 = 11,二等卧 = 12,高级动卧 = 13, 一等软座 = 14 , 二等软座 = 15, 特等软座 = 16, 包厢硬卧 = 17, 一人软包 = 18, 多功能座 = 19, 无座 =98,其他 = 99) |
| ticketPrice | decimal | 实际出票价(出票成功才有值哦) |
| preTicketPrice | decimal | 下单时传入的预收票价( 卧铺按照下铺收,儿童按照成人收 ) |
| carriageNo | string | 车厢号(出票成功才有值哦) |
| seatNo | string | 座位号(出票成功才有值哦) |
| ticketStatus | int | 客票状态( 待出票 = 1 , 出票成功 = 2 , 已改签 = 3 , 已退票 = 99) |
| appRefundTicketTime | string | (出票成功后)申请退票时间(多次申请为最后一次申请时间,未申请的该值为空) |
| refundOrderStatus | int | 退票(单)状态 (未申请 = 0 , 退票处理中 = 1 , 已退票 = 2 , 退票失败 = 9。 PS:当该值为1/2时不可再次重复提交退票申请亦不可提交改签;当值为0/9时可提交退票申请。。当状态为已退票=2时,是否退款成功可根据refundSuccessTime是否有值判断) |
| isAppChaIng | bool | 是否正在改签中,当该票正在申请改签时会被标记为true,当为true时(即该票正在改签中)不得再次申请退改,防止同一时刻一张票重复申请退改用 |
| refundAmount | decimal | 退票退款/改签成功退款的退款金额 (默认为0,当退票成功或改签成功时 才有值) |
| refundSuccessTime | string | 退票退款/改签成功退款的退款成功时间(退款成功才有值哦,可根据该值是否为空判断是否退款成功) |
| refundTicketWay | int | 退票方式:1:线上 , 2:线下 (退票成功才有值)。只有1:线上退票的才收退票服务费 |
| refundFailReason | string | (退票)退款失败原因 |
| refundTicketServiceFee | decimal | 退票服务费(线上退票成功才收取) |
| refundTicketServiceFee_PayTime | string | 退票服务费支付成功时间(有值表示已扣取,空表示未扣取) |
| changeOrders | ChangeOrder[] | 改签单信息(当前主订单下所有的改签单,对象数组,ChangeOrder类型的字段注释 请查看改签详情接口的响应参数中的data类型注释,完全一模一样),,PS:订单详情接口已经返回主订单下的所有改签单的详情,所以调用订单详情的话就没必要再调用【改签单详情接口】 |
{
"data": {
"orderNo": "TX25011319184407831",
"trainRangeType": 0,
"totalTicketPriceAmount": 202.50,
"totalPreTicketPriceAmount": 232.50,
"totalOutTicketServiceFee": 13.50,
"outTicketServiceFeePerTicket": 4.50,
"numberOfTickets": 3,
"customerOrderNo": "2025011022150055",
"orderNo12306": "55555",
"orderStatus": 4,
"payStatus": 1,
"payTime": "2025-01-13 19:18:56",
"ticketTime": "2025-01-13 19:19:59",
"contactName": "张三",
"contactMobile": "13912345678",
"callbackUrl": "https://xxxxxx/outTicketResultCallback",
"refundTicketCallbackUrl": "https://xxxxxx/refundTicketResultCallback",
"unFinishedReason": null,
"refundAmount": 30.00,
"refundSuccessTime": "2025-01-13 19:19:59",
"createTime": "2025-01-13 19:18:44",
"trainSegments": [
{
"trainSegmentID": "TX25011319184407831",
"trainCode": "K1158",
"fromStation": "合肥",
"toStation": "蚌埠",
"fromDateTime": "2025-01-15 06:02:00",
"toDateTime": "2025-01-15 08:15:00",
"ticketEntrance": null,
"tickets": [
{
"passengerID": 152,
"name": "张三",
"cardType": 1,
"cardNo": "340123197209183099",
"mobile": "13912345678",
"birthday": "1972-09-18",
"sex": 0,
"cardValidEndDate": null,
"countryCode": null,
"ticketType": 1,
"seatType": 8,
"ticketPrice": 57.50,
"preTicketPrice": 77.50,
"carriageNo": "01",
"seatNo": "12上铺",
"ticketStatus": 2,
"appRefundTicketTime": null,
"refundOrderStatus": 0,
"isAppChaIng": false,
"refundAmount": 0.00,
"refundSuccessTime": null,
"refundTicketWay": null,
"refundFailReason": null
},
{
"passengerID": 153,
"name": "李四",
"cardType": 1,
"cardNo": "441721198812150039",
"mobile": "13912345678",
"birthday": "1988-12-15",
"sex": 0,
"cardValidEndDate": null,
"countryCode": null,
"ticketType": 1,
"seatType": 8,
"ticketPrice": 67.50,
"preTicketPrice": 77.50,
"carriageNo": "01",
"seatNo": "12中铺",
"ticketStatus": 3,
"appRefundTicketTime": null,
"refundOrderStatus": 0,
"isAppChaIng": false,
"refundAmount": 67.50,
"refundSuccessTime": "2025-01-13 19:33:56",
"refundTicketWay": null,
"refundFailReason": null
},
{
"passengerID": 154,
"name": "王二",
"cardType": 1,
"cardNo": "620821200112042422",
"mobile": "13912345670",
"birthday": "2001-12-04",
"sex": 0,
"cardValidEndDate": null,
"countryCode": null,
"ticketType": 1,
"seatType": 8,
"ticketPrice": 77.50,
"preTicketPrice": 77.50,
"carriageNo": "01",
"seatNo": "12下铺",
"ticketStatus": 3,
"appRefundTicketTime": null,
"refundOrderStatus": 0,
"isAppChaIng": false,
"refundAmount": 15.00,
"refundSuccessTime": "2025-01-13 19:33:56",
"refundTicketWay": null,
"refundFailReason": null
}
]
}
],
"changeOrders": [
{
"chaNo": "TX25011319184407831C1296",
"orderNo": "TX25011319184407831",
"oldTrainSegmentID": "TX25011319184407831",
"trainCode": "K1158",
"fromStation": "合肥",
"toStation": "蚌埠",
"fromDateTime": "2025-01-20 06:02:00",
"toDateTime": "2025-01-20 08:15:00",
"ticketEntrance": null,
"chaOrderStatus": 4,
"totalOldTicketPriceAmount": 57.50,
"totalChaTicketPriceAmount": null,
"totalPrePayAmount": 80.50,
"total12306RealPayAmount": null,
"total12306RealRefundAmount": null,
"confirmChangeTime": "2025-01-13 23:03:14",
"changeSuccessTime": null,
"payStatus": 1,
"refundAmount": 80.50,
"refundTime": "2025-01-13 23:04:40",
"numberOfTickets": 1,
"totalChangeTicketServiceFee": 13.50,
"changeTicketServiceFeePerTicket": 13.50,
"changeTicketServiceFee_PayTime": null,
"callbackUrl": "https://xxxxxx/changeCallback",
"confirmChangeLimitTime": "2025-01-13 23:32:50",
"unFinishedReason": "余票不足",
"psgNames": "张三,",
"createTime": "2025-01-13 23:02:50",
"changeTickets": [
{
"passengerID": 152,
"name": "张三",
"cardType": 1,
"cardNo": "340123197209183099",
"ticketType": 1,
"seatType": 10,
"oldTicketPrice": 57.50,
"ticketPrice": null,
"preTicketPrice": 77.50,
"priceChangeType": 1,
"changeRate": 0.05,
"changeFee": 3.00,
"diffRate": 0.00,
"diffRefundFee": 0.00,
"prePayAmount": 80.50,
"realRefundAmount": null,
"realPayAmount": null,
"carriageNo": null,
"seatNo": null,
"ticketStatus": 4,
"appRefundTicketTime": null,
"refundOrderStatus": 0,
"refundTicketAmount": 0.00,
"refundSuccessTime": null,
"refundTicketWay": null,
"refundFailReason": null,
"refundTicketServiceFee": 13.50,
"refundTicketServiceFee_PayTime": null
}
]
},
{
"chaNo": "TX25011319184407831C5513",
"orderNo": "TX25011319184407831",
"oldTrainSegmentID": "TX25011319184407831",
"trainCode": "K1158",
"fromStation": "合肥",
"toStation": "蚌埠",
"fromDateTime": "2025-01-20 06:02:00",
"toDateTime": "2025-01-20 08:15:00",
"ticketEntrance": null,
"chaOrderStatus": 3,
"totalOldTicketPriceAmount": 145.00,
"totalChaTicketPriceAmount": 135.00,
"totalPrePayAmount": 85.00,
"total12306RealPayAmount": 81.00,
"total12306RealRefundAmount": 82.50,
"confirmChangeTime": "2025-01-13 19:20:13",
"changeSuccessTime": "2025-01-13 19:33:51",
"payStatus": 1,
"refundAmount": 4.00,
"refundTime": "2025-01-13 19:33:54",
"numberOfTickets": 2,
"totalChangeTicketServiceFee": 27.00,
"changeTicketServiceFeePerTicket": 13.50,
"changeTicketServiceFee_PayTime": "2025-01-13 19:33:55",
"callbackUrl": "https://xxxxxx/changeCallback",
"confirmChangeLimitTime": "2025-01-13 19:50:08",
"unFinishedReason": null,
"psgNames": "李四,王二,",
"createTime": "2025-01-13 19:20:08",
"changeTickets": [
{
"passengerID": 153,
"name": "李四",
"cardType": 1,
"cardNo": "441721198812150039",
"ticketType": 1,
"seatType": 10,
"oldTicketPrice": 67.50,
"ticketPrice": 77.50,
"preTicketPrice": 77.50,
"priceChangeType": 1,
"changeRate": 0.05,
"changeFee": 3.50,
"diffRate": 0.10,
"diffRefundFee": 0.00,
"prePayAmount": 81.00,
"realRefundAmount": 67.50,
"realPayAmount": 81.00,
"carriageNo": "08",
"seatNo": "09下铺",
"ticketStatus": 5,
"appRefundTicketTime": null,
"refundOrderStatus": 0,
"refundTicketAmount": 0.00,
"refundSuccessTime": null,
"refundTicketWay": null,
"refundFailReason": null,
"refundTicketServiceFee": 13.50,
"refundTicketServiceFee_PayTime": null
},
{
"passengerID": 154,
"name": "王二",
"cardType": 1,
"cardNo": "620821200112042422",
"ticketType": 1,
"seatType": 10,
"oldTicketPrice": 77.50,
"ticketPrice": 57.50,
"preTicketPrice": 77.50,
"priceChangeType": 3,
"changeRate": 0.05,
"changeFee": 3.00,
"diffRate": 0.10,
"diffRefundFee": 2.00,
"prePayAmount": 4.00,
"realRefundAmount": 15.00,
"realPayAmount": 0.00,
"carriageNo": "08",
"seatNo": "09上铺",
"ticketStatus": 5,
"appRefundTicketTime": null,
"refundOrderStatus": 0,
"refundTicketAmount": 0.00,
"refundSuccessTime": null,
"refundTicketWay": null,
"refundFailReason": null,
"refundTicketServiceFee": 13.50,
"refundTicketServiceFee_PayTime": null
}
]
}
]
},
"success": true,
"msg": "请求成功"
}
该接口是获取单个改签单的详情(不含主订单信息),因为【订单详情接口】响应参数中已经返回了所有改签单信息(字段changeOrders),所以该接口是可选择性的对接(PS:主要是用于根据改签单号同步单个改签单时用)。
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 接口账户appKey |
| chaNo | string | 是 | 改签单号(就是【改签下单接口】返回的那个改签单号,非订单号(orderNo) ) |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 是否获取成功 |
| msg | string | 获取失败时原因(只要改签单号无误,都会获取成功,除非服务器异常了) |
| data | ChangeOrder | 业务参数,改签单详情类型,和【订单详情接口】响应参数中的changeOrders数组类型,是同一个类型 |
| chaNo | string | 改签单号 |
| orderNo | string | 订单号 |
| oldTrainSegmentID | string | 原订单车程ID( 对应 订单详情中的 trainSegments—>trainSegmentID车程ID字段 ),在联程订单中通过该值可以判断当前的改签是第一程的改签,还是第二程的改签 |
| trainCode | string | 改签后的车次号 |
| fromStation | string | 改签后的出发站 |
| toStation | string | 改签后的到达站 |
| FromDateTime | string | 改签后的出发日期时间(精确到分钟,如: 2024-11-25 16:30) |
| toDateTime | string | 改签后的到达日期时间(精确到分钟,如: 2024-11-25 16:30) |
| ticketEntrance | string | 检票口 |
| chaOrderStatus | int | 改签单状态(改签待支付或待确认 = 1 , 改签处理中 = 2 , 改签成功 = 3 , 改签失败 = 4 , 改签已取消 = 9 ),,是否改签成功以此字段值为准哦,当且仅当该值等于 3 时才是改签成功 |
| totalOldTicketPriceAmount | decimal | 改签单中所有乘客原客票的实际出票票款之和,即改签单总的原票实际出票票款。 |
| totalChaTicketPriceAmount | decimal | 改签单中所有改签新客票的实际出票票价之和,即改签单总的新客票实际出票票款金额 (改签成功才有值哦) |
| totalPrePayAmount | decimal | 整个改签单总的改签预收款金额(如果涉及改签收费的,该值为确认改签时需要预收的改签单总金额,为0表示改签时无需支付预收款)。PS:如果改签成功时实际应付的总金额小于该值时,在改签成功时系统会自动退差额 |
| total12306RealPayAmount | decimal | 改签单(总的)12306实际支付金额,改签成功才有值。PS:如果在改签成功时该值小于totalPrePayAmount值时,系统会自动退差额 |
| total12306RealRefundAmount | decimal | 改签单(总的)12306实际退款金额,改签成功才有值。 |
| confirmChangeTime | string | 调用【改签确认/支付接口】接口来确认改签的时间 |
| changeSuccessTime | string | 改签成功的时间 |
| payStatus | int | 当改签单需要预支付时(即totalPrePayAmount >0),改签单的支付状态:0未支付 1已支付 |
| refundAmount | decimal | 改签失败退款或改签成功预收差价退款的 退款金额 |
| refundTime | string | 改签失败退款或改签成功预收差价退款的退款时间 |
| numberOfTickets | int | 改签单中的改签客票数 |
| totalChangeTicketServiceFee | decimal | 改签单总的改签服务费(改签成功才会收取) |
| changeTicketServiceFeePerTicket | decimal | 单张票的改签服务费 |
| changeTicketServiceFee_PayTime | string | 改签服务费支付成功时间(改签成功时改签服务费自动扣取成功后才会有值) |
| callbackUrl | string | 改签结果异步回调地址 (在改签下单接口中传入的) |
| confirmChangeLimitTime | string | 确认改签时间限制(超过此时限将无法确认),现在是改签下单后的30分钟,比如是在 2025-01-01 10:00:00 改签下单的,则该值为顺延30分钟后的时间点,即: 2025-01-01 10:30:00 |
| unFinishedReason | string | 当改签失败时原因(常见原因如:余票不足、超时未确认改签自动取消等) |
| createTime | string | 改签单申请时间 |
| changeTickets | ChangeTicket[] | 改签客票对象数组(长度=当前改签单的改签人数) |
| passengerID | int | 客票ID(同原票的客票ID) |
| name | string | 乘客姓名 |
| cardType | int | 证件类型( 身份证 = 1,护照 = 2, 港澳居民来往内地通行证 = 3 , 台湾居民来往大陆通行证 = 4 ,外国人永久居留身份证 = 8 ,港澳台居民居住证 = 9 ) |
| cardNo | string | 证件号码 |
| ticketType | int | 票种类型( 成人票 = 1,儿童票 = 2, 学生票 = 3, 残军票 = 4) |
| seatType | int | 改签新票的席别类型(商务座 = 1,特等座 = 2,一等座 = 3,二等座 = 4,高级软卧 = 5,软卧 = 6,动卧 = 7 ,硬卧 = 8,软座 = 9,硬座 = 10,一等卧 = 11,二等卧 = 12,高级动卧 = 13, 一等软座 = 14 , 二等软座 = 15, 特等软座 = 16, 包厢硬卧 = 17, 一人软包 = 18, 多功能座 = 19, 无座 =98,其他 = 99) |
| oldTicketPrice | decimal | 原票的实际出票价 |
| ticketPrice | decimal | 改签新票的实际出票价(改签成功才有值哦) |
| preTicketPrice | decimal | 改签新票的预收票价( 卧铺按照下铺收,儿童按照成人收 ),改签下单时传入的 |
| priceChangeType | int | 当前客票改签后,价格变动类型:新票款高于原票款 = 1 , 新票款等于原票款 = 2 , 新票款低于原票款 = 3 (改签成功后该值才是准确的,改签成功之前是根据传入的PreTicketPrice判断的) |
| changeRate | decimal | 改签费率,如 0,0.05,0.15,0.4 |
| changeFee | decimal | 改签费 |
| diffRate | decimal | 改签差额退票手续费率,默认 0,如 0,0.05 |
| diffRefundFee | decimal | 高改低差额退票的手续费 = (高原票价 - 新低票价)* 改签差额退票手续费率diffRate |
| prePayAmount | decimal | 当前改签乘客预收款,大于0表示需要预付,计算规则:同改时=改签费,低改高时=新票价+改签费,高改低时 = Max( 改签费+票款差额退票费 - 票款差额,0) |
| realRefundAmount | decimal | 改签(成功)实际退款金额(改签成功才有值哦) |
| realPayAmount | decimal | 改签(成功)实际支付金额(改签成功才有值哦) |
| carriageNo | string | 改签新票的车厢号(改签成功才有值哦) |
| seatNo | string | 改签新票的座位号(改签成功才有值哦) |
| ticketStatus | int | 改签新票的客票状态(待改签 = 4, 改签成功 = 5 , 已退票 = 99) |
| appRefundTicketTime | string | 申请退票时间(多次申请,为最后一次申请时间) |
| refundOrderStatus | int | 退票(单)状态 ( 未申请 = 0 , 退票处理中 = 1 , 已退票待退款 = 2 , 已退票退款中 = 3, 已退票已退款 = 4, 退票失败 = 9。 PS:当该值为1/2/3/4时不可再次重复提交退票申请;当值为0/9时可提交退票申请) |
| refundTicketAmount | decimal | 退票退款金额(改签票退票成功才有值) |
| refundSuccessTime | string | 退票退款成功时间(改签票退票退款成功才有值) |
| refundTicketWay | int | 退票方式:1:线上 , 2:线下 (退票成功才有值)。只有1:线上退票的才收退票服务费 |
| refundFailReason | string | (退票)退款失败原因 |
| refundTicketServiceFee | decimal | 单张票的退票服务费 (退票成功后收取) |
| refundTicketServiceFee_PayTime | string | 退票服务费支付成功时间(有值表示已收取,空表示未收取) |
{
"data": {
"chaNo": "TX25011319184407831C5513",
"orderNo": "TX25011319184407831",
"oldTrainSegmentID": "TX25011319184407831",
"trainCode": "K1158",
"fromStation": "合肥",
"toStation": "蚌埠",
"fromDateTime": "2025-01-20 06:02:00",
"toDateTime": "2025-01-20 08:15:00",
"ticketEntrance": null,
"chaOrderStatus": 3,
"totalOldTicketPriceAmount": 145.00,
"totalChaTicketPriceAmount": 135.00,
"totalPrePayAmount": 85.00,
"total12306RealPayAmount": 81.00,
"total12306RealRefundAmount": 82.50,
"confirmChangeTime": "2025-01-13 19:20:13",
"changeSuccessTime": "2025-01-13 19:33:51",
"payStatus": 1,
"refundAmount": 4.00,
"refundTime": "2025-01-13 19:33:54",
"numberOfTickets": 2,
"totalChangeTicketServiceFee": 27.00,
"changeTicketServiceFeePerTicket": 13.50,
"changeTicketServiceFee_PayTime": "2025-01-13 19:33:55",
"callbackUrl": "https://xxxxxx/changeCallback",
"confirmChangeLimitTime": "2025-01-13 19:50:08",
"unFinishedReason": null,
"createTime": "2025-01-13 19:20:08",
"changeTickets": [
{
"passengerID": 153,
"name": "李四",
"cardType": 1,
"cardNo": "441721198812150039",
"ticketType": 1,
"seatType": 10,
"oldTicketPrice": 67.50,
"ticketPrice": 77.50,
"preTicketPrice": 77.50,
"priceChangeType": 1,
"changeRate": 0.05,
"changeFee": 3.50,
"diffRate": 0.10,
"diffRefundFee": 0.00,
"prePayAmount": 81.00,
"realRefundAmount": 67.50,
"realPayAmount": 81.00,
"carriageNo": "08",
"seatNo": "09下铺",
"ticketStatus": 5,
"appRefundTicketTime": null,
"refundOrderStatus": 0,
"refundTicketAmount": 0.00,
"refundSuccessTime": null,
"refundTicketWay": null,
"refundFailReason": null,
"refundTicketServiceFee": 13.50,
"refundTicketServiceFee_PayTime": null
},
{
"passengerID": 154,
"name": "王二",
"cardType": 1,
"cardNo": "620821200112042422",
"ticketType": 1,
"seatType": 10,
"oldTicketPrice": 77.50,
"ticketPrice": 57.50,
"preTicketPrice": 77.50,
"priceChangeType": 3,
"changeRate": 0.05,
"changeFee": 3.00,
"diffRate": 0.10,
"diffRefundFee": 2.00,
"prePayAmount": 4.00,
"realRefundAmount": 15.00,
"realPayAmount": 0.00,
"carriageNo": "08",
"seatNo": "09上铺",
"ticketStatus": 5,
"appRefundTicketTime": null,
"refundOrderStatus": 0,
"refundTicketAmount": 0.00,
"refundSuccessTime": null,
"refundTicketWay": null,
"refundFailReason": null,
"refundTicketServiceFee": 13.50,
"refundTicketServiceFee_PayTime": null
}
]
},
"success": true,
"msg": "请求成功"
}
目前支持中国(含港澳台)乘客客票使用,外籍暂不支持。
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的AppKey |
| passengerName | string | 是 | 乘客姓名 |
| cardType | int | 是 | 乘客证件类型( 身份证 = 1,护照 = 2, 港澳居民来往内地通行证 = 3 , 台湾居民来往大陆通行证 = 4 ,外国人永久居留身份证 = 8 ,港澳台居民居住证 = 9 ) |
| cardNo | string | 是 | 证件号,必须是明文,不得带* |
| mobileCode | string | 是 | 手机号国家/地区代码(中国大陆传86,中国香港传852,中国澳门传853,中国台湾传886,,其他地区不支持)快捷退票 |
| mobile | string | 是 | 手机号 |
| fromStation | string | 是 | 出发站 |
| toStation | string | 是 | 到达站 |
| orderNo12306 | string | 是 | 12306 E字头订单号 |
| trainCode | string | 是 | 车次号 |
| fromDate | string | 是 | 发车日期(yyyy-MM-dd格式,如(2025-01-01)) |
| orderNo | string | 是 | 磐河线下火车票订单号(默认必传,如果想通过此接口退不在我司采购的客票,请联系商务开通) |
| photos | List<string> | 是 | 照片集合,至少1张,最多2张。(先将每张照片文件 通过 文件流 读取到字节数组中,再将 byte[] 通过Base64转成字符串)PS: 照片要求: 图片文件大小控制在:100k以内,对于文件较大图片可以等比缩放压缩处理,不能带眼镜 |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 是否退票成功 |
| msg | string | 失败原因 |
| refundTicketAmount | decimal | 退款金额,退票成功有值(仅供参考,实际退款请以退款回调为准) |
| refundTicketPoundage | decimal | 退票手续费,退票成功有值(仅供参考,实际退款请以退款回调为准) |
{
"appKey": "您申请的AppKey",
"passengerName": "张丹",
"cardType": 1,
"cardNo": "证件号明文",
"mobileCode": "86",
"mobile": "手机号明文",
"fromStation": "昆山",
"toStation": "苏州",
"orderNo12306": "EBW1939736",
"trainCode": "1462",
"fromDate": "2026-05-29",
"orderNo": "TX26052216080887868",
"photos": [
"人脸照加密文件"
]
}
成功示例:
{
"data": {
"refundTicketPoundage": "0.00",
"refundTicketAmount": "7.00"
},
"success": true,
"msg": "请求成功"
}
失败示例:
{
"data": null,
"success": false,
"msg": "未查询到该车票"
}
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的AppKey |
| trainAccount | string | 是 | 12306账号-密文 |
| trainPassword | string | 是 | 12306密码-密文 |
| fromStation | string | 是 | 出发站 |
| toStation | string | 是 | 到达站 |
| orderNo12306 | string | 是 | 12306E字单号 |
| orderNo | string | 是 | 磐河线下火车票订单号(默认必传,如果想通过此接口退不在我司采购的客票,请联系商务开通) |
| passengerName | string | 是 | 乘车人姓名【目前仅退账号本人车票,所以传账号本人姓名】 |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 退票是否成功 |
| msg | string | 失败原因 |
| ticketPrice | decimal | 原票价,退票成功有值 |
| refundTicketPoundage | decimal | 退票手续费,退票成功有值(仅供参考,实际金额请以退款回调为准) |
| refundTicketAmount | decimal | 退款金额,退票成功有值(仅供参考,实际金额请以退款回调为准) |
{
"appKey": "您申请的APPKey",
"trainAccount": "12306账号-密文",
"trainPassword": "12306密码-密文",
"fromStation": "苏州园区",
"toStation": "阳澄湖",
"orderNo12306": "E6W6467925",
"orderNo": "TX26052216080887868",
"passengerName":"张三"
}
请求成功示例:
{
"data": {
"ticketPrice": "8.00",
"refundTicketPoundage": "0.00",
"refundTicketAmount": "8.00"
},
"success": true,
"msg": "请求成功"
}
请求失败示例:
{
"data": null,
"success": false,
"msg": "未获取到符合退票车票信息"
}
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的AppKey |
| trainAccount | string | 是 | 12306账号-密文 |
| trainPassword | string | 是 | 12306密码-密文 |
| customerOrderNo | string | 是 | 商户单号(用于关联映射) |
| orderNo | string | 否 | 磐河线下火车票订单号(默认必传,如果想通过此接口改签不在我司采购的客票,请联系商务开通) |
| orderNo12306 | string | 是 | 12306E字单号 |
| isUserSelfPay | bool | 是 | 是否选择客付,目前只支持客付模式 |
| passengerName | string | 是 | 乘客姓名 |
| cardType | int | 是 | 乘客证件类型( 身份证 = 1,护照 = 2, 港澳居民来往内地通行证 = 3 , 台湾居民来往大陆通行证 = 4 ,外国人永久居留身份证 = 8 ,港澳台居民居住证 = 9 ) |
| cardNo | string | 是 | 乘客证件号 |
| trainCode | string | 是 | 改签车次号 |
| fromStation | string | 是 | 改签出发站 |
| toStation | string | 是 | 改签到达站 |
| fromDateTime | string | 是 | 改签出发日期及时间,格式:yyyy-MM-dd HH:mm,如2026-05-27 12:56 |
| toDateTime | string | 是 | 改签到达日期及时间,格式:yyyy-MM-dd HH:mm,如2026-05-27 13:20 |
| seatType | int | 是 | 改签坐席类型(商务座 = 1,特等座 = 2,一等座 = 3,二等座 = 4,高级软卧 = 5,软卧 = 6,动卧 = 7 ,硬卧 = 8,软座 = 9,硬座 = 10,一等卧 = 11,二等卧 = 12,高级动卧 = 13, 一等软座 = 14 , 二等软座 = 15, 特等软座 = 16, 包厢硬卧 = 17, 一人软包 = 18, 多功能座 = 19, 无座 =98,其他 = 99) |
| ticketType | int | 是 | 火车票票种( 成人票 = 1,儿童票 = 2, 学生票 = 3, 残军票 = 4) |
| chooseSeats | string | 否 | 选座信息(选座个数要和乘客数量一致,如:1A1D2B2C2F 其中数字代表第几排 12306只能从2排10个位置中选择) |
| chooseSleeper | string | 否 | 选铺信息:三位阿拉伯数字组成 ( 第一位:下铺张数 100; 第二位:中铺张数 010; 第三位:上铺张数 001 ) ,如:203:代表2张下铺0张中铺3张上铺,不选:空或000 |
| old_TrainCode | string | 是 | 原票车次号 |
| old_FromStation | string | 是 | 原票出发站 |
| old_ToStation | string | 是 | 原票到达站 |
| old_FromDateTime | string | 是 | 原票车次出发日期及时间,格式:yyyy-MM-dd HH:mm,如2026-05-27 12:56 |
| old_ToDateTime | string | 是 | 原票车次到达日期及时间,格式:yyyy-MM-dd HH:mm,如2026-05-27 12:56 |
| old_SeatType | int | 是 | 原票席别类型(商务座 = 1,特等座 = 2,一等座 = 3,二等座 = 4,高级软卧 = 5,软卧 = 6,动卧 = 7 ,硬卧 = 8,软座 = 9,硬座 = 10,一等卧 = 11,二等卧 = 12,高级动卧 = 13, 一等软座 = 14 , 二等软座 = 15, 特等软座 = 16, 包厢硬卧 = 17, 一人软包 = 18, 多功能座 = 19,优选一等座 = 20, 无座 =98,其他 = 99) |
| old_TicketPrice | decimal | 是 | 原票票价 |
| old_TicketNo | string | 是 | 原票票号 |
| old_SeatNo | string | 是 | 原车票座位号 |
| callBackUrl | string | 是 | 本人车票改签单状态变更回调地址 |
| photo | string | 否 | 先将人脸照片文件 通过 文件流 读取到字节数组中,再将字节数组 byte[] 通过Base64转成字符串(通过【账号登录接口】进行人脸核验登录成功后可不传,否则必传) |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 改签申请是否成功 |
| msg | string | 失败时失败原因 |
| data | string | 改签单号,申请成功时有值 |
{
"appKey": "您申请的APPKey",
"trainAccount": "12306账号-密文",
"trainPassword": "12306密码-密文",
"customerOrderNo": "12233",
"orderNo": null,
"orderNo12306": "ECW3211229",
"isUserSelfPay": true,
"passengerName": "张三",
"cardType": 1,
"cardNo": "3425***********780",
"trainCode": "1462",
"fromStation": "昆山",
"toStation": "苏州",
"fromDateTime": "2026-05-27 12:56:00",
"toDateTime": "2026-05-27 13:20:00",
"seatType": 10,
"ticketType": 1,
"chooseSeats": null,
"chooseSleeper": null,
"old_TrainCode": "1462",
"old_FromStation": "昆山",
"old_ToStation": "苏州",
"old_FromDateTime": "2026-05-26 12:56:00",
"old_ToDateTime": "2026-05-26 13:20:00",
"old_SeatType": 10,
"old_TicketPrice": 7.0,
"old_TicketNo": "ECW32112291120049",
"old_SeatNo": "12车厢,049号",
"callBackUrl": "回调地址"
}
{
"data": "TSC26051717274260043",
"success": true,
"msg": "请求成功"
}
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的Appkey |
| chaNo | string | 是 | 本人车票改签单号 |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 取消是否成功 |
| msg | string | 失败原因 |
{
"appKey": "您申请的Appkey",
"chaNo":"TSC26051722503163946"
}
失败示例:
{
"data": null,
"success": false,
"msg": "当前改签单状态(改签占位失败)不允许取消"
}
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的Appkey |
| chaNo | string | 是 | 本人车票改签单号 |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 确认是否成功 |
| msg | string | 失败原因 |
{
"appKey": "您申请的Appkey",
"chaNo":"TSC26051722503163946"
}
失败示例:
{
"data": null,
"success": false,
"msg": "当前改签单状态(改签占位失败)不允许确认改签"
}
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 是 | 您申请的AppKey |
| chaNo | string | 是 | 改签单号 |
| 参数名称 | 类型 | 说明 |
|---|---|---|
| success | bool | 是否获取成功 |
| msg | string | 获取失败时失败原因 |
| chaNo | string | 改签单号 |
| orderNo | string | 线下火车票订单号 |
| customerOrderNo | string | 商户单号 |
| orderNo12306 | string | 12306E字单号 |
| chaOrderStatus | int | 改签单状态值(改签占位中=30,改签占位成功=31,改签占位失败=32,改签确认出票中=33,改签确认出票成功=34,改签确认出票失败=35,改签已取消=37 ) |
| chaOrderStatusName | string | 改签单状态名称 |
| needRefundAmount | decimal | 改签待退款金额,大于0表示改签成功后需要退款,,改签占位成功才有值。低改时等于 (差额扣除改签手续费和差额部分退票手续费后的)实际应退金额,高改时等于原票款合计(因为高改是 退旧付新),平改此值为0 |
| diffRate | decimal | 改签差额退票手续费率,默认 0,如 0,0.05 ,改签占位成功才有值 |
| diffRefundFeeAmount | decimal | 改签差额退票手续费,改签占位成功才有值 |
| changRate | decimal | 改签手续费-费率 ,改签占位成功才有值 |
| changFeeAmount | decimal | 改签手续费 ,改签占位成功才有值 |
| needPayAmount | decimal | 改签单待支付金额(大于0表示需要支付) ,,改签占位成功才有值 |
| priceChangeType | int | 改签票价变动类型(对应枚举ChaPriceChangeType值:待确定 = 0 , 1高改 2 同改 3低改 ) |
| priceChangeTypeInfo | string | 改签票款异动信息(与PriceChangeType对应) |
| isUserSelfPay | bool | 是否客付,目前仅支持客付,,代付已不支持 |
| passengerName | string | 乘客姓名 |
| cardType | int | 乘客证件类型( 身份证 = 1,护照 = 2, 港澳居民来往内地通行证 = 3 , 台湾居民来往大陆通行证 = 4 ,外国人永久居留身份证 = 8 ,港澳台居民居住证 = 9 ) |
| cardNo | string | 乘客证件号码 |
| ticketType | int | 火车票票种( 成人票 = 1,儿童票 = 2, 学生票 = 3, 残军票 = 4) |
| trainCode | string | 改签车次号 |
| fromStation | string | 改签出发站 |
| toStation | string | 改签到达站 |
| fromDateTime | string | 改签车次出发日期及时间 |
| toDateTime | string | 改签车次到达日期及时间 |
| chooseSeats | string | 改签选座信息 |
| chooseSleeper | string | 改签选铺信息:三位阿拉伯数字组成 ( 第一位:下铺张数 100; 第二位:中铺张数 010; 第三位:上铺张数 001 ) ,如:203:代表2张下铺0张中铺3张上铺,不选:空或000 |
| seatType | int | 改签席别类型(商务座 = 1,特等座 = 2,一等座 = 3,二等座 = 4,高级软卧 = 5,软卧 = 6,动卧 = 7 ,硬卧 = 8,软座 = 9,硬座 = 10,一等卧 = 11,二等卧 = 12,高级动卧 = 13, 一等软座 = 14 , 二等软座 = 15, 特等软座 = 16, 包厢硬卧 = 17, 一人软包 = 18, 多功能座 = 19,优选一等座 = 20, 无座 =98,其他 = 99) |
| ticketPrice | decimal | 改签车票票价(占位成功后有值) |
| seatNo | string | 改签座位号(占位成功后有值) |
| ticketEntrance | string | 改签新票 检票口 |
| old_TrainCode | string | 原票车次号 |
| old_FromStation | string | 原票出发站 |
| old_ToStation | string | 原票到达站 |
| old_FromDateTime | string | 原票车次出发日期及时间 |
| old_ToDateTime | string | 原票车次到达日期及时间 |
| old_SeatType | int | 原票席别类型(商务座 = 1,特等座 = 2,一等座 = 3,二等座 = 4,高级软卧 = 5,软卧 = 6,动卧 = 7 ,硬卧 = 8,软座 = 9,硬座 = 10,一等卧 = 11,二等卧 = 12,高级动卧 = 13, 一等软座 = 14 , 二等软座 = 15, 特等软座 = 16, 包厢硬卧 = 17, 一人软包 = 18, 多功能座 = 19,优选一等座 = 20, 无座 =98,其他 = 99) |
| old_TicketPrice | decimal | 原票票价 |
| old_TicketNo | string | 原车票票号 |
| old_SeatNo | string | 原票座位号 |
| callbackUrl | string | 订单状态变更异步回调地址 |
| unFinishedReason | string | 改签单未完成(出票)原因 |
| confirmChangeLimitTime | string | 确认改签时间限制(超过此时限将无法确认) |
| createTime | string | 改签单申请时间 |
{
"data": {
"chaNo": "TSC26051722503163946",
"orderNo": null,
"customerOrderNo": "12233",
"orderNo12306": "ECW3211229",
"chaOrderStatus": 32,
"chaOrderStatusName": "改签占位失败",
"needRefundAmount": null,
"diffRate": null,
"diffRefundFeeAmount": null,
"changRate": null,
"changFeeAmount": null,
"needPayAmount": null,
"priceChangeType": 0,
"priceChangeTypeInfo": null,
"isUserSelfPay": true,
"passengerName": "张三",
"cardType": 1,
"cardNo": "3411***********850",
"ticketType": 1,
"trainCode": "1462",
"fromStation": "昆山",
"toStation": "苏州",
"fromDateTime": "2026-05-27 12:56:00",
"toDateTime": "2026-05-27 13:20:00",
"chooseSeats": null,
"chooseSleeper": null,
"seatType": 10,
"ticketPrice": null,
"seatNo": null,
"ticketEntrance": null,
"old_TrainCode": "1462",
"old_FromStation": "昆山",
"old_ToStation": "苏州",
"old_FromDateTime": "2026-05-26 12:56:00",
"old_ToDateTime": "2026-05-26 13:20:00",
"old_SeatType": 10,
"old_TicketPrice": 7.00,
"old_TicketNo": "ECW32911221120049",
"old_SeatNo": null,
"callbackUrl": "http://systest.panhe.net/Test/NotifyTest",
"unFinishedReason": "很抱歉,您当日的人脸核验次数过多,请明日再试。",
"confirmChangeLimitTime": null,
"createTime": "2026-05-17 22:50:31"
},
"success": true,
"msg": "请求成功"
}
联系我们
| 内容 | 详细 | |
| 售前咨询: | 15021905015 | |
| 客服热线: | 17306152795 | |
| 在线客服QQ: | 1437759532 | |
| 测试工具: | 推荐使用PostMan | |
| 技术支持: | info@panhe.net |
Copyright© 2018-2026 上海磐河信息科技有限公司 版权所有 沪ICP备18026112号-1
联系人:张经理 kf@panhe.net 联系电话:150-2190-5015