API de información de la cuenta
La API de información de la cuenta incluye detalles sobre cada uno de tus clientes. Tu sitio web creado con la plantilla utilizará esta información como parte del protocolo de inicio de sesión único (SSO) para verificar la cuenta del usuario. Se utilizará para compras, canjes de fidelidad y otras funciones.
Esta API también la pueden usar los agentes de Expedia para verificar el identificador único del viajero (por ejemplo, el número de la tarjeta de crédito) como parte de la solicitud para obtener los datos de la cuenta del usuario. Los datos recibidos se utilizarán para validar al viajero por teléfono antes de proceder a la compra y reserva.
Consulta la página Respuestas y tipos de datos comunes para obtener más información.
Cifrado y descifrado de tarjetas de crédito
Expedia utiliza una técnica JWE (cifrado web JSON) estándar del sector para cifrar y descifrar los datos de las tarjetas de crédito: cifrado asimétrico mediante un par de claves pública y privada.
Casos prácticos de cifrado
El cifrado debe tener lugar en lo siguiente:
- Solicitud: cardNumber
- Respuesta: cardDetails
En el parámetro de solicitud, debes establecer un certificado de clave privada RSA (Rivest Shamir Adleman) firmado por una CA (autoridad de certificación) de 2048 bits y compartirlo con Expedia. A continuación, utilizaremos tu clave pública para cifrar el campo cardNumber utilizando JWE y RSA.
En el parámetro de respuesta, configuraremos una clave privada RSA de 2048 bits firmada por la CA y compartiremos el certificado de clave pública correspondiente con el usuario y contigo. Utilizando la clave pública de Expedia, cifrarás cada elemento de cardDetails utilizando JWE y RSA.
A continuación, te indicamos los pasos del proceso de cifrado.
Cifrado paso a paso
Paso 1: busca el certificado público y obtén la clave pública RSA 2048.
- Genera una clave simétrica aleatoria (RSK) de 256 bits de longitud.
- Cifra la RSK con la clave pública RSA 2048 utilizando el algoritmo RSA-OAEP-256.
Paso 2: genera un vector de inicialización aleatorio (IV) de 96 bits de longitud.
Paso 3: cifra los datos del texto plano utilizando la RSK, el IV y el algoritmo A256GCM a partir de los datos del texto cifrado y la etiqueta de autenticación.
Paso 4: codifica con Base64URL el texto cifrado para producir Base64URL (texto cifrado JWE).
Paso 5: codifica con Base64URL la etiqueta de autenticación, IV, RSK, y el JSON de encabezado JWE para producir lo siguiente:
- Datos de la etiqueta de autenticación: Base64URL (etiqueta de autenticación JWE).
- IV: Base64URL (vector de inicialización JWE)
- RSK: Base64URL (clave cifrada JWE)
- JSON del encabezado JWE: Base64URL (UTF8 (encabezado JWE))
A continuación, serializa el objeto JWE a su formato compacto consistente en partes codificadas con Base64URL delimitadas por puntos ('.') para producir lo siguiente:
Base64URL (UTF8)
(encabezado JWE) || '.' || Base64URL
(clave cifrada JWE) || '.' || Base64URL
(vector de inicialización JWE) || '.' || Base64URL
(texto cifrado JWE) || '.' || Base64URL
(etiqueta de autenticación JWE)
Descifrado del número de la tarjeta en la solicitud
Expedia cifrará cardNumber en la solicitud. La ruta de descifrado es el proceso inverso de la ruta de cifrado:
- Cuando recibas el JWE cifrado, debes descodificar la primera sección del mismo, el encabezado JOSE, para determinar el algoritmo, el cifrado y el keyId (alg, enc, kid).
- A continuación, validarás el iat (issued-at: la hora en que se emitió el JWT) para asegurarte de que no difiere en más de 5 minutos de la hora actual. (El token caducará a los 5 minutos).
- A continuación, busca tu clave privada y descifra la clave de cifrado JWE.
- Por último, utilizando la RSK descifrada, el vector de inicialización JWE y la etiqueta de autenticación JWE, puedes descifrar el parámetro de texto cifrado JWE y verificarlo.
Obtener información de la cuenta
Utilizarás este conjunto de campos para obtener información de la cuenta de un miembro del programa de fidelidad o del titular de una tarjeta utilizando POST /user/v1/account
.
Encabezado
Campo | Descripción | Ejemplo de valor | Tipo de campo | ¿Obligatorio? |
---|---|---|---|---|
partnerId | Identificador único de tu empresa, proporcionado por Expedia | TU MARCA | Cadena, máx. 20 caracteres | Sí |
Authorization | Token de acceso recibido por Expedia desde tu servidor de autorización que debe validar tu equipo | Token web JSON estándar (JWT) | Cadena, longitud JWT estándar | No |
Authorization2 | Token web JSON (JWT) enviado por Expedia; tu empresa debe validar la firma y las reclamaciones | JWT estándar | Cadena, longitud JWT estándar | No |
Solicitud
Campo | Descripción | Tipo de campo | ¿Obligatorio? |
---|---|---|---|
requestId | Identificador único de la solicitud de transacción | Cadena | Sí |
membershipId | Identificador único del cliente | Cadena | No |
loyaltyAccountNumber | El número de la cuenta de fidelidad del cliente (también denominado programAccountNumber ); solo debería rellenarse si se requiere un identificador que no sea membershipId para operaciones de fidelidad | Cadena | No |
programId | Identificador del programa de fidelidad al que está afiliado el cliente o el nombre del nivel asociado al programa de fidelidad | Cadena | No |
cardNumber | Número de la tarjeta de crédito del cliente (cifrado) | Cadena | No |
email | Dirección de correo electrónico del cliente | Cadena | No |
Respuesta
Campo | Descripción | Tipo de campo | ¿Obligatorio? |
---|---|---|---|
status | Estado de la transacción (valores: Aprobado, Rechazado) | Cadena | Sí |
requestId | Identificador único de la solicitud de transacción (de la carga de solicitud) | Cadena | Sí |
ProgramAccount | Detalles de la cuenta del programa; consulta la tabla ProgramAccount para ver los campos anidados | ||
languageId | Los idiomas en los que se puede ver el sitio web | Cadena | No |
channelType | Plataformas para las que está optimizado el sitio web (valores: WEB, MÓVIL, TABLET) | No |
ProgramAccount
Campo | Descripción | Ejemplo de valor | ¿Obligatorio? |
---|---|---|---|
programId | Identificador del programa de fidelidad al que está afiliado el cliente o el nombre del nivel asociado al programa de fidelidad | Aventura Gold | Sí |
accountName | Nombre del programa (si no coincide con programId ) | Aventura | No |
loyaltyAccountNumber | El número de la cuenta de fidelidad del cliente (también denominado programAccountNumber ); solo debería rellenarse si se requiere un identificador que no sea membershipId para operaciones de fidelidad | 1234567 | No |
lastFourDigitsOfCreditCard | Los cuatro últimos dígitos de la tarjeta de crédito utilizada en la reserva | 0000 | No |
loyaltyConversionRatio | Ratio de cómo se convierten los puntos obtenidos en el pago (por ejemplo, 1 EUR = 1 punto) | No | |
loyaltyAccountBalance | Saldo actual de puntos de fidelidad obtenidos por el cliente | 2003 | Sí |
Información del usuario
Campo | Descripción | Ejemplo de valor | ¿Obligatorio? |
---|---|---|---|
userId | Identificador único del cliente; igual que membershipId | Sí | |
name | Nombre, segundo nombre y apellido del cliente | ||
firstName | Nombre del cliente; anidado bajo name | Bob | Sí |
middleName | Segundo nombre del cliente; anidado bajo name | Robert | No |
lastName | Apellido del cliente; anidado bajo name | Jones | Sí |
contactInfo | Información de contacto del cliente, incluida la dirección, el correo electrónico y el número de teléfono | No | |
address | Dirección del cliente, incluidos calle, ciudad, estado o provincia y código postal; anidado bajo contactInfo | ||
streetAddress | Dirección del cliente; anidado bajo address | 123 Main St. | No |
city | Ciudad de la dirección del cliente; anidado bajo address | Boston | No |
state | Estado de la dirección del cliente; anidado bajo address | MA | No |
country | País de la dirección del cliente; anidado bajo address | EE. UU. | No |
postalCode | Código postal de la dirección del cliente; anidado bajo address | 02112 | No |
taxProvince | El estado o la provincia en el que el cliente pagará los impuestos; anidado bajo address | MA | No |
email | Dirección de correo electrónico del cliente; anidado bajo contactInfo | brjones@somewhere.com | No |
contactNumber | Número de teléfono del cliente; anidado bajo contactInfo | 555-555-5555 | No |
userType | Si el cliente es un usuario único (principal) o está asociado a una organización | No | |
dateOfBirth | Fecha de nacimiento del cliente | No | |
cardDetails | Detalles sobre la tarjeta de crédito utilizada en la transacción; si se rellena, algunos elementos anidados deben estar cifrados | No | |
cardNumber * | Número de tarjeta de crédito utilizado en la transacción (cifrado); anidado bajo cardDetails | Sí | |
cardType | Tipo de tarjeta utilizada (cifrado); anidado bajo cardDetails | Sí | |
expirationDate * | Fecha de caducidad de la tarjeta en formato MM/AAAA (cifrado); anidado bajo cardDetails | Sí | |
billingAddress | Dirección de facturación de la tarjeta utilizada en la transacción; anidado bajo cardDetails | ||
firstAddressLine * | Primera línea de la dirección de facturación (cifrado); anidado bajo billingAddress | Sí | |
secondAddressLine | Segunda línea de la dirección de facturación; anidado bajo billingAddress | No | |
thirdAddressLine | Tercera línea de la dirección de facturación; anidado bajo billingAddress | No | |
city | Elemento de ciudad de la dirección de facturación; anidado bajo billingAddress | No | |
province | Elemento de provincia o estado de la dirección de facturación; anidado bajo billingAddress | No | |
countryCode | Elemento de país de la dirección de facturación; anidado bajo billingAddress | No | |
postalCode * | Elemento de código postal de la dirección de facturación (cifrado); anidado bajo billingAddress | Sí |
Nota: Si se rellena alguno de los campos de cardDetails
, los marcados con un * son obligatorios. Todos los datos de estos campos están cifrados.
Detalles de la API
Sin información de la tarjeta de crédito
Con información de la tarjeta de crédito