PC单点登录接口V1.0
概述
注意事项

契约
1.描述
客户公司需事先提供员工相关信息给携程, 携程为每一个员工指定一个携程卡号并与其员工编号关联,同时为该公司提供单点登录接口的接入账号和接入密码。
当员工通过其内部系统(如:OA系统)访问携程网站时,内部系统根据当前员工信息提供员工编号或携程卡号、接入账号、接入密码等接入携程单点登录系统。携程单点登录系统自动校验接入账号和接入密码,并与携程商旅管理系统内置的员工信息匹配,实现员工身份的识别和整合登录。
2.接口方法说明
2.1.获取令牌
| 调用地址: | https://ct.ctrip.com/corpservice/authorize/getticket |
| 调用方式: | HTTPS + 帖子 |
| 方法名: | 获取票证 |
| 描述: | 根据已设定的公司接入账户和公司接入密码获得登录令牌。在调用单点登录服务前,必须要先获取令牌,通过令牌进行登录。申请令牌时的客户接入账户必须与登录时的接入账户是一致的。令牌的只能使用一次,登录后不管成功与否,令牌都会失效,需要重新申请令牌方可再次登录。 |
| 参数: | 实体TicketModel实例化对象 |
| 参数类型: | 对象类型 |
2.2.单点登录Login
| 调用地址: | https://ct.ctrip.com/corpservice/authorize/login |
| 调用方式: | https + post(必须使用提交Form表单方式调用,具体请参考4.1.4) |
| 方法名: | 登录 |
| 描述: | 根据登录令牌进行单点登录,并传递相关预订信息到携程企业商旅预订站点。获取到令牌后,通过当前服务进行登录验证。客户公司用户的身份校验合法,则会登录到指定的页面,如果身份校验失败则会返回对应的错误信息,错误信息参考下面3.2.3 |
| 参数: | Form表单 |
| 参数类型: | 表单参数 |
3.接口契约说明
3.1. 获取令牌
3.1.1.请求契约
| TicketModel (票证模型) | |||||
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 备注 |
| 应用密钥 | 字符串 | 接入账号 | N | 携程分配给客户公司 | |
| AppSecurity 应用程序安全 | 字符串 | 接入密码 | N | 携程分配给客户公司 | |
| TokenType (令牌类型) | 字符串 | 对接客户需要自动开卡传1 | Y | ||
| 组 ID | Int (整数) | 自动开卡场景卡号所属子账户ID | Y | ||
3.1.2.返回契约
在返回值的Json数据中,客户公司根据自动进行转换实体,建议不要使用绝对匹配属性,避免携程添加属性契约进行升级时造成转换失败引起功能不可用。
| 返回Json数据 | ||||
| 字段 | 类型 | 描述 | 可为空 | 备注 |
| 令 牌 | 字符串 | 单点登录令牌 | N | |
| 法典 | Int (整数) | 参数验证是否成功 | N | 0 成功;1 参数验证失败;2.接口异常 |
| 消息 | 字符串 | Result不为Success时给出具体错误信息 | N | 在系统已知的错误中包含了对应的Code,请参考下面2.3 |
| 成功 | 布尔 | 是否接口调用成功 | N | 成功:true 失败:false |
示例: {“Token”:“56a0af18ae30a168d4006c7c”,“Message”:“”,“Code”:0,“Success”:true}
3.2. 单点登录Login
3.2.1.请求契约
| SSOLogin模型 | |||||
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 备注 |
| 应用密钥 | 字符串 | 接入账号 | N | 携程分配给客户公司 | |
| 票 | 字符串 | 令牌 | N | 请见2.1 | |
| UID | 字符串 | 携程卡号 | Y | 携程卡号、员工编号、邮箱至少提供一个 | |
| 员工 ID | 字符串 | 客户公司员工编号 | Y | 长度最长100 | |
| 电子邮件 | 字符串 | 客户公司员工邮箱 | Y | 长度最长100 | |
| 签名 | 字符串 | MD5签名,长度为32 | N | 签名生成规则说明: 1.加密方式为MD5,32位小写 2.加密字段 MD5(AppKey + UID + 员工 ID + 电子邮件 + TA+ForCorp +成本 1 + 成本 2 + 成本 3 + MD5 (AppSecurity)) 示例:MD5(“obk_test”+“”+“test”+“a@b.com”+“TA001”+“0”+“costcenter1” +“costcenter2”+“costcenter3”+MD5(“XXXX”)) 加密后的值为:7aec59d0e0724318c77119aa6b051ed1 具体规则参照:MD5加密示例 | |
| TA | 字符串 | 关联行程号 | Y | 长度最长200 | |
| ForCorp 公司 | Int (整数) | 因公出行,因私出行选择 | 0 | Y | 0:因公出行,1 :因私出行 |
| 成本1 | 字符串 | 成本中心一 | Y | 客户公司提供 | |
| 成本2 | 字符串 | 成本中心二 | Y | 客户公司提供 | |
| 成本3 | 字符串 | 成本中心三 | Y | 客户公司提供 | |
| 费用4 | 字符串 | 成本中心四 | Y | 客户公司提供 | |
| 成本5 | 字符串 | 成本中心五 | Y | 客户公司提供 | |
| 费用6 | 字符串 | 成本中心六 | Y | 客户公司提供 | |
| 旅程原因 | 字符串 | 出行目的 | Y | 客户公司提供 | |
| 项目 | 字符串 | 项目号 | Y | 客户公司提供 | |
| 定义标志 | 字符串 | 自定义字段一 | Y | 用户需要特别处理预留的字段 | |
| 定义标志 2 | 字符串 | 自定义字段二 | Y | 用户需要特别处理预留的字段2 | |
| 搜索类型 | 字符串 | 搜索类型 | Y | 该字段传值后,InitPage将失效。如果searchType不传,自定义字段都会不生效 传值规范: 1(国内机票列表页)、 2(国际机票列表页)、 3(国内酒店列表页)、 4(海外酒店列表页)、 5(火车票列表页)、 6(国内接送机、接送火车列表页)、 8(境外火车票列表页)、 9(结算平台)、 10(酒店查询首页) 103(国内酒店详情)、 104(海外酒店详情)。 13(酒店出行人选择页) 14(机票查询首页) 具体每个产品的参数见3.2.1.1至3.2.1.5。 | |
| 字符串 | 一次授权人员工编号 | Y | 支持的产品为: | ||
| 字符串 | 二次授权人员工编号 | Y | 支持的产品为: | ||
| 字符串 | 跳转页枚举 | Y | 见附录一 | ||
| 当前语言 | 字符串 | 语言版本 | Y | 中文简体:zh-CN,中文繁体:zh-HK,英文:en-US 仅当传入InitPage或SearchType场景生效 | |
| 字符串 | 订单详情页跳转的订单号 | Y | 当InitPage为HotelOrder、FlightOrder或TrainOrder时,此字段必传 | ||
| 布尔 | 是否限制只允许访问 initPage | Y | true:只允许访问 initPage | ||
3.2.1.1 国内机票查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公 P:因私 | |
| 航班搜索类型 | 字符串 | 航程类型 | N | S:单程 D:往返M:联程 | |
| 类类型 | 字符串 | 舱等类型 | 默认不限 | Y | Y:经济舱 CF:公务或头等舱 |
| 航空公司 | 字符串 | 航司二字码 | 默认不限 | Y | 航司二字码数据请联系实施经理字段长度限制为2 |
| DDate1 | 字符串 | 第一程出发日期 | N | 日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| DDate2 | 字符串 | 第二程出发日期 | Y | 航程类型为往返/联程时需必传日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| 直流1 | 字符串 | 第一程出发城市三字码 | N | 城市三字码数据请联系实施经理字段长度限制为3如:SZX(深圳) | |
| DCityId1 | int | 第一程出发城市ID | N | 城市ID和三字码选其一使用 | |
| 直流2 | 字符串 | 第二程出发城市三字码 | 默认为ACity1值 | Y | 该字段不需传值,航程类型为往返/联程时,默认为第一程到达城市三字码 |
| DCityId2 | int | 第二程出发城市ID | N | 城市ID和三字码选其一使用 | |
| ACity1 | 字符串 | 第一程到达城市三字码 | N | 字段长度限制为3如:SZX(深圳) | |
| ACityId1 | int | 第一程到达城市ID | N | 城市ID和三字码选其一使用 | |
| ACity2 | 字符串 | 第二程到达城市三字码 | Y | 航程类型为往返/联程程时需必传字段长度限制为3如:SZX(深圳) | |
| ACityId2 | int | 第二程到达城市ID | N | 城市ID和三字码选其一使用 | |
| SegmentInfo (细分信息) | 字符串 | 按航班号查询 | Y | 航班号指定信息查询(json格式化后进行UrlEncode)传参方式详见4.2.1 |
Demo 示例
在Form表单中添加如下字段:
| 12345678910 | <input type='hidden' name='CorpPayType' value='C' /> //因公预定<input type='hidden' name='FlightSearchType' value='M' /> //联程<input type='hidden' name='ClassType' value='Y' /> //经济舱<input type='hidden' name='Airline' value='MU' /> //东方航空<input type='hidden' name='DDate1' value='2017-02-20' /> //第一程出发日期<input type='hidden' name='DDate2' value='2017-02-23' /> //第二程出发日期<input type='hidden' name='DCity1' value='SHA' /> //上海<input type='hidden' name='DCity2' value='SZX' /> // 深圳<input type='hidden' name='ACity1' value='SZX' /> //深圳<input type='hidden' name='ACity2' value='TSN' /> //天津 |
3.2.1.2 国际机票查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公P:因私 | |
| 航班搜索类型 | 字符串 | 航程类型 | N | S:单程D:往返M:联程 | |
| 类类型 | 字符串 | 舱等类型 | N | Y:经济舱S:超级经济舱C:公务舱F:头等舱 | |
| 航空公司 | 字符串 | 航司二字码 | 默认不限 | Y | 航司二字码数据请联系实施经理字段长度限制为2如:MU(东方航空) |
| 乘客类型 | 字符串 | 乘客类型 | N | ADU:成人CHI:儿童 | |
| 乘客数量 | 字符串 | 乘机人数 | N | 最小传1 | |
| IsDirect | 字符串 | 是否仅查看直飞 | 默认为否 | Y | T:仅查看直飞F:查看全部 |
| DDate1 | 字符串 | 第一程出发日期 | N | 日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| DDate2 | 字符串 | 第二程出发日期 | Y | 航程类型为往返/多程时需必传日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| DDate3 | 字符串 | 第三程出发日期 | Y | 航程类型为多联程且航程数>=3 时需必传日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| DDate4 | 字符串 | 第四程出发日期 | Y | 航程类型为多联程且航程数>=4 时需必传日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| DDate5 | 字符串 | 第五程出发日期 | Y | 航程类型为多联程且航程数>=5 时需必传日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| DDate6 | 字符串 | 第六程出发日期 | Y | 航程类型为多联程且航程数>=6 时需必传日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| 直流1 | 字符串 | 第一程出发城市三字码 | N | 城市三字码数据请联系实施经理必传字段字段长度限制为3如:SZX(深圳) | |
| 直流2 | 字符串 | 第二程出发城市三字码 | 默认为ACity1值 | Y | 航程类型为往返时该字段不需传值,默认为第一程到达城市三字码航程类型为多程是为必传字段长度限制为3如:SZX(深圳) |
| 直流3 | 字符串 | 第三程出发城市三字码 | Y | 航程类型为多联程且航程数>=3 时需必传字段长度限制为3如:SZX(深圳) | |
| 直流4 | 字符串 | 第四程出发城市三字码 | Y | 航程类型为多联程且航程数>=4 时需必传字段长度限制为3如:SZX(深圳) | |
| 直流5 | 字符串 | 第五程出发城市三字码 | Y | 航程类型为多联程且航程数>=5 时需必传字段长度限制为3如:SZX(深圳) | |
| 直流6 | 字符串 | 第六程出发城市三字码 | Y | 航程类型为多联程且航程数>=6 时需必传字段长度限制为3如:SZX(深圳) | |
| DCityId1 | int | 第一程出发城市ID | N | 城市ID和三字码选其一使用 | |
| DCityId2 | int | 第二程出发城市ID | N | 城市ID和三字码选其一使用 | |
| DCityId3 | int | 第三程出发城市ID | N | 城市ID和三字码选其一使用 | |
| DCityId4 | int | 第四程出发城市ID | N | 城市ID和三字码选其一使用 | |
| DCityId5 | int | 第五程出发城市ID | N | 城市ID和三字码选其一使用 | |
| DCityId6 | int | 第六程出发城市ID | N | 城市ID和三字码选其一使用 | |
| ACity1 | 字符串 | 第一程到达城市三字码 | N | 必传字段字段长度限制为3如:SZX(深圳) | |
| ACity2 | 字符串 | 第二程到达城市三字码 | Y | 航程类型为往返/多程时需必传字段长度限制为3 | |
| ACity3 | 字符串 | 第三程到达城市三字码 | Y | 航程类型为多联程且航程数>=3 时需必传字段长度限制为3如:SZX(深圳) | |
| ACity4 | 字符串 | 第四程到达城市三字码 | Y | 航程类型为多联程且航程数>=4 时需必传字段长度限制为3如:SZX(深圳) | |
| ACity5 | 字符串 | 第五程到达城市三字码 | Y | 航程类型为多联程且航程数>=5 时需必传字段长度限制为3如:SZX(深圳) | |
| ACity6 | 字符串 | 第六程到达城市三字码 | Y | 航程类型为多联程且航程数>=6 时需必传字段长度限制为3如:SZX(深圳) | |
| ACityId1 | int | 第一程到达城市ID | N | 城市ID和三字码选其一使用 | |
| ACityId2 | int | 第二程到达城市ID | N | 城市ID和三字码选其一使用 | |
| ACityId3 | int | 第三程到达城市ID | N | 城市ID和三字码选其一使用 | |
| ACityId4 | int | 第四程到达城市ID | N | 城市ID和三字码选其一使用 | |
| ACityId5 | int | 第五程到达城市ID | N | 城市ID和三字码选其一使用 | |
| ACityId6 | int | 第六程到达城市ID | N | 城市ID和三字码选其一使用 | |
| 航班号 | 字符串 | 航程数 | Y | 多程查询时必传,非多程不必传 | |
| SegmentInfo (细分信息) | 字符串 | 按航班号查询 | Y | 航班号指定信息查询(json格式化后进行UrlEncode)传参方式详见4.2.1 |
| 123456789101112131415 | <input type='hidden' name='CorpPayType' value='C' /> //因公预定<input type='hidden' name='FlightSearchType' value='M' /> //联程<input type='hidden' name='ClassType' value='Y' /> //经济舱<input type='hidden' name='Airline' value='MU' /> //东方航空<input type='hidden' name='PassengerType' value='ADU' /> //乘客类型<input type='hidden' name='PassengerQuantity' value='2' /> //乘客数量<input type='hidden' name='IsDirect' value='T' /> //是否仅查看直飞<input type='hidden' name='DDate1' value='2017-02-20' /> //第一程出发日期<input type='hidden' name='DDate2' value='2017-02-23' /> //第二程出发日期<input type='hidden' name='DCity1' value='SHA' /> //上海<input type='hidden' name='DCity2' value='SEL' /> // 首尔<input type='hidden' name='ACity1' value='HKG' /> //深圳<input type='hidden' name='ACity2' value='TPE' /> //台北<input type='hidden' name='FlightNumber' value='2' /> //2程 |
3.2.1.3 酒店查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公P:因私 | |
| 酒店类型 | 字符串 | 酒店类型 | Y | M:会员酒店C:协议酒店 | |
| 城市ID | 字符串 | 城市ID(数字格式) | N | 城市数据调用接口获取,接口文档路径:审批对接基数数据酒店城市数据 | |
| CheckInDate (检查日期) | 字符串 | 入住日期 | N | 日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| 结帐日期 | 字符串 | 离店日期 | N | 日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| 房间号 | 字符串 | 房间数 | Y | 搜索海外酒店时,该字段为必传 | |
| 酒店 ID | 字符串 | 酒店ID(数字格式) | Y | 酒店ID列表,多个用英文逗号分隔,如果传此字段,列表查询将优先匹配该酒店,最多支持5个酒店ID查询 | |
| 酒店搜索类型 | 字符串 | 酒店ID过滤规则 | 排序 | Y | 配合HotelID传参使用 SORT-指定HotelID的酒店显示在列表第一 FILTER-只显示指定HotelID的酒店 默认SORT |
| 123456 | <input type='hidden' name='CorpPayType' value='C' /> //因公预定<input type='hidden' name='HotelType' value='M' /> //会员酒店<input type='hidden' name='CityID' value='633' /> //纽约<input type='hidden' name='CheckInDate' value='2017-02-20' /> //入住日期<input type='hidden' name='CheckOutDate' value='2017-02-23' /> //离店日期<input type='hidden' name='RoomNumber' value='2' /><input type='hidden' name='' value='345026,345025' /> |
3.2.1.4 酒店详情页面跳转参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公P:因私 | |
| 酒店类型 | 字符串 | 酒店类型 | Y | M:会员酒店C:协议酒店 | |
| 城市ID | 字符串 | 城市ID(数字格式) | N | 城市数据调用接口获取,接口文档路径:审批对接基数数据酒店城市数据 | |
| 酒店 ID | 字符串 | 酒店ID(数字格式) | N | 酒店ID数据请联系实施经理 | |
| CheckInDate (检查日期) | 字符串 | 入住日期 | N | 日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| 结帐日期 | 字符串 | 离店日期 | N | 日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| 房间号 | 字符串 | 房间数 | Y | 跳转海外酒店时,该字段为必传 |
| 123456 | <input type='hidden' name='CorpPayType' value='C' /> //因公预定<input type='hidden' name='HotelType' value='M' /> //会员酒店<input type='hidden' name='CityID' value='2' /> //上海<input type='hidden' name='HotelID' value='12' /> //酒店ID <input type='hidden' name='CheckInDate' value='2017-02-20' /> //入住日期<input type='hidden' name='CheckOutDate' value='2017-02-23' /> //离店日期<input type='hidden' name='RoomNumber' value='2' /> |
3.2.1.5 火车票查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公P:因私 | |
| 从 | 字符串 | 出发城市/车站名拼音 | N | 城市拼音数据调用接口获取,审批对接基数数据火车票车站数据 | |
| FromCityId | int | 出发城市ID | N | 城市或id必传 | |
| 自 | 字符串 | 目的城市/车站名拼音 | N | 如:shanghai(上海) | |
| ToCityId | int | 目的城市ID | N | 城市或id必传 | |
| DDate | 字符串 | 出行日期 | N | 格式:yyyy-MM-dd | |
| 搜索G | 字符串 | 只搜索高铁动车 | Y | 对/错 | |
| TrainSearchType (火车搜索类型) | 字符串 | 行程类型 | S | Y | S - 单程 D - 往返 |
阿达特 | 字符串 | 返程日期 | Y | 格式:yyyy-MM-dd |
3.2.1.6 接送机查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公P:因私 | |
| SendPickType | 字符串 | 接送机类型 | N | JNT:接机 SND:送机 | |
| DepartDate | 字符串 | 出行日期 | N | 格式:yyyy-MM-dd | |
| FltNumber | 字符串 | 航班号 | N | 接送机航班号 |
3.2.1.7 接送火车查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公P:因私 | |
| SendPickType | 字符串 | 接送机类型 | N | JHC:接火车 SHC:送火车 | |
| StationId (工作站 ID) | 字符串 | 火车站id | N | 火车站id |
3.2.1.8 境外火车票查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公P:因私 | |
| DepartLocationCode | 字符串 | 出发城市/车站地点编码 | N | 城市拼音数据调用接口获取,基数数据火车票城市 -> 境外火车票城市&车站数据 | |
| 到达位置代码 | 字符串 | 到达城市/车站地点编码 | N | 如:DE0359 | |
| DDate | 字符串 | 出行日期 | N | 格式:yyyy-MM-dd |
| 12345 | <input type='hidden' name='CorpPayType' value='C' /> //因公预定<input type='hidden' name='From' value='shenzhen' /> //深圳<input type='hidden' name='To' value='shanghai' /> //上海<input type='hidden' name='DDate' value='2018-08-09' /> //搜索2018-08-09的火车票 <input type='hidden' name='SearchG' value='true' /> //只搜索高铁动车 |
3.2.1.9 酒店出行人选择页查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| CorpPayType | 字符串 | 预定类型 | N | C:因公P:因私 | |
| 酒店类型 | 字符串 | 酒店类型 | Y | M:会员酒店C:协议酒店 | |
| 城市ID | 字符串 | 城市ID(数字格式) | N | 城市数据调用接口获取,接口文档路径:审批对接基数数据酒店城市数据 | |
| CheckInDate (检查日期) | 字符串 | 入住日期 | N | 日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| 结帐日期 | 字符串 | 离店日期 | N | 日期格式为:YYYY-MM-DD ,如(2017-02-20) | |
| 房间号 | 字符串 | 房间数 | Y | 搜索海外酒店时,该字段为必传 | |
| 酒店 ID | 字符串 | 酒店ID(数字格式) | Y | 酒店ID列表,多个用英文逗号分隔,如果传此字段,列表查询将优先匹配该酒店,最多支持5个酒店ID查询 | |
| 酒店搜索类型 | 字符串 | 酒店ID过滤规则 | 排序 | Y | 配合HotelID传参使用 SORT-指定HotelID的酒店显示在列表第一 FILTER-只显示指定HotelID的酒店 默认SORT |
3.2.1.10 包车查询参数
| 字段 | 类型 | 描述 | 默认值 | 可为空 | 传值规则 |
| carCharter使用日期 | 字符串 | 包车时间 | Y | 格式:yyyy-MM-dd HH:mm | |
carCharter使用日 | 整数 | 包车天数 | Y | ||
| carCharterDepartCityId | 整数 | 上车城市ID | Y | ||
| carCharterDepart地址 | 字符串 | 上车地址 | Y 必须同时存在 | ||
| carCharterDepartAddressDetail | 字符串 | 上车详细地址 | |||
| carCharterDepartCoordinateCode | 字符串 | 上车坐标类型 | WGS84、GCJ02、BD09 | ||
| carCharterDepartLongitude | 字符串 | 上车经度 | |||
| carCharterDepartLatitude | 字符串 | 上车维度 | |||
| carCharterArrivalCityId | 整数 | 下车城市ID | Y | ||
| carCharterArrival地址 | 字符串 | 下车地址 | Y 必须同时存在 | ||
| carCharterArrivalAddressDetail | 字符串 | 下车详细地址 | |||
| carCharterArrivalCoordinateCode | 字符串 | 下车坐标类型 | WGS84、GCJ02、BD09 | ||
| carCharterArrivalLongitude | 字符串 | 下车经度 | |||
| carCharterArrivalLatitude (汽车包车到达纬度) | 字符串 | 下车纬度 |
3.2.2.返回契约
| 返回 |
| 登录成功后,默认跳转到携程商旅登录后首页或到InitPage指定的页面或到指定产品搜索结果页面。 |
| 失败提示 |
| 参照2.3提示信息内容与编码 |
3.2.3.提示信息内容与编码
| 编码 | 提示信息 |
| 10301000 | 服务器未知错误,请联系管理员。 |
| 10301006 | 调用校验Token服务失败:{0}。 |
| 10301007 | 传入的公司ID和公司密码校验错误或IP受限,请联系携程! |
| 10301008 | 该用户已注销,请联系携程! |
| 10301009 | 验证是否为有效的用户失败:{0}。 |
| 10301014 | 登录请求发生异常:{0}。 |
| 10301015 | 获取登录的Token失败:{0}。 |
| 10301016 | 身份校验失败。 |
| 10301017 | 签名校验失败,可能是数据已更改。 |
| 10301019 | 公司状态异常。 |
| 10301020 | 子账户无效 |
| 10301021 | 员工编号不能为空! |
| 10301023 | UID不存在,请联系携程! |
| 10301024 | UID或员工编号不属于该公司,请联系携程! |
| 10301025 | 很抱歉,您的账户未在携程注册,请联系贵司相关负责人,开通携程账户后方可登录。很抱歉,您的帐户尚未在 CTRIP Corporate 在线预订网站上注册。请联系您公司的系统管理员以注册您的 CTRIP 帐户。 |
| 10301028 | 参数存在错误。 |
| 10301032 | 从库中取到的公司ID为空,请联系携程! |
| 10301037 | token无效。 |
| 10301039 | token使用次数失效。 |
| 10301040 | 字段AppKey必须是一个字符串,其最小长度为1,最大长度为50。 |
| 10301041 | 字段Ticket必须是一个字符串,其最小长度为18,最大长度为32。 |
| 10301042 | 字段TA必须是最大长度为50的字符串。 |
| 10301043 | 字段Cost1必须是最大长度为100的字符串。 |
| 10301044 | 字段Cost2必须是最大长度为100的字符串。 |
| 10301045 | 字段Cost3必须是最大长度为100的字符串。 |
| 10301047 | 字段Action必须是最大长度为10的字符串。 |
| 10301048 | 字段Signature必须是最大长度为32的字符串。 |
| 10301049 | 字段DefineFlag必须是最大长度为100的字符串。 |
| 10301061 | 字段DefineFlag2必须是最大长度为100的字符串。 |
| 10301050 | 传入的UID和EmployeeID不能同时为空。 |
| 10301051 | 字段ForCorp必须是0或1的字符串。 |
| 10301052 | 字段AppSecurity必须是最大长度为50的字符串。 |
| 10301053 | Version可以不赋值,赋值只能为1.0或者2.0。 |
| 10301054 | TokenType可以不赋值,赋值只能为0或1或2。 |
| 10301055 | 接入账户不能为空 |
| 10301056 | 接入密码不能为空 |
| 10301057 | Ticket不能为空。 |
| 10301058 | GroupID字段格式必须是整型数据。 |
| 10301059 | UID未关联子账户。 |
| 10301062 | 卡号不存在 |
| 10301069 | FirstName,MiddleName,LastName不能包含中文 |
| 10301070 | FirstName,MiddleName,LastName不能包含特殊字符 |
| 10301071 | 当SearchType为{0}时,字段{1}为必传 |
| 10301072 | 当SearchType为{0}且{1}为{2}时,字段{3}为必传 |
| 10301073 | 当SearchType为{0}时,字段{1}的值无效,传入值为{2},有效值为{3} |
| 10301074 | 当SearchType为{0}时,字段{1}的格式无效,传入值为{2},正确格式为{3} |
| 10301075 | 当SearchType为{0}时,字段{1}的字节长度错误,传入值为{2},长度为{3},正确字节长度为{4} |
| 10301076 | 字段{0}传入值无效,传入值为{1},有效值为{2} |
| 10301077 | 当SearchType为{0}且{1}为{2}、{3}为{4}时,字段{5}为必传 |
| 10301078 | 当SearchType为{0}且{1}为{2}、{3}为{4}时,字段{5}格式无效,传入值为{6},正确格式为{7} |
| 10301079 | 当SearchType为{0}且{1}为{2}、{3}为{4}时,字段{5}的字节长度错误,传入值为{6},长度为{7},正确字节长度为{8} |
10301090 | 字段必须是最大长度为的字符串。 |
| 990 | 当前接口调用方式存在安全隐患,请改用https方式调用。 |
4.调用方法及代码示例
4.1.调用示例
4.1.1. .NET示例
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | protected void Button3_Click(object sender, EventArgs e) { string url = @'https://ct.ctrip.com/corpservice/authorize/getticket'; string data = '{'AppKey':'***','AppSecurity':'***'}'; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = 'POST'; request.ContentType = 'application/json; charset=utf-8'; request.ContentLength = data.Length; StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII); writer.Write(data); writer.Flush(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string encoding = response.ContentEncoding; if (encoding == null || encoding.Length < 1) { encoding = 'UTF-8'; } StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string retString = reader.ReadToEnd(); this.txtBox.Text = retString; JavaScriptSerializer serialize = new JavaScriptSerializer(); JsonEntity entity = serialize.Deserialize StringBuilder html = new StringBuilder(); html.Append(''); html.Append('); html.AppendFormat(''); html.AppendFormat('', entity.Token); html.AppendFormat(''); html.AppendFormat(''); html.Append(''); html.Append(''); html.Append(''); Response.Write(html.ToString()); } public class JsonEntity { public string Token { get; set; } public bool Success { get; set; } } |
4.1.2. PHP示例
| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | |
4.1.3. JAVA示例
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Ticket获取URL String ticketUrl = 'https://ct.ctrip.com/corpservice/authorize/getticket'; String appKey='***';//携程提供 String appSecurity='***';//携程提供 //Json串 String ticketPostString = '{\'appKey\':\''+appKey+'\',\'appSecurity\':\''+appSecurity+'\'}'; //POST String ticketResponse = sendPost(ticketUrl, ticketPostString); //构造JSON对象,需要导入net.sf.json包 JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(ticketResponse); //获取Ticket String ticket=(String)jsonObject.get('Token'); //单点登录URL String loginUrl=null; String responseText=null; String employeeID='***'; String signature ='***'; String TA='N000001'; String cost1='成本中心1'; String cost2='成本中心2'; String cost3='成本中心3'; loginUrl='https://ct.ctrip.com/corpservice/authorize/login'; responseText=''; responseText=responseText+''; responseText=responseText+''; responseText=responseText+''; //设置编码为UTF-8 response.setHeader('Content-type', 'text/html;charset=UTF-8'); PrintWriter pw = response.getWriter(); pw.println(responseText); } //Post method public static String sendPost(String url, String param) { OutputStreamWriter out = null; BufferedReader in = null; String result = ''; try { URL realUrl = new URL(url); HttpURLConnection conn = null; conn = (HttpURLConnection) realUrl.openConnection();// 打开和URL之间的连接 // 发送POST请求必须设置如下两行 conn.setRequestMethod('POST'); // POST方法 conn.setDoOutput(true); conn.setDoInput(true); // 设置通用的请求属性 conn.setRequestProperty('accept', '*/*'); conn.setRequestProperty('connection', 'Keep-Alive'); conn.setRequestProperty('user-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)'); conn.setRequestProperty('Content-Type', 'application/json'); conn.connect(); out = new OutputStreamWriter(conn.getOutputStream(), 'UTF-8');// 获取URLConnection对象对应的输出流 out.write(param);// 发送请求参数 out.flush();// flush输出流的缓冲 in = new BufferedReader(new InputStreamReader(conn.getInputStream()));//定义BufferedReader输入流来读取URL的响应 String line; while ((line = in.readLine()) != null) { result += line; System.out.println('OK'); } } catch (Exception e) { System.out.println('发送 POST 请求出现异常!'+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } |

