携程接口对接---H5单点登录

概述:

  本文档用于说明携程商旅(以下简称“携程”)向客户提供的APP单点登录对接服务。该服务采用Restful的方式实现。本文档中包含接口方法说明、设计文档、调用方法及完整示例代码。通过H5端单点登录至携程,跳转逻辑默认仅支持中文版。

注意事项:

1、特别提醒:接口调用务必采用域名方式调用,切勿采用IP地址方式调用。
2、接口调用顺序,先调用获取Ticket服务,再调用单点登录H5SignInfo服务。

1 对接说明

  当员工通过其公司移动APP访问携程商旅时,客户公司移动APP根据当前员工信息提供员工工号或者接入账号等接入携程单点登录系统。携程单点登录系统自动校验接入权限,并与携程商旅管理系统内置的员工信息匹配,实现员工身份的识别和整合登录。

2 接口方法说明

2.1.获取Ticket

调用地址: https://ct.ctrip.com/corpservice/authorize/getticket
调用方式: https + post
方法名: GetTicket
描述: 根据已设定的公司接入账户和公司接入密码获得登录令牌。在调用单点登陆服务前,必须要先获取令牌,通过令牌进行登陆。申请令牌时的客户接入账户必须与登陆时的接入账户是一致的。令牌的只能使用一次,登陆后不管成功与否,令牌都会失效,需要重新申请令牌方可再次登陆。
参数: 实体TicketModel实例化对象
参数类型: 对象类型

2.2.单点登录H5SignInfo

调用地址: https://ct.ctrip.com/m/SingleSignOn/H5SignInfo
调用方式: https + post(不支持ajax方式调用)
方法名: H5SignInfo
描述: 根据登录令牌进行单点登录,并传递相关预订信息到携程企业商旅预订站点。获取到令牌后,通过当前服务进行登陆验证。客户公司用户的身份校验合法,则会登陆到指定的页面,如果身份校验失败则会返回对应的错误信息。
参数: Form表单
参数类型: 表单参数

3 接口契约说明

3.1.获取Ticket

3.1.1.请求契约

TicketModel
字段 类型 描述 默认值 可为空 备注
AppKey String 接入账号   N 由携程方提供
AppSecurity String 接入密码   N 由携程方提供
TokenType Int 获取token类型 0 Y

包括两个枚举值:0,1,2

0:代表不自动开卡

1:大客户需要自动开卡

2:平台客户需要自动开卡

GroupID Int 卡号分组,需要携程提供   Y 仅当TokenType为1时,必须传送该值

3.1.2.返回契约

返回Json数据
字段 类型 描述 可为空 备注
Token String 单点登录令牌 N  
Code Int 0 成功;1 参数验证失败;2 接口异常; N  
Message String Result不为Success时给出具体错误信息 N  
Success Boolean 是否接口调用成功 N True:调用成功 False:调用失败

响应RequestResult

示例:{"Token":"5514eea9c3d1b72148000001","Message":"","Code":0,"Success":true}

3.2.单点登录H5SignInfo

3.2.1请求契约

POST参数说明
参数名 参数类型 可为空 备注
AccessUserId string N 单点登录接入账号(同AppKey),由携程方提供
EmployeeId string N 员工编号(长度限制varchar(100))
Token string N 单点登录令牌,调用以上接口获取
Appid string N 公司ID,由携程方提供
Signature string N

签名生成规则说明:

1.加密方式为MD5,32位小写

2.加密字段MD5(AccessUserId+EmployeeID+CorpPayType+CostCenter1

+CostCenter2+CostCenter3+MD5(AppSecurity))示例:MD5("obk_test"+"test"+"public"+"costcenter1"+"costcenter2"+"costcenter3"

+MD5("obk_test"))

加密后的值为:b0b9315d9cb290c5e8e5acb1b02cb2b3 

注意:

1. CorpPayType字段如果不传,在生成MD5签名时需要传public

2. 字符串拼接必须按照上面的顺序 

3. 参与加密的字段,必须在表单中传入单点登录接口

4. 加密字段包含中文,需使用UTF-8编码

5. 加密方法请参考:其他=>代码调用实例=>MD5 加密方法

EndorsementID string Y 审批单号,有提前审批业务时使用,长度最长30
CorpPayType string Y  public(因公)/private(因私),如果不传默认为因公。
InitPage string N

登录成功后的第一个页面可选值为:

Home 首页

HotelSearch 酒店

