账单相关接口
企业查询支付信息
接口地址:payment/getPaymentInfo
请求方式:POST
请求参数说明:
| 参数名 | 参数类型 | 备注 | 是否必填 | 示例值 | 
|---|---|---|---|---|
| cardId | String | 公司卡号 | 是 | VCENTCRM0002220001 | 
| cardPassWord | String | 公司卡密码 | 是 | TestPassword | 
| orderIds | List<String> | 订单号 | 是 | ["R001","R001"]  每次最多传100个订单号 订单下单时间超过一年不支持查询(订单会归档)  | 
请求示例:
{
  "cardId": "VCENTCRM0002220001",
  "cardPassWord": "TestPassword",
  " orderIds ": [
    "R001",
    "R001"
  ]
}
返回参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| code | code | 状态码  200 成功! 500 应用程序繁忙,请稍后再试! 521 企业V卡号或者验证码错误!  | 
| message | String | 响应消息 | 
| content | List<PaymentInfo> | 支付信息 | 
PaymentInfo:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| orderId | String | 订单号 | 
| account | String | 支付账号 | 
| transactionId | String | 支付交易流水号 | 
| amont | Decimal | 金额 | 
| payMode | String | 类型:  PAY:付款 REFUND:退款  | 
| paymentStatus | String | 支付状态:  NONE:支付中 SUCCESS:成功 FAIL:失败  | 
| payType | String | 支付方式:  NONE:其他 ALIPAY_HOLD:支付宝 CNAC_PAY:中航结  | 
返回示例:
{
  "code": "200",
  "message": "成功!",
  "content": [
    {
      "orderId": "R2000014030395147001",
      "account": "ALIPAY_TEST_Account",
      "amount": 167,
      "transactionId": "2020083122001459351428640988",
      "payType": "ALIPAY_HOLD",
      "payMode": "PAY",
      "paymentStatus": "SUCCESS"
    },
    {
      "orderId": "R2000014030395147001",
      "account": "ALIPAY_TEST_Account",
      "amount": 167,
      "transactionId": "2020083122001459351428640988",
      "payType": "ALIPAY_HOLD",
      "payMode": "REFUND",
      "paymentStatus": "SUCCESS"
    }
  ],
  "echoToken": "8bad5923-f70d-4f3a-adbd-c7e2791f3f40"
}
企业查询房单信息
接口地址:bill/searchBillListByCompany
请求方式:POST
请求参数说明:
| 参数名 | 参数类型 | 备注 | 是否必填 | 示例值 | 
|---|---|---|---|---|
| cardId | String | 公司卡号 | 是 | VCENTCRM0002220001 | 
| cardPassWord | String | 公司卡密码 | 是 | TestPassword | 
| orderMonth | Date | 结算月份a | 是 | 2020-05-01 | 
| isAccordingDay | Boolean | 是否按照天查询 | 否 | false | 
| pageIndex | Int | 当前页 | 是 | 1 | 
| pageCount | Int | 每页数量 | 是 | 100 | 
请求示例:
{
  "date": "2020-05-01",
  "cardId": "VCENTER10000000652",
  "cardPassWord": "123321a",
  "pageIndex": 1,
  "pageCount": 100
}
返回参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| code | code | 状态码  200 成功! 500 应用程序繁忙,请稍后再试! 521 企业V卡号或者验证码错误!  | 
| message | String | 响应消息 | 
| content | SearchAccountStatementResponse | 账单信息 | 
SearchAccountStatementResponse:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| pageIndex | Int | 当前页 | 
| pageCount | Int | 每页数量 | 
| totalPages | Int | 总页数 | 
| totalRows | Int | 总页数 | 
| rows | List<BillInfo> | 总页数 | 
BillInfo:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| outerRefId | String | OA号 | 
| cardId | String | 企业卡号(ID) | 
| companyName | String | 企业名称 | 
| guaranteeMode | String | 支持的担保模式  NONE:无 FIRST_NIGHT:首晚担保 FULL_AMOUNT:全额担保 1、到付和预付区别 a、guaranteeMode是NONE,则支持到店付或者预付 b、guaranteeMode是FIRST_NIGHT或者FULL_AMOUNT,则必须预付 2、担保模式使用 a、企业协议价按照企业卡的担保模式(运营开卡时确认的担保模式) b、活动价按照房价码担保模式,判断房量房价接口中的BookDTO中的guaranteeMode(担保模式)(房量房价接口中activityId不为空就是活动房价码;活动价下单时,验价及下单接口必须要传activityId,否则默认为会员价) 3、现付客户不能使用活动价注意事项 由于活动价的担保模式都是需预付,导致因公现付或者因私订单,下单后会在5分钟内自动取消。所以建议因公现付客户或者因私订单不要使用活动价,而是使用企业协议价下单。  | 
| brandName | String | 品牌名称 | 
| cityName | String | 城市名称 | 
| hotelId | String | 酒店ID | 
| hotelName | String | 酒店名称 | 
| orderId | String | 预订订单号 | 
| checkInDate | Date | 预订单入住日期 格式:yyyy-MM-dd HH:mm:ss | 
| checkOutDate | Date | 预订单离店日期 格式:yyyy-MM-dd HH:mm:ss | 
| days | Int | 天数 | 
| bookStatus | String | 订单预订状态 P:处理中(中间态) R:预订成功 E:完成 X:取消  | 
| totalPrice | Decimal | 预订单价格(整单) | 
| taxpayerType | String | 门店类型 | 
| invoiceType | String | 发票类型 | 
| taxDiffAmount | Decimal | 税点差额(整单) | 
| settleShiftTaxDiffAmount | Decimal | 结算金额不含税点差额(整单) | 
| settleContainTaxDiffAmount | Decimal | 结算金额含税点差额(整单) | 
| realCheckInStatus | String | 实际入住状态  R:预订成功 X:取消 I:入住 O:离店 N:NoShow S:临时挂账  | 
| realCheckInDate | Date | 实际入住时间 格式:yyyy-MM-dd HH:mm:ss | 
| realCheckOutDate | Date | 实际离店时间 格式:yyyy-MM-dd HH:mm:ss | 
| realCheckInAmount | Decimal | 当前房间的不含税点差的房费(房间) | 
| isConfirm | Bool | 是否已确认 | 
| confirmAmount | Decimal | 确认金额 | 
| remark | String | 备注 | 
返回示例:
{
  "code": "200",
  "message": "成功!",
  "content": {
    "pageIndex": 1,
    "pageCount": 100,
    "totalPages": 1,
    "totalRows": 4,
    "rows": [
      {
        "outerRefId": "HD2000014019242948001",
        "cardId": "VCENTCRM0000046821",
        "companyName": "测试公司",
        "guaranteeMode": "FIRST_NIGHT",
        "brandName": "汉庭",
        "cityName": null,
        "hotelId": "2000014",
        "hotelName": "汉庭上海人民广场酒店",
        "orderId": "R2000014019242948001",
        "checkInDate": "2020-04-10 00:00:00",
        "checkOutDate": "2020-04-12 00:00:00",
        "days": null,
        "bookStatus": "RESERVE",
        "totalPrice": 662.0,
        "taxpayerType": "GENERAL",
        "invoiceType": "SPECIAL",
        "taxDiffAmount": 0.0,
        "settleShiftTaxDiffAmount": 662.0,
        "settleContainTaxDiffAmount": 662.0,
        "realCheckInStatus": "N",
        "checkInName": "总对总测试数据",
        "realCheckInDate": "2020-04-10 18:12:00",
        "realCheckOutDate": "2020-04-12 10:11:00",
        "realCheckInAmount": 662.0,
        "isConfirm": false,
        "confirmAmount": 0.0,
        "remark": null
      }
    ]
  }
}
查询实际入住信息
接口地址:/order/queryOrderCheckInInfo
请求方式:POST
请求参数说明:
| 参数名 | 参数类型 | 备注 | 是否必填 | 示例值 | 
|---|---|---|---|---|
| cardId | String | 公司卡号 | 是 | VCENTCRM1016433543 | 
| cardPassWord | String | 公司卡密码 | 是 | A7A5C7DF-A1B2-469B-8361-A1AF85289571 | 
| orderId | String | 订单号 | 是 | R2000014065860371001 | 
| hotelId | String | 酒店Id | 是 | 2000014 | 
请求示例:
{
  "cardId": "VCENTCRM0002224829",
  "cardPassWord": "123321a",
  "orderId": "R2000014072885273001",
  "hotelId": "2000014"
}
返回参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| code | code | 状态码  200 成功! 500 应用程序繁忙,请稍后再试!  | 
| message | String | 响应消息 | 
| content | QueryOrderCheckInInfoDTO | 入驻码信息 | 
QueryOrderCheckInInfoDTO:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| orderId | String | 订单号 | 
| orderStatus | String | 预订单状态 | 
| roomCharge | Decimal | 当前房费 | 
| taxDiffAmount | Decimal | 税点差金额 | 
| checkInInfoList | List<OrderCheckInInfoDTO> | 实际入住信息 | 
OrderCheckInInfoDTO:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| receptionOrderId | String | 接待单id | 
| receptionStatus | String | 接待单状态  R:预订成功 X:取消 I:入住 O:离店 N:NoShow S:临时挂账  | 
| checkIn | Datetime | 实际入住时间 格式:yyyy-MM-dd HH:mm:ss | 
| checkOut | Datetime | 实际离店时间 格式:yyyy-MM-dd HH:mm:ss | 
| debitAmount | Decimal | 消费金额 | 
| debitAmountTax | Decimal | 消费金额税点差额 | 
返回示例
{
  "code": "200",
  "message": "成功!",
  "content": {
    "orderId": "R2000014072885273001",
    "orderStatus": "R",
    "roomCharge": 7040,
    "taxDiffAmount": 100,
    "checkInInfoList": [
      {
        "receptionOrderId": "C2000014072885273001",
        "receptionStatus": "O",
        "checkIn": "2021-12-22 14:42:47",
        "checkOut": "2021-12-23 15:08:56",
        "debitAmount": 188.0,
        "debitAmountTax": 188.0
      }
    ]
  }
}
预订单状态变更推送企业(回调接口)
注意:
- 如果华住推送的订单在客户自有系统中不存在,建议在客户系统中补录订单或发起取消,以免造成差异。有问题请及时联系华住相关人员配合处理。
 
