51book机票接口对接,吐血整理(含PHP封装代码)
前言 最近在对接51book的机票接口,遇到了挺多坑,所以整理一份作为记录
机票有两个不同的接口,一个是机票,另一个是保险
一、申请
要接51book的机票,首先是要申请账号,这时候应该是有客户经理跟进,然后具体事宜都会告诉你。
拿到账号之后,客户经理会把你的账号拉入测试组,不然测试购买机票然后改签、退票都是需要钱的,做测试支付机票的时候还要去后台开通2个东西:
- 机票支付宝授权,添加营业员
- 保险支付宝授权
这两个是分别授权的,有两个网址。
对了,后台还有密码要设置,点击“我的余额”然后就可以设置了。
二、逻辑
购买机票的逻辑
- 查询航班
- 查看航班座位
- 选择座位预订
- 填写相关信息,预订订单
- 支付
- 后续改签、退票
三、开发
51book那边会有接口文档,现在已经更新http新接口
接口主页:http://ws.51book.com/
机票新接口:http://ws.51book.com/ltips/web/CustomerDetailController.in?id=13&flag=getDetail&language=CH
保险接口文档目前还没有在线的,由51book那边单独发送
接口测试需要51book那边把你的ip设为白名单
机票接口:
- 公共
- 航班查询
- 机票预定
- 支付
- 通知
- 出票通知
- 取消--取消订单退款通知
- 航变通知
- 退票通知
- 改期通知
- 查询订单详情
- 支付前校验
- 我们av查询时试试运价 这个已经调去一次了时时数据了,那么客人查询一直都不支付,会存在位子是否有效,那么二次验价就会起到效果,他会再次调取一次,如果发生变化他会重新验价,客户支付不了,如果没有就直接可以支付。二次验价主要是给客户更好的体验
- 需要开通才能用
- 变更查询
- 变更申请
- 变更需支付
- 退票查询
- 退票退款申请
- 验证舱位价格
- 获取客规
- 改签退票手续费在这里
注意事项
接口参数和返回都说的很清楚,这里就不在详细描述了,我做对接的时候遇到几个坑,需要注意一下:
- 要熟悉下航空公司的规则,例如:儿童是不让单独乘机的,所以买票的时候要做下判断
- 儿童不让单独乘机,引发改签和退票也不能单独改和退,所以这里也要做判断
- 带儿童的订单,接口返回有两个订单号,都要记录
- 因为有2个订单号,所以在接收改签和退票的时候,51book那边发的通知是2次,(但是出票通知就一次)
- 改签的时候,原来订单里的票号是不变的,所以后期查询订单接口就查不到变更后的信息,需要自己记录
改签相关
- 改签没有次数限制,因为要收手续费,只要航班没起飞就可以改签
- 改签不能改出发地和目的地
- 变更中是不能改签和退票
- 改签只能修改价格比当前高的,同时舱位也要比之前高
- 改签手续费是按照原来航班的票价
我设置的状态:
1000:待支付 ,
2000:已支付,待出票 ,
3000:已出票 ,
4000:变更审核中 ,
4100:变更需支付 ,
4200: 处理中,
4300:变更完成,
4400:无法变更,
5000:退票审核中,
5100:审核通过,待退款
5200:退款成功,
5300:无法退/废票,
5400:退款失败,
6000:已取消,
保险接口
- 查询保险产品接口
- 保险产品查询
- 投保
- 保险支付
- 保单查询
- 退保申请
保险接口没有http协议的接口,用的是wsdl格式的,php用soap来对接
首先要说的是保险接口没有异步通知,就是说你下单成功了,他们不是马上可以出保单,需要一会时间,这时候没法立刻获取到保单号,需要调用“保单查询”接口去查,而且不能立即查,需要过一会之后去查才有。查的时候把保单信息放入数据库中。
注意事项
没有异步通知
同个人买不同产品需要调用多次购买接口,同个产品的保单明细可以放多个人,就是说一个产品要下一个单
附上机票接口请求封装代码(thinkphp5写的)
51book机票接口对接,吐血整理(含PHP封装代码)的更多相关文章
- 吐血整理:PyTorch项目代码与资源列表 | 资源下载
http://www.sohu.com/a/164171974_741733 本文收集了大量基于 PyTorch 实现的代码链接,其中有适用于深度学习新手的“入门指导系列”,也有适用于老司机的论文 ...
- 快递鸟顺丰物流api接口对接多种方法整理
目前很多自营电商平台.ERP系统.仓储系统.快递柜企业,对物流模块数据需求还是比较旺盛的.之前有介绍过简单的接口对接方法,这次给大家整理介绍两种快递数据的获取方法. 接口秘钥可以向顺丰公司申请,或者一 ...
- PHP 天巡机票接口
一个旅游网站项目,网站需要机票预订接入了天巡机票接口,获取机票信息,不搞不知道,一搞吓一跳比较麻烦. 搜索机票信息需要分2步,首先POST获得一个SESSION,2秒之后,根据这个SESSION,从一 ...
- EMS电子面单接口对接使用-免费版
快递鸟电子面单接口,可一次对接15家快递公司, 无需和每一家快递公司做对接.支持快递有四通一达.顺丰.EMS.宅急送.德邦.优速等15家快递公司,对顺丰有电子面单服务需求的可以选择顺丰自有的电子面单或 ...
- 记录用友T+接口对接的心酸历程
前言:公司的业务主要是对接财务系统做单据传输或者凭证处理的,难免少不了和各大财务软件做数据对接,其中当然是必须通过接口来传递数据了.于是乎,用友T+的版本来了,对接的工作自然是我来做,可没想到就是这样 ...
- 一看就懂之吐血整理的 Docker 学习笔记
前言 随着devops的兴起,Docker 近年来越来越火,容器化概念也越来越火.此篇将带你瞬间入门Docker. Docker 概述 Docker 出现的背景 在我们的开发过程中,通常是这样的一种流 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(34)-Fiddler如何抓取微信小程序的包-上篇
1.简介 有些小伙伴或者是童鞋们说小程序抓不到包,该怎么办了???其实苹果手机如果按照宏哥前边的抓取APP包的设置方式设置好了,应该可以轻松就抓到包了.那么安卓手机小程序就比较困难,不是那么友好了.所 ...
- Web Api 与 Andriod 接口对接开发经验
最近一直急着在负责弄Asp.Net Web Api 与 Andriod 接口开发的对接工作! 刚听说要用Asp.Net Web Api去跟 Andriod 那端做接口对接工作,自己也是第一次接触Web ...
- Asp.Net Web Api 与 Andriod 接口对接开发经验,给小伙伴分享一下!
最近一直急着在负责弄Asp.Net Web Api 与 Andriod 接口开发的对接工作! 刚听说要用Asp.Net Web Api去跟 Andriod 那端做接口对接工作,自己也是第一次接触Web ...
随机推荐
- 从WinDbg中的转储查看操作系统版本和SP详细信息
这是一个很常见的问题,我们几乎总是遇到.想象一下这样一种情况,我们从某个地方得到一个内存转储,想看看在那里运行的是什么操作系统,安装了什么SP..为此,有一个非常简单的命令. 0:000> ve ...
- git 提交代码报错failed to push some refs to 解决笔记
Administrator@SC- MINGW64 /e/gitrepository (master) $ git push django master To github.com:zgc137/dj ...
- <转>python列表、元组、集合、字典、json相互转换以及其他基础入门
列表元组转其他 # 列表转集合(去重) list1 = [6, 7, 7, 8, 8, 9] set(list1) # {6, 7, 8, 9} #两个列表转字典 list1 = ['key1','k ...
- pycharm配置默认代码和注释模板
有人问,在pycharm新建python文件时,文件开头的注释每次都要重复写,能不能配置成模板?其实pycharm本身自带此功能 在pycharm菜单栏找File -> settings -&g ...
- seqtk 一款快速处理fasta/fastq 文件的小程序
seqtk 的 GitHub 官网 https://github.com/lh3/seqtk 安装 git clone https://github.com/lh3/seqtk.git cd seqt ...
- eclipse修改代码没用、debug无法进断点、
设置eclipse自动编译代码 处理tomcat不进断点问题 添加需要debug的项目 以上操作还是不行的话 可以把tomcat删除重新添加试试看
- thrift 是rpc协议
PC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用) ...
- 第08组 Beta冲刺(1/4)
队名 八组评分了吗 组长博客链接(2分) 小李的博客 作业链接 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 12月3号了解各个小组的进度与难以攻破的地方,晚上安排开会,安排新的冲刺任 ...
- jcenter下载不了时,用国内镜像下载解决
修改build.gradle,以下是原本的配置信息 buildscript { repositories { google() jcenter() } dependencies { classpath ...
- js比较时间大于6个月
//mons是比较的月数,如 2019-02-01 14:27:08 - 2019-08-01 14:27:08 function compareTime(mons,stTime,endTime){ ...