FlightSearch 机票

TrainSearch 火车票

CarSearch 用车(仅支持中文版)

SFCar 接送机(仅支持中文版)

SDCar 租车(仅支持中文版)

CarOC 马上用车 (仅支持中文版)

MyOrder 我携

FlightOrder 机票订单列表页

HotelOrder 酒店订单列表页

AccreditOrder 授权

FlightList 机票航班列表

site string Y

 登录成功后直接跳转至订单详情页,需要与下面的orderNumber参数同时有值。不传时单点登录成功后跳转到上面的InitPage。

可选值为:Flight(机票订单详情)

Hotel(酒店订单详情)

Train(火车票订单详情)

CarCH(接送机订单详情)

CarSD(租车订单详情)

Trip (行程详情)

orderNumber string Y 订单号。登录成功后直接跳转至对应订单详情页,需要与上面的Site同时有值。不传时单点登录成功后跳转到上面的InitPage。
Callback string N 首页(https://ct.ctrip.com/m),或者返回到客户页面的URL
CostCenter1 string Y 成本中心1
CostCenter2 string Y 成本中心2
CostCenter3 string Y 成本中心3
CostCenterCustom1 string Y 自定义字段1
CostCenterCustom2 string Y 自定义字段2
Name string Y 员工姓名字段,针对TokenType = 1 有效。如果不传,Name默认为员工编号。长度最长支持80。
FirstName string Y 员工英文名FirstName,针对TokenType = 1 有效。长度最长支持60。 该字段不能够传中文字符,以及("<", ">", "!", "&",",","@","#","$","%","*","(",")","^" ,"\","/")这些特殊字符。自动开卡时:FirstName跟LastName都不为空的情况下,才会保存英文名。
MiddleName string Y 员工英文名MiddleName,针对TokenType = 1 有效。长度最长支持30。 该字段不能够传中文字符,以及("<", ">", "!", "&",",","@","#","$","%","*","(",")","^" ,"\","/")这些特殊字符。
LastName string Y 员工英文名LastName,针对TokenType = 1 有效。长度最长支持30。 该字段不能够传中文字符,以及("<", ">", "!", "&",",","@","#","$","%","*","(",")","^" ,"\","/")这些特殊字符。自动开卡时:FirstName跟LastName都不为空的情况下,才会保存英文名。
Language string Y 默认为简体中文,简体中文: zh-cn,英文: en。
NeedConfirmPerson1 string Y 一次授权人员工编号,支持的产品为:国内、国际机票和国内、海外酒店
NeedConfirmPerson2 string Y 二次授权人员工编号,支持的产品为:国内、国际机票和国内、海外酒店
OnError string Y

错误处理方式,可选值(ErrorCode 或 不传) OnError = ErrorCode时,登录失败返回如下

{         "Result"   : true,        

"Response"   : {              

     "ErrorCode"   : "10302001",         

      "ErrorMsg"   : "获取UID失败""        

},       

  "LS"   : "2",      

   "OV"   : "11"} 

OnError不传时,登录失败则返回空白页 ErrorCode对照表提示编码  

提示信息  

10301050  传入的UID和EmployeeID不能同时为空  

10301016  身份校验失败。  

10301017签名校验失败,可能是数据已更改。

10301048字段Signature必须是最大长度为32的字符串。

10302004  Hash验证不通过  

10302005  hash验证非员工登录失败  

10301023  UID不存在,请联系携程!  

10302100  未知错误  

10302101  {0}不能为空  

10302102  {0}必须为数字  

10302103  未获取到的有效的用户邮箱。  

10302104  token验证失败  

10301027  请提供请求数据  

10302106  返回值为空  

10301022  开卡失败。  

10302110  子账号信息不存在  

10302111  AccessUserId不能为空  

10301037  token无效。  

10301039  token使用次数失效。  

10301018  该用户已注销,请联系携程  

10301024  UID或员工编号不属于该公司,请联系携程!  

10301059  UID未关联子账户  

10301055  接入账户不能为空  

10301056  接入密码不能为空  

10301054  TokenType可以不赋值,赋值只能为0或1或2。  

10301025  很抱歉,您的账户未在携程注册,请联系贵司  相关负责人,开通携程账户后方可登录。

Sorry that your account has not been registered in CTRIP Corporate online booking site.

Please contact your company system  manager in order to register your CTRIP account.  

10301021  员工编号不能为空!  

10301069 FirstName,MiddleName,LastName不能包含中文

10301070 FirstName,MiddleName,LastName不能包含特殊字符  

10301090 字段EmployeeID必须是最大长度为100的字符串。

3.2.2机票航班列表查询参数

字段 类型 描述 默认值 可为空 传值规则
FlightSearchType String 航程类型   N

单程:S, 往返:D 

ClassType String 舱等类型   Y

国内机票: 不传默认""不限,  Y:经济舱, C:公务或头等舱
国际机票:  不传默认经济舱, Y:经济舱, S:超级经济舱, C:公务舱, F:头等舱

AirlineCode String 航司二字码   Y

不传默认全部

Ddate String 去程出发日期   N 航程类型为单程/往返时需必传, 格式: yyyy-M-d
Adate String 回程起飞日期   N 航程类型为往返时需必传,格式: yyyy-M-d  注: 回程起飞日期不能晚于去程起飞日期
DCityCode String 去程出发城市三字码   N 航程类型为单程/往返时需必传
ACityCode String 回程到达城市三字码   N 航程类型为单程/往返时需必传
IsDirect String 是否仅查看直飞   Y 不传默认F,T:仅查看直飞,F:查看全部, 只有国际机票需要

 3.2.3酒店详情页面跳转参数

字段 类型 描述 默认值 可为空 传值规则
IsOversea String T:海外酒店;F:国内酒店;其它值:非法参数   N  
HotelType String M:会员酒店;C:协议酒店;其它值:非法参数   Y 海外酒店,必传;国内酒店,非必传
corpPayType String private:因私;public:因公;其它值:非法参数   N  
CityID String 城市ID(数字格式)   N  
CityName String 城市名称   Y 否,传入则必须跟CityID对应
CheckInDate String 入住日期,日期格式:yyyy-MM-dd,(例如:2016-12-08)   N  
CheckOutDate String 离店日期,日期格式:yyyy-MM-dd,(例如:2016-12-08)   N  
RoomNumber String 搜索海外酒店时,房间数(大于等于1)   Y 海外酒店,必传,国内酒店,非必传
InitPage String 跳转页面   N HotelList

 

4 调用方法及代码示例

4.1.接口调用示例代码

4.1.1 获取Ticket

1

2

3

4

5

String  url = "***";

String  postString = "{ \"appKey\": \"***\", \"appSecurity\": \"***\"}";

String  result = PostData (url, postString);

查看代码调用示例

4.1.2 单点登录H5SignInfo

HTML代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<!DOCTYPE HTML PUBLIC"->

/W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title>测试表单</title>

</head>

<body>

    <form action="https://ct.ctrip.com/m/SingleSignOn/H5SignInfo" method="post">

        <input type="hidden" name="accessuserid" value="***" />

        <input type="hidden" name="employeeid" value="" />

        <input type="hidden" name="signature" value="***" />

        <input type="hidden" name="initpage" value="Home" />

        <input type="hidden" name="appid" value="***" />

        <input type="hidden" name="endorsementID" value="1234567" />

        <input type="hidden" name="token" value="***" />

        <input type="hidden" name="onerror" value="errorcode" />

        <input value="单点登录" type="submit" onclick="a()" />

    </form>

</body>

</html>

注意:HTML数据需要通过POST方式提交,IFRAME嵌套目前暂不支持。如果通过Native方式接入,请不要使用Native头部遮挡或下移商旅H5页面。WebView高度不能低于555px。

附录 webView配置信息

首先需要用到控件webView,实例化后,按如下配置

1、设置webviewclient

1

2

3

WebViewClient wvClient = new WebViewClient() {};   

webView.setWebViewClient(wvClient);

2、配置cache localstorage等

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Context mContext;//上下文中获取context

WebSettings settings = webView.getSettings();

               

settings.setAppCacheMaxSize(10 * 1024 * 1024);

settings.setAppCachePath(mContext.getDir("cache", Context.MODE_PRIVATE).getPath());

settings.setDatabasePath(mContext.getDir("database", Context.MODE_PRIVATE).getPath());

settings.setJavaScriptEnabled(true);

settings.setAppCacheEnabled(true);

settings.setDomStorageEnabled(true);

settings.setDatabaseEnabled(true);

settings.setSaveFormData(true);

settings.setSavePassword(true);

settings.setJavaScriptCanOpenWindowsAutomatically(true);

猜你喜欢

转载自blog.csdn.net/weixin_41392824/article/details/81913789