# 火车票登录及操作乘车人标准接入接口文档

# 总体说明

接口采用http协议,utf-8编码

header添加参数(回调时需传回):

  • swimlane="泳道信息xxx",举例:swimlane=selftest-250709-110905-832
  • INF-CELL="灰度信息xxx",举例:INF-CELL=gray-release-tmc-testing

http接口返回通用参数

success值 code值 msg值
true 0 处理或操作成功
false 非0 失败信息

加解密处理:

所有请求体:

名称 类型 是否必填 示例 说明
partnerAccessKey String ETHRME7LOXDT-TK 美团企业版分配给供应商的接入密钥
content String UgxoCGPQIzoP 请求体内容,将请求参数JSON序列化后进行加密的结果值

文档参考:待定

密钥信息:

// test环境
partnerCode 1020002
partnerAccessKey ETHRME7LOXDT-TK
partnerSecretKey LqfXOfsKKSrtxQov3268Gg==
环境 回调域名
线上 https://bep-openapi.meituan.com
线下 https://waimai-openapi.apigw.test.meituan.com

# 1. 账号密码登录

# 1.1 接口说明

url method 参数类型 说明
http://xxxxxx.com/RestfulService/passengerLogin POST json http://xxxxxx.com为合作商可访问域名

# 1.2 业务输入参数

# (1)参数说明

参数名 是否必传 参数类型 参数说明
userName String 用户名
pwd String 密码
idLastFourNo String 身份证后四位
ts Long 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求 示例:1617085650321

# 1.3 业务输出参数

# (1)参数说明

参数名 是否必传 参数类型 参数说明
status Integer 处理结果status
message String 处理结果message
data Data 接口返回实际数据

Data参数说明:

参数名 是否必传 参数类型 参数说明
userName String 用户名
accountName String 12306账号名
mobileIn12306 String 12306 注册手机号

# 2. 人脸登录

# 2.1 接口说明

url method 参数类型 说明
http://xxxxxx.com/RestfulService/faceLogin POST json http://xxxxxx.com为合作商可访问域名

# 2.2 业务输入参数

# (1)参数说明

参数名 是否必传 参数类型 参数说明
userName String 用户名
userPwd String 密码
faceImgDtos List<FaceImgDto> 刷脸数据,默认需要1张图片数据
ts Long 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求 示例:1617085650321

# FaceImgDto参数说明

参数名 是否必传 参数类型 参数说明
faceImg String 图片格式 iv:encryptData,iv:base64编码过的12位byte,encryptData: 先将图片使用AES GCM 256 加密,再通过base64编码,解密代码见附录
facePosition String 人脸区域坐标,格式为左,右,上,下 106,287,256,436

# 2.3 业务输出参数

# (1)参数说明

参数名 是否必传 参数类型 参数说明
status Integer 处理结果status
message String 处理结果message
data Data 接口返回实际数据

Data参数说明:

参数名 是否必传 参数类型 参数说明
userName String 用户名
accountName String 12306账号名
mobileIn12306 String 12306 注册手机号

# 3. 添加/修改/删除乘车人

# 3.1 接口说明

url method 参数类型 说明
http://xxxxxx.com/RestfulService/managePassenger POST json http://xxxxxx.com为合作商可访问域名

# 3.2 业务输入参数

# (1)参数说明

参数名 是否必传 参数类型 参数说明
userName String 用户名
operateType Integer 操作类型,1-添加,2-修改,3-删除
pwd String 密码
passengerDto TrainPassenger12306Dto 乘客信息
ts Long 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求 示例:1617085650321

# TrainPassenger12306Dto参数说明

参数名 是否必传 参数类型 参数说明
passengerIdType String 证件类型,详见附录【证件类型枚举】
passengerName String 乘客姓名
passengerNo String 证件号码
oldPassengerName String 原乘客姓名,operateType=2时必填
oldPassengerNo String 原证件号码,operateType=2时必填
ticketType String 乘客类型,详见附录【票类型枚举】
passengerPhoneStatus Integer 乘客是手机号核验状态 1 通过手机核验,0-未通过
passengerCheckStatus Integer 乘客核验状态 1 核验通过,0-未通过
passengerId String 乘客ID
mobile String 手机号(身份证必填)
email String 邮箱(添加乘客且非身份证且无手机号时必填)
country String 标准国籍二字码,(添加乘客且非身份证时必填)
bornDate String 出生日期,格式yyyyMMdd,(添加乘客且非身份证时必填)
expireDate String 证件过期日期,格式yyyyMMdd,(添加乘客且非身份证时必填)
sex Integer 1 -男,2-女
isUserSelf Integer 1 表示乘客本人

