1.需要在阿里开放平台(https://open.taobao.com/),注册appKey,应用标签选择“飞猪-新业务”;
2.需要使用appKey和appSecret访问;
3.接口仅以post请求访问;
4.以下通知接口API加签规则:https://fliggy.open.taobao.com/doc.htm?docId=119474&docType=1
5.SDK调用试例地址: https://open.taobao.com/docV3.htm?spm=a219a.7386653.0.0.7aa5669aaJixbr&docId=101618&docType=1
6.接口后带有(通知),代表飞猪往外部调用系统商,需要系统商提供接口URL和访问账号及秘钥,且需要做幂等(除订单查询);
接口后带有(TOP),代表系统商可以通过TOP平台进行消息回调。
7.线上回调地址:https://eco.taobao.com/router/rest。
预发回调地址:https://pre-gw.api.taobao.com/top/router/rest。(联调测试过程中使用预发回调地址)
参数 | 类型 | 备注 |
---|---|---|
pageNo | Integer | 当前页码,默认为1,范围[1,∞) |
pageSize | Integer | 每页条数,默认为20,范围[1,100] |
参数 | 类型 | 备注 |
---|---|---|
code | Integer | 通用错误码 |
message | String | 描述信息 |
data | 返回数据集,有下面四种情况: 无数据,这时没有data字段,表示接口的返回值中没有结果; 数据为对象类型,表示为JSONObject,具体定义要根据接口而定; 数据为数组类型,表示为JSONArray,表示结果是一系列值,值的类型要根据接口而定; 数据为值类型,表示为具体的封装类型,如String,Integer,Long,Byte,Double等。 |
接入方式:(要求系统商有能力尽量按方式一接入,即实现预下单,取消订单和订单创建3个接口)
1.实现预下单,取消订单和订单创建3个接口。
2.实现1.1和1.4
3.实现1.2、1.3、1.4
注:要求预下单,订单创建和退款通知要实现幂等
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
itemCode | String | 是 | 20 | 商品编码,商品上填写的外部通知code |
travelDate | String | 是 | 50 | 出行日期yyyy-MM-dd |
startTime | String | 否 | 50 | 开始时间HH:MM |
endTime | String | 否 | 50 | 结束时间HH:MM |
priceUnit | Object | 否 | 价格信息 | |
travellers | List
|
否 | 出行人,实名制景区必填 | |
contact | TicketTravellerDTO | 是 | 取票人 | |
property | Integer | 否 | 票性质 | |
outSessionId | String | 否 | 外部场次id | |
orderId | Long | 是 | 飞猪订单id |
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
price | Long | 是 | 10 | 单价金额,分 |
totalPrice | Long | 是 | 10 | 总价,分 |
quantity | Integer | 否 | 5 | 订单件数 |
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
name | String | 是 | 50 | 姓名 |
certificateType | Integer | 否 | 5 | 证件类型 |
certificateId | String | 否 | 50 | 证件号,取票人必填,实名制景区也必填 |
mobile | String | 是 | 20 | 电话 |
String | 否 | 100 | 邮箱 |
证件类型: 0:身份证 1:护照 3:军官证 4:回乡证 5:台胞证 6:港澳通行证 7:国际海员 8:外国人永久居留(身份)证 9:其他证件 10:警官证 11:士兵证 12:台湾通行证 13:入台证 14:户口本 15:出生证明 16:驾驶证 17:港澳居民居住证 18台湾居民居住证
票性质:0:成人票 1:儿童票 2:亲子票(1大1小) 3:家庭票(2大1小) 4:大学生票 5:双人票 6:情侣票 7:老人票 8:家庭票(2大2小) 9:中学生票 10:学生票 11:中/高考考生特惠票 12:女士票 13:男士票 14:教师票 15:军人票 16:残疾票 17:三人票 18:团队票 19:标准票 20:全价票 21:半价票 22:参观票 23:优惠票 24:特定日票 25:婴幼儿票 26:陪同票 27:亲子票(1大2小) 28:青少年票 29:老人票(65岁及以上) 30:优待票(宗教人士) 31:老人票(60岁-64岁) 32:优待票
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
code | Integer | 是 | 返回码 成功:0 失败:其他 |
message | String | 否 | 返回信息,可在前端进行透出 |
{ "itemCode": "PFT20200716387974", "travelDate": "2020-12-12", "startTime": "08:00", "endTime": "12:00", "priceUnit": { "price": 2100, "totalPrice": 4200, "quantity": 2, }, "travellers": [ { "name": "张三", "certificateType": 1, "certificateId": "35058319990909123x", "email": "xxx@qq.com" } ], "contact": { "name": "张三", "mobile": 15011111111 } }
{ "code": 0 }
实现1.2,必须实现1.3来释放占用库存
1.2和1.1接口的区别:试单会按不同系统商的能力返回不同的结果。
系统商支持锁定库存:会返回锁库存的申请码-tokenCode
系统商不支持锁定库存:返回2.1的结果
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
itemCode | String | 是 | 20 | 商品编码,商品上填写的外部通知code |
travelDate | String | 是 | 50 | 出行日期yyyy-MM-dd |
startTime | String | 否 | 50 | 开始时间HH:MM |
endTime | String | 否 | 50 | 结束时间HH:MM |
priceUnit | Object | 否 | 价格信息 | |
travellers | List
|
否 | 出行人,实名制景区必填 | |
contact | TicketTravellerDTO | 是 | 取票人 | |
property | Integer | 否 | 票性质 | |
outSessionId | String | 否 | 外部场次id | |
orderId | Long | 是 | 飞猪订单id |
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
price | Long | 是 | 10 | 单价金额,分 |
totalPrice | Long | 是 | 10 | 总价,分 |
quantity | Integer | 否 | 5 | 订单件数 |
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
name | String | 是 | 50 | 姓名 |
certificateType | Integer | 否 | 5 | 证件类型 |
certificateId | String | 否 | 50 | 证件号,取票人必填,实名制景区也必填 |
mobile | String | 是 | 20 | 电话 |
String | 否 | 100 | 邮箱 |
证件类型: 0:身份证 1:护照 3:军官证 4:回乡证 5:台胞证 6:港澳通行证 7:国际海员 8:外国人永久居留(身份)证 9:其他证件 10:警官证 11:士兵证 12:台湾通行证 13:入台证 14:户口本 15:出生证明 16:驾驶证 17:港澳居民居住证 18台湾居民居住证
票性质:0:成人票 1:儿童票 2:亲子票(1大1小) 3:家庭票(2大1小) 4:大学生票 5:双人票 6:情侣票 7:老人票 8:家庭票(2大2小) 9:中学生票 10:学生票 11:中/高考考生特惠票 12:女士票 13:男士票 14:教师票 15:军人票 16:残疾票 17:三人票 18:团队票 19:标准票 20:全价票 21:半价票 22:参观票 23:优惠票 24:特定日票 25:婴幼儿票 26:陪同票 27:亲子票(1大2小) 28:青少年票 29:老人票(65岁及以上) 30:优待票(宗教人士) 31:老人票(60岁-64岁) 32:优待票
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
code | Integer | 是 | 返回码 成功:0 失败:其他 |
message | String | 否 | 返回信息,可在前端进行透出 |
data | Object | 是 | 返回对象 |
–>outOrderId | String | 否 | 外部订单号outOrderId |
–>tokenCode | String | 否 | 申请码 |
{ "orderId": 1348110290636535365, "itemCode": "PFT20200716387974", "travelDate": "2020-12-12", "startTime": "08:00", "endTime": "12:00", "priceUnit": { "price": 2100, "totalPrice": 4200, "quantity": 2, }, "travellers": [ { "name": "张三", "certificateType": 1, "certificateId": "35058319990909123x", "email": "xxx@qq.com" } ], "contact": { "name": "张三", "mobile": 15011111111 } }
{ "code": 0, "data": { "outOrderId": "2392342", "tokenCode": "2392342" } }
实现1.2,必须实现1.3来释放占用库存,没有实现1.2则该接口非必接
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
orderId | Long | 是 | 飞猪订单编号 | |
outOrderId | String | 否 | 50 | 外部订单号 |
tokenCode | String | 否 | 50 | 申请码 |
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
code | Integer | 是 | 返回码 成功:0 失败:其他 |
message | String | 否 | 返回信息,可在前端进行透出 |
{"orderId": "PFT20200716387974","tokenCode": "xxxxx"}
{"code": 0}
现已支持同步发码能力,即在订单创建返回参数带上凭证信息。
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
itemCode | String | 是 | 20 | 商品编码,商品上填写的外部通知code |
travelDate | String | 是 | 50 | 出行日期yyyy-MM-dd |
startTime | String | 否 | 50 | 开始时间HH:MM |
endTime | String | 否 | 50 | 结束时间HH:MM |
priceUnit | Object | 否 | 价格信息 | |
travellers | List
|
否 | 出行人,实名制景区必填 | |
contact | TicketTravellerDTO | 是 | 取票人 | |
property | Integer | 否 | 票性质 | |
outSessionId | String | 否 | 外部场次id | |
outOrderId | String | 否 | 50 | 外部订单id |
tokenCode | String | 否 | 50 | 申请码 |
orderId | Long | 是 | 飞猪订单id |
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
price | Long | 是 | 10 | 单价金额,分 |
totalPrice | Long | 是 | 10 | 总价,分 |
quantity | Integer | 否 | 5 | 订单件数 |
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
name | String | 是 | 50 | 姓名 |
certificateType | Integer | 否 | 5 | 证件类型 |
certificateId | String | 否 | 50 | 证件号,取票人必填,实名制景区也必填 |
mobile | String | 是 | 20 | 电话 |
String | 否 | 100 | 邮箱 |
证件类型: 0:身份证 1:护照 3:军官证 4:回乡证 5:台胞证 6:港澳通行证 7:国际海员 8:外国人永久居留(身份)证 9:其他证件 10:警官证 11:士兵证 12:台湾通行证 13:入台证 14:户口本 15:出生证明 16:驾驶证 17:港澳居民居住证 18台湾居民居住证
票性质:0:成人票 1:儿童票 2:亲子票(1大1小) 3:家庭票(2大1小) 4:大学生票 5:双人票 6:情侣票 7:老人票 8:家庭票(2大2小) 9:中学生票 10:学生票 11:中/高考考生特惠票 12:女士票 13:男士票 14:教师票 15:军人票 16:残疾票 17:三人票 18:团队票 19:标准票 20:全价票 21:半价票 22:参观票 23:优惠票 24:特定日票 25:婴幼儿票 26:陪同票 27:亲子票(1大2小) 28:青少年票 29:老人票(65岁及以上) 30:优待票(宗教人士) 31:老人票(60岁-64岁) 32:优待票
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
code | Integer | 是 | 返回码 成功:0 失败:其他 |
message | String | 否 | 返回信息,可在前端进行透出 |
data | Object | 是 | 返回对象 |
–>outOrderId | String | 否 | 外部订单号outOrderId |
–>tokenCode | String | 否 | 申请码 |
–>sendCodeType | Integer | 否 | 发码类型: 1:同步发码(注:实现同步发码,依然需要接发码回调接口的) 2:异步发码 注:可不传,飞猪会通过是否有传凭证信息判断是同步还是异步 |
–>voucherInfos | List<object> | 否 | 凭证信息列表 |
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
type | Integer | 是 | 凭证类型: 1:1码1刷(3张成人票3个码) 2:1码多刷(3张成人票1个码) |
ticketAvailableTimes | Integer | 是 | 每张票可使用次数 |
confirmCode | String | 是 | 确认码(用户核销的凭证,一般为数字或字母组合) |
url | String | 否 | 凭证URL(二维码图片url) |
supportCode | String | 否 | 辅助码(一般为数字或字母组合) |
pdfUrl | String | 否 | pdf凭证的url链接 |
{"itemCode":"123456","travelDate":"2022-02-24","priceUnit":{"price":1,"totalPrice":3,"quantity":3},"contact":{"certificateType":0,"name":"张三","certificateId":"35058319990909121x","mobile":"15111111111"},"travellers":[{"certificateType":0,"name":"张三","certificateId":"35058319990909122x","mobile":"15111111111"},{"certificateType":0,"name":"李四","certificateId":"35058319990909124x","mobile":"15111111111"},{"certificateType":0,"name":"王五","certificateId":"35058319990909125x","mobile":"15111111111"}],"property":0,"realNameSystem":1,"mainOrderId":2486868014839682466,"orderId":3000006216400120239,"sellerId":263687635,"supplierId":239,"evn":false,"accountId":"NONE"}
{"code": 0, "message": "success", "data": {"outOrderId": "TI20220224144714371", "tokenCode": "ea9a70639345446fa611125c5c7bd410", "voucherInfos": [{"type": 1, "confirm_code": "8d74dfaf8c3c41b29006b24254f30bf1&22", "url": "http://wwws.xx.com/1.png", "quantity": 1}, {"type": 1, "confirm_code": "ebb5e5f5e00941da8f3b1c4621fc50d9&22", "url": "http://wwws.xx.com/3.png", "quantity": 1}, {"type": 1, "confirm_code": "0f85ddc1f4d0442cb17b1b5ee2f8db36&22", "url": "http://wwws.xx.com/2.png", "quantity": 1}]}}
必接,推荐同步发码,依赖上游的系统商可以异步发码
API名称: alitrip.travel.ticket.order.create
接口文档:https://open.taobao.com/api.htm?spm=a219a.7386653.0.0.c113669aSlydXy&docId=53357&docType=2
注意:
1.返回参数里 confirmCode 确认码,如果没有返回确认码,又是实名制的,确认码默认outOrderId_序列号(如 t123_1),序列号为凭证信息列表的index。
2.发码回调接口里,二维码图片传url。
3.发码回调接口要确保调用接口之后,飞猪端的返回参数是成功。如果返回是失败,请做好异常处理机制,并重试(定时重试即可,建议2-3分钟重试一次,重试3-5次)。
4.不要在1.4订单创建接口调用时,同步调用发码回调接口,建议是在订单创建接口调用成功之后,延迟2秒再调用发码回调接口。
必接
API名称: taobao.travel.ticket.order.verify
接口文档:https://open.taobao.com/api.htm?docId=50607&docType=2
核销回调接口,used_quantity字段的值,要根据write_off_type的值进行处理。
1.write_off_type的值为 0 或者不传,则used_quantity的值为当次操作的核销数量。举例:一笔订单里购买了3张门票,第一次核销了1张,那核销回调里used_quantity的值为1;第二次又核销了1 张,核销回调里used_quantity的值还是1,而不是2。
2.write_off_type的值为 1 时,则used_quantity的值为已核销的总数量。举例:一笔订单里购买了3张门票,第一次核销了1张,那核销回调里used_quantity的值为1;第二次又核销了1 张,核销回调里used_quantity的值是2。
方试一:退款接口
1.适用于同步处理退款申请的系统商。
2.收到退款接口的请求之后,能在接口超时之前完成审核,(除了遇到系统异常的情况)接口返回参数里,refundStatus返回值为1 -已退款,或者2 -已拒绝,code值为0 -成功。
方式二:退款接口 + 退款回调接口
1.适用于异步处理退款申请或者需要人工审核退款申请的系统商。
2.收到退款接口的请求之后,(除了遇到系统异常的情况)接口返回参数里,refundStatus返回值为3 -审核中,code值为0 -成功。
3.待系统审核完成或人工审核完成之后,调用退款回调接口,告知飞猪退款处理结果。
4.退款回调接口要确保调用接口之后,飞猪端的接口返回参数是成功。如果返回是失败,请做好异常处理机制,并重试(定时重试即可,建议5-10分钟重试一次),直到收到返回成功。
必接
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
orderId | Long | 是 | 飞猪订单编号 | |
outOrderId | String | 否 | 50 | 外部订单号 |
refundFee | Long | 否 | 退款金额【单位:分】 | |
refundType | Integer | 否 | 退款类型:1全额退款退单;3部分退款,默认是1 | |
refundNum | Integer | 否 | 退款份数(部分退必填) | |
fliggyRefundFlowId | String | 否 | 飞猪退款流水id(部分退必填) | |
refundVoucherConfirmCodes | List
|
否 | 退款凭证code列表,部分退必填 |
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
code | Integer | 是 | 返回码 成功:0 失败:其他 |
message | String | 否 | 返回信息,可在前端进行透出 |
data | Object | 是 | 返回对象 |
–>orderId | Long | 是 | 飞猪订单号 |
–>refundStatus | Integer | 是 | 1. 已退款(相当于退款回调的同意退款) 2. 已驳回(退款回调的拒绝退款)3. 审核中(需要审核,会回调),其中1和2是不会回调,3会回调 |
–>refundFailureReason | String | 否 | 2退票失败,需要填写失败原因 |
{ "orderId":12345678901, "outOrderId":23456789012 }
返回成功: { "code": 0, "message": "已部分核销,无法退票", "data": { "orderId":12345678901, "refundStatus":2 "refundFailureReason":"重复购买" } }
API名称: taobao.travel.ticket.order.refund
接口文档:https://open.taobao.com/api.htm?docId=50646&docType=2
必接
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
orderId | Long | 是 | 飞猪订单编号 | |
outOrderId | String | 否 | 50 | 外部订单号 |
fliggyRefundFlowId | String | 否 | 飞猪退款流水id |
字段 | 类型 | 必填 | 说明 | |
---|---|---|---|---|
code | Integer | 是 | 返回码 成功:0 失败:其他 | |
message | String | 否 | 返回信息,可在前端进行透出 | |
data | List | 是 | 返回对象 | |
–>orderId | Long | 是 | 飞猪订单号 | |
–>refundStatus | Integer | 是 | 1. 已退款(相当于退款回调的同意退款) 2. 已驳回(退款回调的拒绝退款)3. 审核中(需要审核,会回调),其中1和2是不会回调,3会回调,4部分退款成功 | |
–>refundType | Integer | 否 | 退款类型:1全额退款退单;3部分退款,默认是1 | |
–>refundNum | Integer | 否 | 退款份数(部分退必填) | |
–>fliggyRefundFlowId | String | 否 | 飞猪退款流水id(部分退必填) | |
–>refundVoucherConfirmCodes | List
|
否 | 退款凭证code列表,部分退必填 |
{ "orderId":12345678901, "outOrderId":23456789012,"fliggyRefundFlowId":123123 }
返回成功: { "code": 0, "message": "已部分核销", "data": [{ "orderId":12345678901, "refundStatus":2 ,"refundFailureReason":"重复购买","refundType":"","refundQuantity":1,"fliggyRefundFlowId":123123,"refundVoucherConfirmCodes":["123123","34567"] }]}
必接,用来同步数据状态
订单查询接口,返回完整的订单信息,包括退款状态(如有申请退款)和凭证二维码信息(图片或图片url)
字段 | 类型 | 必填 | 长度 | 说明 |
---|---|---|---|---|
orderId | Long | 是 | 飞猪订单编号 | |
outOrderId | String | 否 | 50 | 外部订单号 |
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
code | Integer | 是 | 返回码 成功:0 失败:其他 |
message | String | 否 | 返回信息,可在前端进行透出 |
data | Object | 是 | 返回对象 |
–>orderId | Long | 是 | 飞猪订单编号 |
–>outOrderId | String | 是 | 第三方订单编号 |
–>outOrderPayStatus | Integer | 是 | 支付状态(1已支付/2未支付/3部分支付) |
–>outOrderStatus | Integer | 是 | 订单状态(1正常/2取消) |
–>refundStatus | Integer | 是 | 1. 已退款(相当于退款回调的同意退款) 2. 已驳回(退款回调的拒绝退款)3. 审核中(需要审核,会回调),其中1和2是不会回调,3会回调。未退款则返回null |
–>refundFailureReason | String | 是 | refundStatus取值2时代表退票失败,需要填写失败原因。否则返回null |
–>refundSuccessNum | Integer | 是 | 退款成功份数 |
–>voucherInfos | List<object> | 是 | 凭证信息列表 |
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
type | Integer | 是 | 凭证类型: 1:1码1刷(3张成人票3个码) 2:1码多刷(3张成人票1个码) |
ticketAvailableTimes | Integer | 是 | 每张票可使用次数 |
confirmCode | String | 是 | 确认码(用户核销的凭证,一般为数字或字母组合) |
url | String | 否 | 凭证URL(二维码图片url) |
supportCode | String | 否 | 辅助码(一般为数字或字母组合) |
sendStatus | Integer | 是 | 凭证发送状态(1已发送/0未发送) |
useStatus | Integer | 是 | 凭证使用状态(0未使用/1已经使用/2部分使用) |
ticketUsageNums | Integer | 是 | 票已使用数量 |
pdfUrl | String | 否 | pdf凭证的url链接 |
refundSuccessNum | Integer | 是 | 退款成功份数 |
refundingNum | Integer | 是 | 退款中份数 |
{ "orderId":12345678901, "outOrderId":"2345678901" }
{ "code": 0, "message": "", "data": { "orderId": false, "outOrderId": "111", "outOrderStatus": 1, "outOrderPayStatus": 1, "voucherInfos": [{ "type": 1, "sendStatus": 1, "useStatus": 1, "ticketAvailableTimes": 2, "ticketUsageNums": 1, "confirmCode": "123456", "img": [01010101001], "url": "//image", "supportCode": "123445" }] } }
API名称:taobao.alitrip.travel.baseinfo.scenics.get
接口文档:https://fliggy.open.taobao.com/api.htm?docId=25781&docType=2
景点绑定用于商家管理(标准景点&商家景点绑定)
API名称:alitrip.ticket.scenic.bind
接口文档:https://fliggy.open.taobao.com/api.htm?docId=27946&docType=2
/** * 成功返回 */ SUCCESS(Boolean.TRUE, "0", "success", "成功",ErrorCodeTypeEnum.SUCCESS), /** * 系统级错误 */ SERVICE_ERROR(Boolean.FALSE, "500", "System exception, please contact the administrator", "系统异常,请联系管理员",ErrorCodeTypeEnum.SYE_ERROR), SENTINEL_LIMITING(Boolean.FALSE,"509","The system is busy, triggering current limit, please try again later", "系统繁忙,触发限流,请稍后重试!",ErrorCodeTypeEnum.SYE_ERROR), GET_ALLOTMENT_EXCEPTION(Boolean.FALSE,"15002","get_allotment_exception","获取库存异常",ErrorCodeTypeEnum.SYE_ERROR), DSL_NOT_FOUNT_SYSTEM_CONFIGURE(Boolean.FALSE, "15005", "dsl_not_fount_system_configure", "DSL未找到系统商配置信息或能力信息",ErrorCodeTypeEnum.SYE_ERROR), HSF_TIMEOUT_EXCEPTION(Boolean.FALSE, "15007", "hsf_timeout_exception", "HSF超时请重试!",ErrorCodeTypeEnum.SYE_ERROR), PARAMETER_CHECK_EXCEPTION(Boolean.FALSE, "20001", "parameter check exception", "参数校验异常",ErrorCodeTypeEnum.SYE_ERROR), SUPPLIER_NOT_EXISTENT(Boolean.FALSE, "20002", "supplier not existent", "系统商不存在或不可用",ErrorCodeTypeEnum.SYE_ERROR), SUPPLIER_CONFIG_SEARCH_EXCEPTION(Boolean.FALSE, "20004", "supplier config search exception", "获取系统商配置信息异常",ErrorCodeTypeEnum.SYE_ERROR), SUPPLIER_ABILITY_NOT_EXISTENT(Boolean.FALSE, "20005", "supplier ability not existent", "系统商能力不存在或当前账号已经失效",ErrorCodeTypeEnum.SYE_ERROR), SUPPLIER_DATA_NOT_EXISTENT(Boolean.FALSE, "20006", "supplier response data not existent", "系统商响应信息有误或为空",ErrorCodeTypeEnum.SYE_ERROR), SELLER_NOT_EXIST(Boolean.FALSE,"20007","seller not exist","卖家账号未配置或未同步",ErrorCodeTypeEnum.SELLER_ERROR), XML_BEAN_CONVERSION_EXCEPTION(Boolean.FALSE, "20008", "supplier response data not existent", "xml与bean转换异常",ErrorCodeTypeEnum.SYE_ERROR), ENCRYPTION_EXCEPTION(Boolean.FALSE, "20009", "encryption error", "加密异常",ErrorCodeTypeEnum.SYE_ERROR), CORDING_EXCHANGE_EXCEPTION(Boolean.FALSE,"20010","cording exchange exception","编码转换异常",ErrorCodeTypeEnum.SYE_ERROR), TOKEN_EXPIRE(Boolean.FALSE,"20011","token expire","token已过期或已失效",ErrorCodeTypeEnum.SYE_ERROR), CONFIRM_IMG_CONVERSION_EXCEPTION(Boolean.FALSE,"20012","confirm img exception","确认码转二维码转换异常",ErrorCodeTypeEnum.SYE_ERROR), GENERATE_SIGNATURE_ERROR(Boolean.FALSE,"20015","generate signature error","生成签名异常",ErrorCodeTypeEnum.SYE_ERROR), DATE_FORMAT_CONVERSION_ERROR(Boolean.FALSE,"20016","date_format_conversion_error","日期格式转换异常",ErrorCodeTypeEnum.SYE_ERROR), RESPONSE_CONTENT_DECRYPT_EXCEPTION(Boolean.FALSE,"20017","response content decrypt exception","响应内容解密异常",ErrorCodeTypeEnum.SYE_ERROR), DSL_GET_PARAM_ERROR(Boolean.FALSE,"20021","DSL get param error","DSL获取参数异常",ErrorCodeTypeEnum.SYE_ERROR), DSL_CONFIG_ERROR(Boolean.FALSE,"20022","DSL config error","DSL参数配置错误",ErrorCodeTypeEnum.SYE_ERROR), SUPPLIER_SERVICE_PARAM_EMPTY(Boolean.FALSE,"20023","supplier service param empty","自定义中间层未初始化SET",ErrorCodeTypeEnum.SYE_ERROR), /** * 直连前置参数校验或卖家维度错误 业务错误 例如断言抛出 或者 resultException抛出 需要通知交易 建议以40开头 * TODO 没有涵盖的业务提示自行添加 */ SELLER_ACCOUNT_UNAUTHORIZED_OR_CONFIG_ERROR(Boolean.FALSE, "40001", "seller_account_unauthorized_or_config_error", "商家账号未授权或配置错误",ErrorCodeTypeEnum.SELLER_ERROR), SUPPLIER_ACCOUNT_NOT_CONFIGURED(Boolean.FALSE, "40002", "Account_information_of_system_provider_not_configured", "未配置对应的系统商账户信息",ErrorCodeTypeEnum.SELLER_ERROR), THE_KEY_AND_COOPERATION_ID_DO_NOT_EXIST_OR_THE_SPLICING_IS_ILLEGAL(Boolean.FALSE, "40003", "The_key_and_cooperation_Id_do_not_exist_or_the_splicing_is_illegal", "密钥和合作ID不存在或拼接不合法",ErrorCodeTypeEnum.BIZ_ERROR), COMMODITY_PURCHASE_LIMIT(Boolean.FALSE, "40004", "commodity purchase limit", "商品限购",ErrorCodeTypeEnum.SELLER_ERROR), ORDER_NUMBER_CANNOT_BE_EMPTY(Boolean.FALSE, "40006", "Order_number_cannot_be_empty", "订单件数不许为空",ErrorCodeTypeEnum.BIZ_ERROR), EXTERNAL_ORDER_NUMBER_IS_EMPTY(Boolean.FALSE, "40007", "External_order_number_is_empty", "外部订单号不可为空",ErrorCodeTypeEnum.BIZ_ERROR), THE_NATURE_OF_THE_TICKET_CANNOT_BE_EMPTY(Boolean.FALSE, "40009", "The_nature_of_the_ticket_cannot_be_empty", "票性质不许为空",ErrorCodeTypeEnum.BIZ_ERROR), THE_START_AND_END_TIME_OF_THE_TICKET_IS_EMPTY(Boolean.FALSE, "40010", "The_start_and_end_time_of_the_ticket_is_empty", "场次票开始结束时间为空",ErrorCodeTypeEnum.BIZ_ERROR), TICKET_ID_IS_EMPTY(Boolean.FALSE, "40011", "Ticket_ID_is_empty", "票品ID不可为空",ErrorCodeTypeEnum.BIZ_ERROR), REAl_NAME_SYSTEM_IS_EMPTY(Boolean.FALSE, "40012", "real_name_system_is_empty", "实名制字段不能为空",ErrorCodeTypeEnum.BIZ_ERROR), ITEMCODE_FORMAT_ERROR(Boolean.FALSE, "40014", "itemCode format error", "商品编码格式错误",ErrorCodeTypeEnum.SELLER_ERROR), SCENIC_NOT_EXIST(Boolean.FALSE,"40018","scenic not exist","查询健康码获取景区信息失败",ErrorCodeTypeEnum.BIZ_ERROR), SEARCH_HEALTH_CODE_FAIL(Boolean.FALSE,"40019","search health code fail","查询健康码失败",ErrorCodeTypeEnum.BIZ_ERROR), SESSION_ID_IS_EMPTY(Boolean.FALSE,"40021","session id is empty","场次id不许为空",ErrorCodeTypeEnum.BIZ_ERROR), ORDER_NUMBER_IS_EMPTY(Boolean.FALSE, "40022", "order_number_is_empty", "飞猪订单号不可为空",ErrorCodeTypeEnum.BIZ_ERROR), SUPPLIER_SELLER_STATUS_FAILED(Boolean.FALSE,"40023","The merchant account status is invalid, please contact the operator","商家账号状态失效,请联系运营人员",ErrorCodeTypeEnum.BIZ_ERROR), /** * 日期区域 */ START_DATE_OR_END_DATE_FORMAT_ERROR(Boolean.FALSE, "41001", "start_date_or_end_date_format_error", "开始日期或者结束日期格式有误",ErrorCodeTypeEnum.BIZ_ERROR), /** * 联系人出行人区域 */ CONTACT_CERTIFICATE_ID_OR_TYPE_EMPTY(Boolean.FALSE, "42002", "contact_certificate_id_or_type_empty", "联系人证件号或者证件类型为空",ErrorCodeTypeEnum.SELLER_ERROR), TRAVELER_CERTIFICATE_ID_OR_TYPE_EMPTY(Boolean.FALSE, "42003", "traveler_certificate_id_or_type_empty", "出行人证件号或者证件类型为空",ErrorCodeTypeEnum.SELLER_ERROR), TRAVELER_INFORMATION_CANNOT_BE_EMPTY_UNDER_REAL_NAME_SYSTEM(Boolean.FALSE, "42004", "Traveler_information_cannot_be_empty_under_real_name_system", "实名制下出行人信息不许为空",ErrorCodeTypeEnum.SELLER_ERROR), WRONG_NUMBER_OF_TRAVELERS(Boolean.FALSE, "42005", "wrong_number_of_travelers", "出行人数有误",ErrorCodeTypeEnum.BIZ_ERROR), UNSUPPORTED_CERTIFICATE_TYPE_OR_EMPTY(Boolean.FALSE, "42006", "Unsupported_certificate_type_or_empty", "不支持的证件类型或为空",ErrorCodeTypeEnum.SELLER_ERROR), TRAVELER_NOT_EXIST(Boolean.FALSE, "42007", "traveler_not_exist", "出行人信息不存在",ErrorCodeTypeEnum.BIZ_ERROR), /** * 价格库存区域 */ PRICE_UNIT_IS_EMPTY(Boolean.FALSE, "43001", "price unit is empty", "价格信息为空",ErrorCodeTypeEnum.SELLER_ERROR), PRODUCT_SEARCH_EXCEPTION(Boolean.FALSE, "43002", "The product inventory or price queried by the system vendor does not exist", "系统商查询产品库存或价格不存在",ErrorCodeTypeEnum.BIZ_ERROR), ERROR_IN_PRICE_VERIFICATION(Boolean.FALSE, "43003", "Error_in_price_verification", "价格校验有误",ErrorCodeTypeEnum.BIZ_ERROR), /** * 系统商返回信息有误 业务通知 一般情况为相应数据有误或为空 需要联系系统商解决 建议50开头 * TODO 正向链路 * */ SUPPLIER_RESPONSE_NOT_EXISTENT(Boolean.FALSE,"50001","supplier response data not existent","系统商响应数据不存在",ErrorCodeTypeEnum.SUPPLIER_ERROR), SUPPLIER_RESPONSE_TYPE_ERROR(Boolean.FALSE,"50002","supplier response type error","系统商响应数据类型有误",ErrorCodeTypeEnum.SUPPLIER_ERROR), GET_TOKEN_RESOLUTION_EXCEPTION(Boolean.FALSE,"50003","Get_token_resolution_exception","获取token解析异常",ErrorCodeTypeEnum.SUPPLIER_ERROR), ABNORMAL_ORDER_STATUS_RETURNED(Boolean.FALSE,"50005","Abnormal_order_status_returned","系统商返回订单状态不存在",ErrorCodeTypeEnum.SUPPLIER_ERROR), TIME_FORMAT_CONVERSION_FAILED(Boolean.FALSE,"50007","Time_format_conversion_failed","时间格式转换失败",ErrorCodeTypeEnum.SUPPLIER_ERROR), SYSTEM_VENDOR_RESPONSE_DATA_JSON_TO_BEAN_EXCEPTION(Boolean.FALSE,"50008","System_vendor_response_data_JSON_to_bean_exception","系统商响应数据json to bean异常",ErrorCodeTypeEnum.SUPPLIER_ERROR), OUT_SESSION_ID_IS_EMPTY(Boolean.FALSE, "50009", "out_session_id_is_empty", "系统商响应外部场次id为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), OUT_ORDER_ID_IS_EMPTY(Boolean.FALSE, "50010", "out_order_id_is_empty", "系统商响应外部订单id为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), SYSTEM_QUOTIENT_STATUS_HTTP_RESPONSE_SUCCESS(Boolean.FALSE,"50011","System_quotient_status_HTTP_response_not_success","http状态响应非成功",ErrorCodeTypeEnum.SUPPLIER_ERROR), RESPONSE_ORDER_STATUS_ERROR(Boolean.FALSE, "50012", "response order status error", "系统商响应外部订单状态有误",ErrorCodeTypeEnum.SUPPLIER_ERROR), SHENDA_SYSTEM_EXCEPTION(Boolean.FALSE,"50013","shenda system exception","深大系统异常{}",ErrorCodeTypeEnum.SUPPLIER_ERROR), TICKET_ID_EMPTY(Boolean.FALSE,"50014","ticket_id_empty","票id为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), RESPONSE_CERTIFICATE_EMPTY(Boolean.FALSE,"50015","response certificate empty","系统商响应凭证信息为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), MERCHANT_ACCOUNT_TO_DISABLE(Boolean.FALSE,"50016","merchant_account_to_disable","商家账号以停用请联系商家进行处理",ErrorCodeTypeEnum.SELLER_ERROR), HTTP_CLIENT_RESPONSE_ERROR(Boolean.FALSE,"50021","http_client_response_error","httpClient响应状态有误",ErrorCodeTypeEnum.SUPPLIER_ERROR), SYSTEM_PROVIDER_REQUEST_TIMEOUT(Boolean.FALSE, "50022", "System_provider_request_timeout", "系统商请求超时!",ErrorCodeTypeEnum.SYE_ERROR), SYSTEM_PROVIDER_REQUESTS_IO_EXCEPTION(Boolean.FALSE, "50023", "System_provider_requests_IO_exception", "系统商请求IO异常!",ErrorCodeTypeEnum.SYE_ERROR), SYSTEM_PROVIDER_REQUESTS_RESPONSE_EXCEPTION(Boolean.FALSE, "50024", "System_provider_requests_IO_exception", "系统商请求响应异常!",ErrorCodeTypeEnum.SYE_ERROR), QUERY_OUT_ORDER_INFORMATION_EXCEPTION(Boolean.FALSE, "50025", "query outOrder information exception", "外部订单查询不存在",ErrorCodeTypeEnum.SYE_ERROR), ORDER_CREATE_FAIL(Boolean.FALSE, "50026", "order create fail in supplier", "系统商侧订单创建失败",ErrorCodeTypeEnum.SYE_ERROR), /** * 系统商返回信息类型的 正常业务返回 不需要做任何特殊操作 建议60开头 */ PLEASE_DO_NOT_REPEAT_THE_APPOINTMENT(Boolean.FALSE, "60001", "please do not repeat the appointment", "已有预约记录,请勿重复预约",ErrorCodeTypeEnum.NORMAL_ERROR), ORDER_IS_PROCESSING(Boolean.FALSE, "60002", "order is processing", "订单正在处理中,请稍后重试",ErrorCodeTypeEnum.NORMAL_ERROR), NO_REFUNDS_ARE_ALLOWED_FOR_UNPAID_OR_USED_ORDERS(Boolean.FALSE, "60003", "no_refunds_are_allowed_for_unpaid_or_used_orders", "订单未支付或者已使用订单不允许退款",ErrorCodeTypeEnum.BIZ_ERROR), INCOMPATIBLE_RESTRICTION_RULES(Boolean.FALSE,"60019","incompatible restriction rules","订单不符合商品限购规则",ErrorCodeTypeEnum.SELLER_ERROR), CERTIFICATETYPE_OUT_RESTRICTION(Boolean.FALSE,"60020","certificateType out restriction","证件不符合限购规则",ErrorCodeTypeEnum.SELLER_ERROR), CERTIFICATETYPE_REPEAT(Boolean.FALSE,"60021","certificateType repeat","证件号重复",ErrorCodeTypeEnum.BIZ_ERROR), HEALTH_CODE_VERIFICATION_FAILED(Boolean.FALSE,"60043","health code verification failed","健康码校验未通过",ErrorCodeTypeEnum.SYE_ERROR), ORDER_ALREADY_CREATE(Boolean.FALSE,"61001","order already create","在系统商侧订单已经预约过",ErrorCodeTypeEnum.SYE_ERROR), /** * 业务异常 需特殊处理 */ PRODUCT_INFORMATION_EXCEPTION(Boolean.FALSE, "65001", "product information exception", "产品信息异常",ErrorCodeTypeEnum.SELLER_ERROR), QUERY_ORDER_INFORMATION_EXCEPTION(Boolean.FALSE, "65002", "query order information exception", "直连订单查询不存在",ErrorCodeTypeEnum.SYE_ERROR), OUT_OF_STOCK_EXCEPTION(Boolean.FALSE, "65003", "The inventory of this product is insufficient on that day, please select another date.", "该产品当日库存不足,请选择其它日期。",ErrorCodeTypeEnum.SELLER_ERROR), INSUFFICIENT_ACCOUNT_DEPOSIT_EXCEPTION(Boolean.FALSE, "65004", "The account balance of the merchant is insufficient, please choose other goods to buy!", "商家账号余额不足,请选择其它商品购买!",ErrorCodeTypeEnum.SELLER_ERROR), ITEMCODE_NOT_FOUND(Boolean.FALSE, "65005", "Product code does not exist or has been taken off the shelf or not authorized", "商品编码不存在或已下架或未授权",ErrorCodeTypeEnum.SELLER_ERROR), THE_ORDER_HAS_BEEN_CANCELLED_AND_CANNOT_BE_PAID_PLEASE_TRY_AGAIN_LATER(Boolean.FALSE, "65006", "The order has been cancelled and cannot be paid. Please try again later", "订单已经取消,不能进行支付,请您稍后再试",ErrorCodeTypeEnum.SELLER_ERROR), ORDER_DOES_NOT_EXIST_PLEASE_TRY_AGAIN_LATER(Boolean.FALSE, "65007", "Order does not exist, please try again later", "订单不存在,请稍后再试",ErrorCodeTypeEnum.SELLER_ERROR), ERROR_OR_BLANK_IN_OBTAINING_VOUCHER_INFORMATION(Boolean.FALSE, "70001", "error_or_blank_in_obtaining_voucher_information", "获取凭证信息有误或为空",ErrorCodeTypeEnum.BIZ_ERROR), /** * 回调链路异常 */ API_NOT_FOUND(Boolean.FALSE, "70002", "api not found", "该系统商没有此能力",ErrorCodeTypeEnum.SYE_ERROR), SUPPLIER_CALLBACK_DATA_NOT_EXISTENT(Boolean.FALSE,"70003","supplier callback data not existent","系统商回调数据为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), THE_CALLBACK_DATA_IS_NOT_STANDARDIZED(Boolean.FALSE,"70004","The_callback_data_is_not_standardized","系统商回调通知数据不规范",ErrorCodeTypeEnum.SUPPLIER_ERROR), NOTIFY_METHOD_NOT_EXIST(Boolean.FALSE, "70005", "notify_method_not_exist", "无对应的回调通知方法",ErrorCodeTypeEnum.SUPPLIER_ERROR), NOTICE_EXTRACT_AK_EXCEPTION(Boolean.FALSE, "70006", "notice extract ak error", "系统商回调通知参数提取ak有误",ErrorCodeTypeEnum.SUPPLIER_ERROR), SUPPLIER_INVALID_CALLBACK_TYPE(Boolean.FALSE,"70007","supplier invalid callback type","系统商回调类型不合法",ErrorCodeTypeEnum.SUPPLIER_ERROR), SUPPLIER_URL_CONFIGURATION_ERROR(Boolean.FALSE,"70008","supplier invalid callback type","系统商回调url配置有误",ErrorCodeTypeEnum.SUPPLIER_ERROR), METHOD_NOT_EXIST(Boolean.FALSE, "70009", "method_not_exist", "无对应的方法",ErrorCodeTypeEnum.SYE_ERROR), /** * 退款回调异常 */ REFUND_NOTICE_PARAM_UNAPPROVENUM_EMPTY(Boolean.FALSE, "72001", "refund_notice_param_unapprovenum_empty", "系统商退款通知不同意退数量为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), REFUND_NOTICE_PARAM_APPROVENUM_EMPTY(Boolean.FALSE, "72002", "refund_notice_param_approvenum_empty", "系统商退款通知同意退数量为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), REFUND_NOTICE_PARAM_SUBORDERNOS_EMPTY(Boolean.FALSE, "72003", "refund_notice_param_subordernos_empty", "系统商退款通知子订单为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), REFUND_NOTICE_PARTIAL_REFUND_NOT_ALLOWED(Boolean.FALSE, "72004", "refund_notice_partial_refund_not_allowed", "系统商退款通知部分退不被允许",ErrorCodeTypeEnum.SUPPLIER_ERROR), REFUND_NOTICE_PARAM_ORDERID_OR_OUTORDERID_EMPTY(Boolean.FALSE, "72005", "refund_notice_order_param_order_id_or_out_order_id_is_empty", "系统商退款通知参数订单或者外部订单id为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), REFUND_REJECTION_REASON_CANNOT_BE_EMPTY(Boolean.FALSE,"72006","refund_rejection_reason_cannot_be_empty","退款拒绝原因不许为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), NOTIFY_REFUND_EXCEPTION(Boolean.FALSE, "72007", "notify refund exception", "退款回调服务异常",ErrorCodeTypeEnum.SYE_ERROR), /** * 核销回调异常 */ VERIFY_NOTICE_PARAM_ORDERID_OR_OUTORDERID_EMPTY(Boolean.FALSE, "74001", "verify_notice_param_order_id_or_out_order_id_is_empty", "系统商核销通知参数订单id或者外部订单id为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), VERIFY_NOTICE_PARAM_VERIFICATIONNUM_EMPTY(Boolean.FALSE, "74002", "verify_notice_param_verification_num_is_empty", "系统商核销通知参数核销数量为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), VERIFY_NOTICE_PARAM_VOUCHERINFO_IS_EMPTY(Boolean.FALSE,"74003","verify_notice_param_voucherinfo_is_empty","系统商核销通知凭证信息为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), VERIFY_NOTICE_CERTIFICATE_ID_EMPTY(Boolean.FALSE,"74004","verify notice param certificateId is empty","系统商核销通知参数证件号为空",ErrorCodeTypeEnum.SUPPLIER_ERROR), VERIFY_NOTICE_CHECK_SIGN_ERROR(Boolean.FALSE, "74005", "verify notice check sign error", "系统商核销回调验签失败",ErrorCodeTypeEnum.SUPPLIER_ERROR), SUPPLIER_VERIFY_FAILURE(Boolean.FALSE,"74006","supplier verify failure","系统商核销失败-{}",ErrorCodeTypeEnum.SUPPLIER_ERROR), VERIFY_MODIFY_ORDER_ERROR(Boolean.FALSE,"74007","verify modify order error","核销修改订单信息失败",ErrorCodeTypeEnum.SYE_ERROR), NOTIFY_VERIFY_EXCEPTION(Boolean.FALSE, "74008", "parameter check exception", "订单核销异常",ErrorCodeTypeEnum.SYE_ERROR), VERIFICATION_NOTIFY_TFC_EXCEPTION(Boolean.FALSE, "74009", "verification notify tfc exception", "核销回调履约服务异常",ErrorCodeTypeEnum.SYE_ERROR), EXCEPTION_IN_WRITE_OFF_MESSAGE_OF_BARLEY_SDK_SUBSCRIPTION(Boolean.FALSE,"74010","Exception_in_write_off_message_of_barley_SDK_subscription","sdk订阅核销消息异常",ErrorCodeTypeEnum.SUPPLIER_ERROR), SIGN_CHECK_FAILED(Boolean.FALSE, "74011", "sign check failed", "回调验签参数校验失败",ErrorCodeTypeEnum.SYE_ERROR), /** * 发码回调异常 */ CALLBACK_CREATE_TFC_EXCEPTION(Boolean.FALSE, "76001", "callback create tfc exception", "发码回调履约服务异常",ErrorCodeTypeEnum.SYE_ERROR), SEND_METAQ_EXCEPTION(Boolean.FALSE,"80001","send metaq exception","发送metaq消息异常",ErrorCodeTypeEnum.SYE_ERROR), SEARCH_REDIS_EXCEPTION(Boolean.FALSE,"80002","search redis exception","未查询到异常信息",ErrorCodeTypeEnum.SYE_ERROR), SEARCH_ORDER_EXCEPTION(Boolean.FALSE,"80003","search order exception","调用travelBC查询订单信息异常",ErrorCodeTypeEnum.SYE_ERROR), /** * 未知错误 兜底返回 99999 */ UNKNOWN_ERROR(Boolean.FALSE,"99999","unknown error","未知错误",ErrorCodeTypeEnum.UNKNOWN_ERROR);