离线数据模式,是指使用动态接口将产品详情、房态库存和价格数据存储到本地,通过增量接口实时更新的模式。牺牲一些数据时效性,方便与自有酒店整合。
下面流程图中使用的不同颜色:黄色代表必选接口,绿色代表备选接口。
一、 酒店静态信息获取
下载酒店xml静态信息,获取酒店的名称、地址、房型、图片等基本信息。(深度阅读:静态信息拉取策略)
二、 产品、价格、库存信息获取
1. 使用三组成对的动态接口,每组包含一个全量接口和一个增量接口,全量接口用于初始化获取数据,增量接口用于异步更新数据。
产品:hotel.data.rp、hotel.incr.state
库存:hotel.data.inventory、hotel.incr.inv
价格:hotel.data.rate、hotel.incr.rate
建议先更新产品数据,如果某酒店获取不到产品,则该酒店不可售,不需要再获取该酒店的库存和价格信息。
2. 接口调用详细流程(以库存为例,产品和价格接口类似):
a.全量更新:hotel.data.inventory用来获取库存数据,注意一次调用不要获取时间间隔太长(即StartDate和EndDate的间隔)的数据,建议30天。HotelIds建议每次调用只传入一个HotelId。hotel.data.inventory的HotelId入参通过静态信息.酒店列表来获取,并通过RP进行有效性过滤(使用hotel.data.rp进行全量更新时不需要过滤RP,因为此接口就是用来获取RP的)。多次调用直到获取所有静态文件酒店列表的HotelId对应的库存信息。全量更新过程大概需要六个小时左右,每周进行一次全量更新。
b.增量更新:全量更新开始后,就可以开始异步地更新增量数据。使用hotel.incr.inv接口异步更新库存数据,调用频率可以从几秒1次到1s几次,每次查询几百到几千数据,依据抓取的延迟程度适当增加、减少抓取频率和数量。hotel.incr.inv的入参LastId,是上一次调用该接口返回的更新位置。第一次调用传入的LastId,使用hotel.incr.id接口来获取。hotel.incr.id的入参为调用hotel.data.inventory时间的前五分钟。hotel.data.inventory和hotel.incr.inv获取到的数据是可以相互覆盖的,使用新数据覆盖旧数据。
三、 订单流程-创建订单之前
订单创建之前进行各项信息校验,是为了及时将错误信息反馈给用户,同时也提高了创建订单时的成功率。
数据校验hotel.data.validate是创建订单之前进行订单数据校验的接口。在进入订单填写页之前,调用此接口校验房态库存、总价等信息。
此外还有一些其他校验接口来提升用户体验,确保下单支付的一次性成功率,这些接口都是可选的。
信用卡验证common.creditcard.validate也可以在用户输入信用卡时进行异步校验。
hotel.data.validate用于校验产品价格和库存是否有效,一般用于用户点击下单时,在调用hotel.order.create之前使用。
hotel.data.booking用法和hotel.data.validate类似,只是还可以校验产品有效性,不推荐使用。
四、 订单流程-创建订单
使用hotel.order.create接口,相关字段从hotel.detail接口的返回值和缓存的静态文件(如果缓存了)中获取。创建订单可以选择同时成单及支付,也可以选择仅创建订单。仅创建订单不需要填写支付信息,但是需要在最晚支付时间前调用hotel.order.pay接口进行支付。
五、 订单运营
需要调用hotel.incr.order实时更新订单状态,以便处理自己的业务或者向用户展示。hotel.order.create会返回最晚取消时间,在此之前可以调用hotel.order.cancel来取消订单。订单创建成功后,可以通过hotel.order.feedback让用户反馈入住状态(非必须、但建议使用)。
查询订单详情使用hotel.order.detail。当订单详情中出现了确认反馈时间点ConfirmPoint的时候,如果觉得这个时间太长,可以使用hotel.order.promote进行催确认。老订单状态变化为特定状态(已结账、删除、NoShow、删除另换酒店)时使用关联订单接口hotel.order.related可以查询新的订单信息,关联订单的产生及详细说明查看该接口的文档。
六、 一些具有特定功能的接口
common.exchangerate: 获取外币对应人民币的汇率。主要用于香港澳门等外币酒店。