帐户信息 API
帐户信息 API 包含每个客户的详细信息。您的模板网站会将使用此信息作为单点登录 (SSO) 协议的一部分,以验证用户的帐户。它将用于预订、会员积分兑换等操作。
Expedia 客服也可在申请获取用户帐户详细信息的请求中使用此 API 验证旅客的唯一标识符(如信用卡卡号)。收到的详细信息将用于对旅客进行电话验证,然后再让旅客进行搜索和预订。
如需了解更多信息,请参见通用数据和响应页面。
信用卡加密和解密
Expedia 使用行业标准的 JWE(JSON web 加密)技术对详细信用卡信息进行加密和解密:使用一对公钥和私钥进行非对称加密。
加密用例
应进行加密的地方包括:
- 请求:cardNumber
- 响应:cardDetails
在请求参数中,您应设置一个 CA(证书颁发机构)签名的 2048 位 RSA (Rivest Shamir Adleman) 私钥证书,然后与 Expedia 共享。然后,我们将使用您的公钥,使用 JWE 和 RSA 对 cardNumber 字段进行加密。
在响应参数中,我们将设置一个 CA 签名的 2048 位 RSA 私钥,然后与您共享相应的公钥证书。使用 Expedia 公钥,然后使用 JWE 和 RSA 对 cardDetails 的每个元素进行加密。
我们在下面列出了加密过程的步骤。
逐步加密
**第 1 步:**获取公开证书并获取 RSA 2048 公钥。
- 生成长度为 256 位的随机对称密钥 (RSK)。
- 使用 RSA 2048 公钥,使用 RSA-OAEP-256 算法加密 RSK。
**第 2 步:**生成长度为 96 位的随机初始化向量 (IV)。
**第 3 步:**使用 RSK、IV 和 A256GCM 算法加密明文数据,形成密文和验证标签数据。
**第 4 步:**对密文进行 Base64URL 编码,生成 Base64URL(JWE 密文)。
**第 5 步:**对验证标签、IV、RSK 和 JWE header JSON 进行 Base64URL 编码,生成:
- 验证标签数据:Base64URL(JWE 验证标签)。
- IV:Base64URL(JWE 初始化向量)
- RSK:Base64URL(JWE 加密密钥)
- JWE header JSON:Base64URL (UTF8 (JWE header))
然后,将 JWE 对象序列化为由 Base64URL 编码部分(以句点 ('.') 分隔)组成的紧凑格式,从而生成:
Base64URL (UTF8)
(JWE header) || '.' || Base64URL
(JWE 加密密钥) || '.' || Base64URL
(JWE 初始化向量) || '.' || Base64URL
(JWE 密文) || '.' || Base64URL
(JWE 验证标签)
在请求中解密卡号
Expedia 将在请求中加密 cardNumber。解密路径与加密路径相反:
- 收到加密的 JWE 时,应解码 JWE 的第一部分,即 JOSE 标头,以确定算法、加密方式和 keyId(alg、enc、kid)。
- 然后验证 iat(issued-at:JWT 的签发时间),确保它与当前时间相差不超过 5 分钟。(令牌将在 5 分钟后失效)。
- 接下来,获取私钥并解密 JWE 加密密钥。
- 然后,使用解密后的 RSK、JWE 初始化向量和 JWE 验证标签,就可以解密 JWE 密文参数并进行验证。
获取帐户信息
您将使用这组字段发送 POST /user/v1/account
请求获取会员或持卡人的帐户信息。
标题
字段 | 说明 | 示例值 | 字段类型 | 是否必填? |
---|---|---|---|---|
partnerId | 由 Expedia 提供的企业唯一标识符 | 您的品牌 | 字符串,最多 20 个字符 | 是 |
Authorization | Expedia 从您的授权服务器收到的访问令牌,由您的团队进行验证 | 标准 JSON web 令牌 (JWT) | 字符串,标准 JWT 长度 | 否 |
Authorization2 | 由 Expedia 发送的 JSON web 令牌 (JWT);签名和申请将在您的终端进行验证 | 标准 JWT | 字符串,标准 JWT 长度 | 否 |
请求
字段 | 说明 | 字段类型 | 是否必填? |
---|---|---|---|
requestId | 交易请求的唯一标识符 | 字符串 | 是 |
membershipId | 唯一客户标识符 | 字符串 | 否 |
loyaltyAccountNumber | 客户的会员帐号(也称为 programAccountNumber );只有会员操作需要提交除 membershipId 之外的标识符才要填写此字段 | 字符串 | 否 |
programId | 客户所属会员计划的标识符或与会员计划相关的等级名称 | 字符串 | 否 |
cardNumber | 客户信用卡卡号(已加密) | 字符串 | 否 |
email | 客户邮箱地址 | 字符串 | 否 |
响应
字段 | 说明 | 字段类型 | 是否必填? |
---|---|---|---|
status | 交易状态(值:已批准、已拒绝) | 字符串 | 是 |
requestId | 交易请求的唯一标识符(来自请求有效负载) | 字符串 | 是 |
ProgramAccount | 计划帐户详细信息;有关嵌套字段,请参见计划帐户表 | ||
languageId | 网站可显示的语言 | 字符串 | 否 |
channelType | 经过优化的网站平台(值:WEB、MOBILE、TABLET) | 否 |
ProgramAccount
字段 | 说明 | 示例值 | 是否必填? |
---|---|---|---|
programId | 客户所属会员计划的标识符或与会员计划相关的等级名称 | Aventura 金卡 | 是 |
accountName | 计划名称(如果与 programId 不同) | Aventura | 否 |
loyaltyAccountNumber | 客户的会员帐号(也称为 programAccountNumber );只有会员操作需要提交除 membershipId 之外的标识符才要填写此字段 | 1234567 | 否 |
lastFourDigitsOfCreditCard | 客户预订所用信用卡的最后 4 位数 | 0000 | 否 |
loyaltyConversionRatio | 消费金额转换为累积积分的比率(例如 $1 = 1 积分) | 否 | |
loyaltyAccountBalance | 客户累积会员积分的当前余额 | 2003 | 是 |
用户信息
字段 | 说明 | 示例值 | 是否必填? |
---|---|---|---|
userId | 客户的唯一标识符;与 membershipId 一致 | 是 | |
name | 客户名字、中间名和姓氏 | ||
firstName | 客户名字;嵌套在 name 之下 | Bob | 是 |
middleName | 客户的中间名;嵌套在 name 之下 | Robert | 否 |
lastName | 客户的姓氏,嵌套在 name 之下 | Jones | 是 |
contactInfo | 客户联系信息,包括地址、邮箱地址和电话号码 | 否 | |
address | 客户地址,包括街道地址、城市、州或省以及邮政编码;嵌套在 contactInfo 之下 | ||
streetAddress | 客户街道地址;嵌套在 address 之下 | 123 Main St. | 否 |
city | 客户街道地址所在城市;嵌套在 address 之下 | Boston | 否 |
state | 客户街道地址所在州,嵌套在 address 之下 | MA | 否 |
country | 客户街道地址所在国家/地区,嵌套在 address 之下 | USA | 否 |
postalCode | 客户街道地址所在邮政编码,嵌套在 address 之下 | 02112 | 否 |
taxProvince | 客户将在哪个州或省纳税;嵌套在 address 之下 | MA | 否 |
email | 客户的邮箱地址,嵌套在 contactInfo 之下 | brjones@somewhere.com | 否 |
contactNumber | 客户的电话号码,嵌套在 contactInfo 之下 | 555-555-5555 | 否 |
userType | 客户是单个(主要)用户还是与组织相关联 | 否 | |
dateOfBirth | 客户的出生日期 | 否 | |
cardDetails | 交易中使用的信用卡的详细信息;如果填写,则必须对某些嵌套项目进行加密 | 否 | |
cardNumber * | 交易中使用的信用卡卡号(已加密);嵌套在 cardDetails 之下 | 是 | |
cardType | 使用的银行卡类型(已加密);嵌套在 cardDetails 之下 | 是 | |
expirationDate * | 以 MM/YYYY 格式表示的银行卡有效期(已加密);嵌套在 cardDetails 之下 | 是 | |
billingAddress | 交易中使用的银行卡的账单地址;嵌套在 cardDetails 之下 | ||
firstAddressLine * | 账单地址的第一行(已加密),嵌套在 billingAddress 之下 | 是 | |
secondAddressLine | 账单地址的第一行(已加密),嵌套在 billingAddress 之下 | 否 | |
thirdAddressLine | 账单地址的第三行(已加密),嵌套在 billingAddress 之下 | 否 | |
city | 账单地址所在城市,嵌套在 billingAddress 之下 | 否 | |
province | 账单地址所在省/州,嵌套在 billingAddress 之下 | 否 | |
countryCode | 账单地址所在国家/地区,嵌套在 billingAddress 之下 | 否 | |
postalCode * | 账单地址所在邮政编码,嵌套在 billingAddress 之下 | 是 |
注:如果cardDetails
中的任意字段已填充,标有 * 的字段为必填字段。这些字段中的所有数据都已经过加密。
API 详情
无详细信用卡信息
含详细信用卡信息