说明:
B2B渠道订单状态发生变化后,实时推送订单状态。回调接口响应时长不能超过1秒。如果逻辑处理耗时较多,建议异步处理。随着接口升级有可能会增加字段,请注意兼容
对接预订单状态变更推送服务,企业需提供通知接口,通知接口标准参数定义见下:
请求方式:POST
HttpHeaders增加参数验证:
time:取系统当前时间,格式:yyyy-MM-dd HH:mm:ss
sign:客户的Secret + time,MD5加密
客户接收数据时,自行验签:拿到请求头中的time和自己公司的Secret,MD5加密,生成sign1,比较sign和sign1
sign1 = MD5Utils.encodeMD5(String.format("%s%s", 客户的Secret, time));
注:接口仅用于接收数据,不要做任何逻辑处理,另写一个服务去处理数据,响应时长不能超过3s,随着接口升级有可能会增加字段,需要兼容
请求参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| orderId | String | 订单号 | 
| hotelId | String | 酒店ID | 
| businessType | String | 业务模式  CASH:现付,例如:到门店付 COMPANY_ADVANCE:企业预付,例如:支付宝立即扣、中航结立即扣 CREDIT:信用,例如:担保金月结,担保金离店T+N扣款  | 
| outerRefId | String | OA关联号 | 
| bookStatus | String | 订单预订状态 P:处理中(中间态) R:预订成功 E:完成 X:取消  | 
| pmsAdapterOrderStatus | String | 实际订单状态   R:预订成功 I:入住 O:离店 N:NoShow E:完成 X:取消  | 
| cardId | String | 卡号 | 
| bookerId | String | 预订卡号 | 
请求示例:
{
  "bookStatus": "X",
  "bookerId": "VCENTCRM1016431303",
  "businessType": "CREDIT",
  "cardId": "VCENTCRM1016431303",
  "hotelId": "2000014",
  "orderId": "R2000014071677475021",
  "outerRefId": "0000000",
  "cardId": "",
  "bookerId": ""
}
返回参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| code | String | 响应码 200 成功,其他为失败 | 
| message | String | 响应消息 | 
注:若通知接口返回code不是200,B2B会重复推送,重复推送最多10次
预订单信息推送企业(回调接口)
注意:
- 如果华住推送的订单在客户自有系统中不存在,建议在客户系统中补录订单或发起取消,以免造成差异。有问题请及时联系华住相关人员配合处理。
 