# 3.3 业务输出参数

# (1)参数说明

参数名 是否必传 参数类型 参数说明
status Integer 处理结果status
message String 处理结果message
data Data 接口返回实际数据

Data参数说明:

参数名 是否必传 参数类型 参数说明
passengerStatus Integer 乘客核验状态
mobileStatus Integer 手机号核验状态
accountName String 12306账号名

# 4. 获取乘车人列表

# 4.1 接口说明

url method 参数类型 说明
http://xxxxxx.com/RestfulService/getPassengerList POST json http://xxxxxx.com为合作商可访问域名

# 4.2 业务输入参数

# (1)参数说明

参数名 是否必传 参数类型 参数说明
userName String 用户名
pwd String 密码
ts Long 13位时间戳。 示例:1617085650321

# 4.3 业务输出参数

# (1)参数说明

参数名 是否必传 参数类型 参数说明
status Integer 处理结果status
message String 处理结果message
data Data 接口返回实际数据

Data参数说明:

参数名 是否必传 参数类型 参数说明
passengerDtoList List<TrainPassenger12306Dto> 乘客信息列表

# 附录

# 证件类型枚举

证件类型名称 证件类型编号
二代身份证(居民身份证) 1
港澳通行证(港澳居民来往内地通行证) C
台湾通行证(台湾居民来往大陆通行证) G
护照(中国护照) B
外国护照 A
外国人永久居留身份证 H
港澳居民居住证 K
台湾居民居住证 P

# 票类型枚举

票类型 票类型编号
成人票 1

# 操作失败枚举

类型 错误原因 code
系统错误 系统繁忙,请稍后进行重试 40001
系统错误 12306系统维护,请稍后进行重试 40002
系统错误 操作失败,不可重试 40003
账号相关 账户用户名及密码错误 40101
账号相关 账户被锁定,请前往12306app解封 40102
账号相关 账号异常,请通过人脸照片进行核验 40103
账号相关 账号异常,请通过人脸视频进行核验 40104
账号相关 账号异常,请通过短信进行核验 40105
账号相关 账号异常,短信验证码核验失败,请重新回填 40106
账号相关 账号异常,人脸照片核验失败,请重新核验 40107
账号相关 账号异常,人脸视频核验失败,请重新核验 40108
账号相关 账号异常,当日已无法核验,请第二天重试 40109
乘车人相关 乘车人手机号核验未通过,请进行检查 40201
乘车人相关 乘车人身份信息未核验通过,请进行检测或联系12306咨询 40202
乘车人相关 添加修改失败,常用乘车人数量已超过上限,请删除乘客后重试 40203
乘车人相关 添加修改失败,常用乘车人存在重复,请重新检查 40204
乘车人相关 删除失败,主乘车人不能删除 40205
乘车人相关 删除失败,该乘客不允许删除 40206
乘车人相关 删除失败,该乘车人不存在 40207
乘车人相关 删除失败,由于添加时间限制,该乘客不允许删除 40208
乘车人相关 修改失败,主乘车人不能修改 40209
其他 其他原因 40301

# 人脸图片解密代码


    public static byte[] decryptWithAesGcm(String encryptedText, String secretKey) throws Exception {
        // 1. 验证输入参数
        if (encryptedText == null || encryptedText.isEmpty()) {
            throw new IllegalArgumentException("加密文本不能为空");
        }

        if (secretKey == null || secretKey.isEmpty()) {
            throw new IllegalArgumentException("密钥不能为空");
        }

        // 2. 分离IV和密文
        String[] parts = encryptedText.split(":");
        if (parts.length != 2) {
            throw new IllegalArgumentException("密文格式不正确,应为 'IV:密文' 格式");
        }

        // 3. Base64解码IV和密文
        byte[] iv = Base64.getDecoder().decode(parts[0]);
        byte[] cipherText = Base64.getDecoder().decode(parts[1]);

        // 4. 验证IV长度
        if (iv.length != IV_LENGTH) {
            throw new IllegalArgumentException("IV长度不正确,应为 " + IV_LENGTH + " 字节");
        }

        // 5. Base64解码密钥
        byte[] keyBytes = Base64.getDecoder().decode(secretKey);

        // 6. 创建密钥规范
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");

        // 7. 创建GCM参数规范
        GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv);

        // 8. 获取Cipher实例并初始化
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, keySpec, gcmSpec);

        // 9. 执行解密操作
        return cipher.doFinal(cipherText);
    }
上次更新: 11/17/2025, 9:09:26 PM