API de informações da conta
A API de informações da conta contém dados sobre cada um dos seus clientes. O seu modelo de site vai usar essas informações como parte do protocolo de login único (SSO) para verificar a conta do usuário. A API vai ser usada para compras, resgate de pontos de fidelidade e muito mais.
Essa API também pode ser usada por agentes da Expedia para verificar o identificador exclusivo do viajante (por exemplo, o número do cartão de crédito) como parte da solicitação para obter os dados da conta do usuário. As informações recebidas são usadas para validar o viajante por telefone antes de prosseguir com as compras e reservas em nome dessa pessoa.
Consulte mais informações na página sobre dados e respostas comuns.
Criptografia e descriptografia de cartão de crédito
A Expedia aplica uma técnica padrão do setor, conhecida como JWE (JSON Web Encryption), para criptografar e descriptografar dados dos cartões de crédito. É uma criptografia assimétrica, com um par de chaves públicas e privadas.
Casos de uso de criptografia
Os locais onde a criptografia é necessária incluem:
- Solicitação: cardNumber
- Resposta: cardDetails
No parâmetro de solicitação, é preciso configurar um certificado de chave privada RSA (Rivest Shamir Adleman) de 2048 bits assinado por uma CA (autoridade certificadora) e compartilhar com a Expedia. Em seguida, vamos usar a sua chave pública para criptografar o campo cardNumber com JWE e RSA.
No parâmetro de resposta, vamos configurar uma chave privada RSA de 2048 bits assinada por uma CA e compartilhar o certificado de chave pública correspondente com você. Usando a chave pública da Expedia, você vai criptografar cada elemento de cardDetails com JWE e RSA.
Siga os passos abaixo para realizar o processo de criptografia.
Guia passo a passo de criptografia
Passo 1: obtenha o certificado público e a chave pública RSA 2048.
- Gere uma chave simétrica aleatória (RSK) com 256 bits de comprimento.
- Criptografe a RSK usando a chave pública RSA 2048 com o algoritmo RSA-OAEP-256.
Passo 2: gere um vetor de inicialização (IV) aleatório com 96 bits de comprimento.
Passo 3: criptografe os dados em texto simples usando a RSK, o IV e o algoritmo A256GCM para formar o texto cifrado e os dados da tag de autenticação.
Passo 4: codifique o texto cifrado em Base64URL para produzir Base64URL (texto cifrado JWE).
Passo 5: codifique em Base64URL a tag de autenticação, o IV, a RSK e o JSON do cabeçalho JWE para produzir:
- Dados da tag de autenticação: Base64URL (tag de autenticação JWE)
- IV: Base64URL (vetor de inicialização JWE)
- RSK: Base64URL (chave criptografada JWE)
- JSON do cabeçalho JWE: Base64URL (UTF8) (cabeçalho JWE)
Em seguida, serialize o objeto JWE no seu formato compacto, composto por partes codificadas em Base64URL delimitadas por pontos ('.'), para produzir:
Base64URL (UTF8)
(cabeçalho JWE) || '.' || Base64URL
(chave criptografada JWE) || '.' || Base64URL
(vetor de inicialização JWE) || '.' || Base64URL
(texto cifrado JWE) || '.' || Base64URL
(tag de autenticação JWE)
Descriptografia do número do cartão na solicitação
A Expedia vai criptografar o cardNumber na solicitação. O caminho de descriptografia é o inverso do caminho de criptografia:
- Quando você receber o JWE criptografado, precisa decodificar a primeira seção do JWE, o cabeçalho JOSE, para determinar o algoritmo, a criptografia e o keyId (alg, enc, kid).
- Em seguida, você vai validar o iat (issued-at: o momento em que o JWT foi emitido) para garantir que não haja diferença de mais de 5 minutos em relação ao horário atual, pois o token expira após 5 minutos.
- Depois, use a sua chave privada e descriptografe a chave de criptografia JWE.
- Então, usando a RSK descriptografada, o vetor de inicialização JWE e a tag de autenticação JWE, você pode descriptografar e verificar o parâmetro de texto cifrado JWE.
Obter informações da conta
Você vai usar este conjunto de campos para buscar informações da conta de um associado do programa de fidelidade ou titular de cartão usando POST /user/v1/account
.
Cabeçalho
Campo | Descrição | Exemplo do valor | Tipo de campo | Obrigatório? |
---|---|---|---|---|
partnerId | Identificador exclusivo da empresa, disponibilizado pela Expedia. | SUA MARCA | Sequência, máximo de 20 caracteres | Sim |
Authorization | Token de acesso recebido pela Expedia do seu servidor de autorização, a ser validado pela sua equipe. | JSON Web Token (JWT) padrão | Sequência, comprimento padrão de JWT | Não |
Authorization2 | JSON Web Token (JWT) enviado pela Expedia. Assinatura e declarações a serem validadas por você. | JWT padrão | Sequência, comprimento padrão de JWT | Não |
Solicitação
Campo | Descrição | Tipo de campo | Obrigatório? |
---|---|---|---|
requestId | Identificador exclusivo da solicitação de transação. | Sequência | Sim |
membershipId | Identificador exclusivo do cliente. | Sequência | Não |
loyaltyAccountNumber | Número da conta do programa de fidelidade do cliente (também chamado de programAccountNumber ). Deve ser preenchido apenas se um identificador diferente de membershipId for necessário para operações de fidelidade.- Sequência | Não | |
programId | Identificador do programa de fidelidade ao qual o cliente é afiliado ou o nome do nível associado ao programa de fidelidade. | Sequência | Não |
cardNumber | Número do cartão de crédito do cliente (criptografado). | Sequência | Não |
email | Endereço de e-mail do cliente. | Sequência | Não |
Resposta
Campo | Descrição | Tipo de campo | Obrigatório? |
---|---|---|---|
status | Status da transação (valores: Approved, Declined). | Sequência | Sim |
requestId | Identificador exclusivo da solicitação de transação (do conteúdo da solicitação). | Sequência | Sim |
ProgramAccount | Dados da conta do programa. Consulte a tabela ProgramAccount para campos aninhados. | ||
languageId | Os idiomas em que o site vai poder ser visualizado. | Sequência | Não |
channelType | Plataformas para as quais o site é otimizado (valores: WEB, MOBILE, TABLET). | Não |
ProgramAccount
Campo | Descrição | Exemplo do valor | Obrigatório? |
---|---|---|---|
programId | Identificador do programa de fidelidade ao qual o cliente é afiliado ou o nome do nível associado ao programa de fidelidade. | Aventura Gold | Sim |
accountName | Nome do programa (se diferente de programId ). | Aventura | Não |
loyaltyAccountNumber | Número da conta do programa de fidelidade do cliente (também chamado de programAccountNumber ). Deve ser preenchido apenas se um identificador diferente de membershipId for necessário para operações de fidelidade.- 1234567 | Não | |
lastFourDigitsOfCreditCard | Últimos quatro dígitos do cartão de crédito que o cliente usou na reserva. | 0000 | Não |
loyaltyConversionRatio | Proporção usada para converter o pagamento em pontos ganhos, por exemplo, R$ 1 = 1 ponto. | Não | |
loyaltyAccountBalance | Saldo atual dos pontos de fidelidade ganhos pelo cliente. | 2003 | Sim |
Informações do usuário
Campo | Descrição | Exemplo do valor | Obrigatório? |
---|---|---|---|
userId | Identificador exclusivo de cliente. O mesmo que membershipId . | Sim | |
name | Primeiro nome, nome do meio e sobrenome do cliente. | ||
firstName | Primeiro nome do cliente, aninhado em name . | Bob | Sim |
middleName | Nome do meio do cliente, aninhado em name . | Robert | Não |
lastName | Sobrenome do cliente, aninhado em name . | Jones | Sim |
contactInfo | Informações de contato do cliente, incluindo endereço, e-mail e número de telefone. | Não | |
address | Endereço do cliente, incluindo endereço, cidade, estado ou província e código postal, aninhado em contactInfo . | ||
streetAddress | Endereço do cliente, aninhado em address . | 123 Main St. | Não |
city | Cidade do endereço do cliente, aninhada em address . | Boston | Não |
state | Estado do endereço do cliente, aninhado em address . | MA | Não |
country | País do endereço do cliente, aninhado em address . | USA | Não |
postalCode | Código postal do endereço do cliente, aninhado em address . | 02112 | Não |
taxProvince | Estado ou província em que o cliente vai pagar impostos, aninhado em address . | MA | Não |
email | Endereço de e-mail do cliente, aninhado em contactInfo . | brjones@local.com | Não |
contactNumber | Número de telefone do cliente, aninhado em contactInfo . | 555-555-5555 | Não |
userType | Se o cliente é um único usuário (primário) ou está associado a uma organização. | Não | |
dateOfBirth | Data de nascimento do cliente. | Não | |
cardDetails | Dados do cartão de crédito usado na transação. Se preenchido, alguns itens aninhados devem ser criptografados. | Não | |
cardNumber * | Número do cartão de crédito usado na transação (criptografado), aninhado em cardDetails . | Sim | |
cardType | Tipo de cartão usado (criptografado), aninhado em cardDetails . | Sim | |
expirationDate * | Data de vencimento do cartão no formato MM/AAAA (criptografado), aninhada em cardDetails . | Sim | |
billingAddress | Endereço de cobrança do cartão usado na transação, aninhado em cardDetails . | ||
firstAddressLine * | Primeira linha do endereço de cobrança (criptografado), aninhada em billingAddress . | Sim | |
secondAddressLine | Segunda linha do endereço de cobrança, aninhada em billingAddress . | Não | |
thirdAddressLine | Terceira linha do endereço de cobrança, aninhada em billingAddress . | Não | |
city | Elemento de cidade no endereço de cobrança, aninhado em billingAddress . | Não | |
province | Elemento de estado ou província no endereço de cobrança, aninhado em billingAddress . | Não | |
countryCode | Elemento de país no endereço de cobrança, aninhado em billingAddress . | Não | |
postalCode * | Elemento de código postal no endereço de cobrança (criptografado), aninhado em billingAddress . | Sim |
Observação: se algum dos campos cardDetails
estiver preenchido, aqueles marcados com * serão obrigatórios. Todos os dados nesses campos são criptografados.
Detalhes da API
Sem dados do cartão de crédito
Com dados do cartão de crédito