说明:
B2B渠道客户预订成功后,实时推送预订单信息。回调接口响应时长不能超过1秒。如果逻辑处理耗时较多,建议异步处理。随着接口升级有可能会增加字段,请注意兼容
对接预订单信息,企业需提供通知接口,通知接口标准参数定义见下:
请求方式:POST
HttpHeaders增加参数验证:
time:取系统当前时间,格式:yyyy-MM-dd HH:mm:ss
sign:客户的Secret + time,MD5加密
客户接收数据时,自行验签:拿到请求头中的time和自己公司的Secret,MD5加密,生成sign1,比较sign和sign1
sign1 = MD5Utils.encodeMD5(String.format("%s%s", 客户的Secret, time));
注:接口仅用于接收数据,不要做任何逻辑处理,另写一个服务去处理数据,响应时长不能超过3s,随着接口升级有可能会增加字段,需要兼容
请求参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| orderId | String | 订单号 | 
| hotelId | String | 酒店ID | 
| businessType | String | 业务模式  1:现付,例如:到门店付 2:企业预付,例如:支付宝立即扣、中航结立即扣 4:信用,例如:担保金月结,担保金离店T+N扣款  | 
| outerRefId | String | OA关联号 | 
| bookStatus | String | 订单预订状态 P:处理中(中间态) R:预订成功 E:完成 X:取消  | 
| pmsOrderAdapterStatus | String | 实际订单状态   R:预订成功 I:入住 O:离店 N:NoShow E:完成 X:取消  | 
| cardId | String | 卡号 | 
| bookerId | String | 预订卡号 | 
| orgName | String | 酒店名称 | 
| orgCityId | String | 城市ID | 
| orgCityName | String | 城市名称 | 
| orgAddress | String | 酒店地址 | 
| roomTypeIdName | String | 房型名称 | 
| checkInDate | Date | 入住日期 格式:时间戳 | 
| checkOutDate | Date | 离店日期 格式:时间戳 | 
| bookerPriceType | String | 预订价格类型:0 个人,1 企业 | 
| roomCount | Integer | 房间数 | 
| bookerPersonId | String | 预订人员工编号 | 
| totalPrice | BigDecimal | 预订单总金额 | 
| bookingTotalPrice | BigDecimal | 预订单金额(元)(含税点差)(整单) | 
| isInternational | Integer | 国内国际类型: 0 国内,1 国际 | 
| travelType | String | 出行方式:因公 COMPANY,因私 PERSON | 
| createTime | Date | 创建时间 格式:时间戳 | 
| personPayDate | Date | 支付时间 格式:时间戳 | 
| costCenter | List<String> | 成本中心 | 
| linkName | String | 联系人姓名 | 
| linkMobile | String | 联系人手机号 | 
| linkPersonId | String | 联系人员工编号 | 
| dailyPriceLists | List<DailyPriceDTO> | 每日房价信息 | 
DailyPriceDTO:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| roomTypeId | String | 房型 | 
| bizDate | String | 营业日 格式:时间戳 | 
| currencyCode | Date | 币种 | 
| marketPrice | BigDecimal | 门市价 | 
| marketCnyPrice | BigDecimal | 人民币门市价(含税价) | 
| beforeTaxPrice | BigDecimal | 税前价(净价) | 
| beforeTaxCnyPrice | BigDecimal | 人民币税前价(净价) | 
| afterTaxPrice | BigDecimal | 税后价(含税价) | 
| afterTaxCnyPrice | BigDecimal | 人民币税后价(含税价) | 
| companyToGroupPrice | BigDecimal | 公司总对总价(含税价+税点差价) | 
| companyToGroupCnyPrice | BigDecimal | 人民币公司总对总价(含税价+税点差价) | 
请求示例:
{
  "bookStatus": "X",
  "bookerId": "VCENTCRM1032595964",
  "bookerPriceType": "1",
  "businessType": 4,
  "cardId": "VCENTCRM1032595964",
  "checkInDate": 1716307200000,
  "checkOutDate": 1716393600000,
  "createTime": 1716375653000,
  "dailyPriceLists": [
    {
      "afterTaxCnyPrice": 1838.44,
      "afterTaxPrice": 234.00,
      "beforeTaxCnyPrice": 1718.16,
      "beforeTaxPrice": 218.69,
      "bizDate": 1716307200000,
      "companyToGroupCnyPrice": 1961.98,
      "companyToGroupPrice": 249.72,
      "currencyCode": "EUR",
      "marketCnyPrice": 1838.44,
      "marketPrice": 234.00
    }
  ],
  "hotelId": "9007366",
  "isInternational": 1,
  "linkMobile": "18357319905",
  "linkName": "keqi Zhao",
  "costCenter": [
    "张三",
    "李四"
  ],
  "orderId": "900736600401551",
  "orgCityId": "BER",
  "orgCityName": "柏林",
  "orgName": "3.0交叉销售测试酒店",
  "outerRefId": "370244477",
  "roomCount": 1,
  "roomTypeIdName": "SU1",
  "totalPrice": 1838.44,
  "travelType": "COMPANY"
}
返回参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| code | String | 响应码 200 成功,其他为失败 | 
| message | String | 响应消息 | 
注:若通知接口返回code不是200,B2B会重复推送,重复推送最多10次
企业接待信息推送企业(回调接口)
注意:
- 如果华住推送的订单在客户自有系统中不存在,建议在客户系统中补录订单或发起取消,以免造成差异。有问题请及时联系华住相关人员配合处理。
 
说明:
B2B渠道订单退房后,预订单离店日+1天推送信接待单息。回调接口响应时长不能超过1秒。如果逻辑处理耗时较多,建议异步处理。随着接口升级有可能会增加字段,请注意兼容
对接订单接待信息推送服务,企业需提供通知接口,通知接口标准参数定义见下:
请求方式:POST
HttpHeaders增加参数验证:
time:取系统当前时间,格式:yyyy-MM-dd HH:mm:ss
sign:客户的Secret + time,MD5加密
客户接收数据时,自行验签:拿到请求头中的time和自己公司的Secret,MD5加密,生成sign1,比较sign和sign1
sign1 = MD5Utils.encodeMD5(String.format("%s%s", 客户的Secret, time));
注:接口仅用于接收数据,不要做任何逻辑处理,另写一个服务去处理数据,响应时长不能超过3s,随着接口升级有可能会增加字段,需要兼容
请求参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| bookRoomId | Long | 主键(按订单一个房间1条) | 
| outerRefId | String | OA号 | 
| employeeId | String | 预订人员工编号 | 
| cardId | String | 企业卡号(ID) | 
| companyName | String | 企业名称 | 
| guaranteeMode | String | 支持的担保模式  NONE:无 FIRST_NIGHT:首晚担保 FULL_AMOUNT:全额担保 1、到付和预付区别 a、guaranteeMode是NONE,则支持到店付或者预付 b、guaranteeMode是FIRST_NIGHT或者FULL_AMOUNT,则必须预付 2、担保模式使用 a、企业协议价按照企业卡的担保模式(运营开卡时确认的担保模式) b、活动价按照房价码担保模式,判断房量房价接口中的BookDTO中的guaranteeMode(担保模式)(房量房价接口中activityId不为空就是活动房价码;活动价下单时,验价及下单接口必须要传activityId,否则默认为会员价) 3、现付客户不能使用活动价注意事项 由于活动价的担保模式都是需预付,导致因公现付或者因私订单,下单后会在5分钟内自动取消。所以建议因公现付客户或者因私订单不要使用活动价,而是使用企业协议价下单。  | 
| brandName | String | 品牌名称 | 
| cityName | String | 城市名称 | 
| hotelId | String | 酒店ID | 
| hotelName | String | 酒店名称 | 
| orderId | String | 预订订单号 | 
| checkInDate | Date | 预订单入住日期 格式:yyyy-MM-dd | 
| checkOutDate | Date | 预订单离店日期 格式:yyyy-MM-dd | 
| roomCount | Int | 房间数 | 
| days | Int | 间夜数(暂不推送) | 
| bookStatus | String | 预订单状态  R:预订成功 E:完成 N:NoShow X:取消  | 
| totalPrice | Decimal | 预订单价格(整单) | 
| bookingTotalPrice | BigDecimal | 预订单金额(元)(含税点差)(整单) | 
| realCheckInStatus | String | 实际入住状态  R:预订成功 X:取消 I:入住 O:离店 N:NoShow S:临时挂账  | 
| refundAmount | BigDecimal | 退款金额(元)(不含税点差)(整单) | 
| totalRefundTaxDiffAmount | BigDecimal | 退款金额(元)(含税点差)(整单) | 
| refundTaxDiffAmount | BigDecimal | 退款税点差(元)(整单) | 
| checkInName | String | 入住人姓名 | 
| linkName | String | 联系人姓名 | 
| linkEmployeeId | String | 联系人员工编号 | 
| roomTypeId | String | 房型 | 
| realCheckInDate | Date | 实际入住时间 格式:yyyy-MM-dd HH:mm:ss | 
| realCheckOutDate | Date | 实际离店时间 格式:yyyy-MM-dd HH:mm:ss | 
| roomTaxDiffAmount | BigDecimal | 当前房间的含税点差的房费(房间) | 
| realCheckInAmount | Decimal | 当前房间的不含税点差的房费(房间) | 
| taxDiffAmount | decimal | 当前房间的税点差额(房间) | 
| realCheckInStatusName | String | 入住状态说明 | 
| taxpayerType | String | 纳税人性质  NONE:无,未知 GENERAL:一般纳税人  | 
| invoiceType | String | 发票性质  SPECIAL:专票 GENERAL:普票  | 
| taxDiffAmount | decimal | 税点差额(整单) | 
| settleShiftTaxDiffAmount | decimal | 结算金额不含税点差额(整单) | 
| settleContainTaxDiffAmount | decimal | 结算金额含税点差额(整单) | 
| remark | String | 备注 | 
请求示例:
{
  "bookRoomId": 673067597935149056,
  "bookStatus": "R",
  "brandId": "0002",
  "brandName": "汉庭",
  "cardId": "VCENTCRM1016431303",
  "checkInDate": "2024-12-16",
  "checkOutDate": "2024-12-18",
  "cityId": "310100",
  "cityName": "上海",
  "companyConfirmStatus": "PENDING",
  "companyName": "海康",
  "confirmAmount": 0.00,
  "employeeId": "hz00231",
  "guaranteeMode": "NONE",
  "hotelId": "2000014",
  "hotelName": "汉庭上海人民广场酒店",
  "invoiceType": "SPECIAL",
  "isConfirm": false,
  "linkEmployeeId": "hz00231",
  "linkName": "张三",
  "orderId": "R2000014071000733001",
  "outerRefId": "0000000",
  "realCheckInAdapterStatus": "O",
  "realCheckInAmount": 247.00,
  "realCheckInDate": "2024-12-16 20:10:12",
  "realCheckInStatus": "O",
  "realCheckOutDate": "2024-12-18 11:20:32",
  "refundAmount": 0.00,
  "roomCount": 1,
  "roomTypeId": "DRX1",
  "roomTypeName": "大床房A",
  "settleContainTaxDiffAmount": 247.00,
  "settleShiftTaxDiffAmount": 247.00,
  "taxDiffAmount": 0.00,
  "taxpayerType": "GENERAL",
  "totalPrice": 247.00
}
返回参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| code | String | 响应码 200 成功,其他为失败 | 
| message | String | 响应消息 | 
注:若通知接口返回code不是200,B2B会重复推送,重复推送最多10次。
个人接待信息推送企业(回调接口)
注意:
- 如果华住推送的订单在客户自有系统中不存在,建议在客户系统中补录订单或发起取消,以免造成差异。有问题请及时联系华住相关人员配合处理。
 
说明:
B2B渠道订单退房后,预订单离店日+1天推送接待单信息。回调接口响应时长不能超过1秒。如果逻辑处理耗时较多,建议异步处理。随着接口升级有可能会增加字段,请注意兼容
对接订单接待信息推送服务,企业需提供通知接口,通知接口标准参数定义见下:
请求方式:POST
HttpHeaders增加参数验证:
time:取系统当前时间,格式:yyyy-MM-dd HH:mm:ss
注:接口仅用于接收数据,不要做任何逻辑处理,另写一个服务去处理数据,响应时长不能超过3s,随着接口升级有可能会增加字段,需要兼容
请求参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| bookRoomId | Long | 主键(按订单一个房间1条) | 
| orderMonth | Date | 账期 | 
| cardId | String | 企业卡号(ID) | 
| bookerId | String | 预订公司卡(ID) | 
| orderId | String | 预订订单号 | 
| guaranteeMode | String | 支持的担保模式  NONE:无 FIRST_NIGHT:首晚担保 FULL_AMOUNT:全额担保 1、到付和预付区别 a、guaranteeMode是NONE,则支持到店付或者预付 b、guaranteeMode是FIRST_NIGHT或者FULL_AMOUNT,则必须预付 2、担保模式使用 a、企业协议价按照企业卡的担保模式(运营开卡时确认的担保模式) b、活动价按照房价码担保模式,判断房量房价接口中的BookDTO中的guaranteeMode(担保模式)(房量房价接口中activityId不为空就是活动房价码;活动价下单时,验价及下单接口必须要传activityId,否则默认为会员价) 3、现付客户不能使用活动价注意事项 由于活动价的担保模式都是需预付,导致因公现付或者因私订单,下单后会在5分钟内自动取消。所以建议因公现付客户或者因私订单不要使用活动价,而是使用企业协议价下单。  | 
| brandId | String | 品牌ID | 
| brandName | String | 品牌名称 | 
| hotelId | String | 酒店ID | 
| hotelName | String | 酒店名称 | 
| checkInDate | Date | 预订单入住日期 格式:时间戳 | 
| checkOutDate | Date | 预订单离店日期 格式:时间戳 | 
| roomCount | Int | 房间数 | 
| night | Int | 订单间夜 | 
| bookStatus | String | 预订单状态  R:预订成功 E:完成 N:NoShow X:取消  | 
| totalPrice | Decimal | 预订单价格(整单) | 
| linkName | String | 联系人姓名 | 
| linkEmployeeId | String | 联系人员工编号 | 
| roomTypeId | String | 房型 | 
| taxpayerType | String | 纳税人性质  NONE:无,未知 GENERAL:一般纳税人  | 
| employeeId | String | 预订人员工编号 | 
| outerRefId | String | 外部关联ID | 
| realCheckInDate | Date | 实际入住时间 格式:时间戳 | 
| realCheckOutDate | Date | 实际离店时间 格式:时间戳 | 
| realCheckInAmount | Decimal | 当前房间的不含税点差的房费(房间) | 
| realCheckInTotalAmount | Decimal | 当前房间的不含税点差的房费(整单) | 
| invoiceType | String | 发票性质  SPECIAL:专票 GENERAL:普票  | 
| remark | String | 备注 | 
请求示例:
{
  "bookRoomId": 673067597935149056,
  "orderMonth": "2024-06-01",
  "cardId": "VCENTCRM1016431303",
  "bookerId": "VCENTCRM1016431303",
  "orderId": "R2000014071000733001",
  "guaranteeMode": "NONE",
  "brandId": "0002",
  "brandName": "汉庭",
  "hotelId": "2000014",
  "hotelName": "汉庭上海人民广场酒店",
  "checkInDate": 1638201600000,
  "checkOutDate": 1638288000000,
  "roomCount": 1,
  "night": 1,
  "employeeId": "hz00231",
  "bookStatus": "R",
  "totalPrice": 247.00,
  "linkEmployeeId": "hz00231",
  "linkName": "张三",
  "roomTypeId": "DRX1",
  "taxpayerType": "GENERAL",
  "outerRefId": "TXC0001",
  "realCheckInDate": 1638268465000,
  "realCheckOutDate": 1638268572000,
  "realCheckInAmount": 247.00,
  "realCheckInTotalAmount": 247.00,
  "invoiceType": "SPECIAL",
  "remark": "SPECIAL"
}
返回参数说明:
| 参数名 | 参数类型 | 备注 | 
|---|---|---|
| code | String | 响应码 200 成功,其他为失败 | 
| message | String | 响应消息 | 
注:若通知接口返回code不是200,B2B会重复推送,重复推送最多10次。
md5加密示例代码
public static String encodeMD5(String str) {
  MessageDigest md5 = MessageDigest.getInstance("MD5");
  byte[] bytes = md5.digest(str.getBytes("utf-8"));
  return StringUtils.parseToHEXString(bytes);
}