API de informações da conta
Verifique os viajantes que utilizam seu site usando os dados da conta deles.
A API de Informações da Conta inclui detalhes sobre cada viajante. Um agente da Expedia usará essa informação para verificar o identificador único do viajante para compras, resgate de pontos de fidelidade, cancelamentos e muito mais. Esse identificador exclusivo pode ser um número de cartão de crédito (um identificador do setor de cartões de pagamento (PCI)) ou um identificador non-PCI, como um endereço de e-mail ou um número de conta de fidelidade, dependendo de suas necessidades ou padrões de segurança.
Consulte Dados e respostas comuns para obter informações adicionais.
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 | — |
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 | — |
Solicitação
Você precisará definir membershipId, loyaltyAccountNumber, cardNumberou emailcomo parâmetro obrigatório. Seu gerente de contas trabalhará com você para definir qual opção é a mais adequada com base em suas necessidades.
Nota: Se você estiver usando cardNumbercomo seu identificador, você também precisará revisar as tabelas cardDetailse billingAddressabaixo. Nenhum outro parâmetro requer esses dados.
| Campo | Descrição | Tipo de campo | Obrigatório? |
|---|---|---|---|
requestId | Identificador exclusivo da solicitação de transação. | Sequência | Sim |
membershipId | Identificador único do viajante | Sequência | Sim, opção 1. |
loyaltyAccountNumber | O número da conta de fidelidade do viajante (também chamado de programAccountNumber); este campo só deve ser preenchido se um identificador diferente de membershipIdfor necessário para as operações de fidelidade. | Sequência | Sim, opção 2. |
programId | Identificador do programa de fidelidade ao qual o viajante está afiliado ou o nome do nível associado ao programa de fidelidade. | Sequência | — |
cardNumber | Número do cartão de crédito do viajante (criptografado) | Sequência | Sim, opção 3. |
email | Endereço de e-mail do viajante | Sequência | Sim, opção 4. |
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 | Detalhes da conta do programa de fidelidade; consulte a tabela programAccountpara campos aninhados | — | |
languageId | Os idiomas em que o site estará disponível; consulte a página de detalhes de localização para obter mais detalhes. | Sequência | — |
optInForMarketingEmail | Se o usuário optou por receber e-mails de marketing. | Booleano | — |
channelType | Plataformas para as quais o site é otimizado (valores: WEB, MOBILE, TABLET). | Sequência | — |
users | Lista de detalhes do usuário; consulte a tabela userspara campos aninhados | — | |
cardDetails | Detalhes sobre o cartão de crédito usado na transação; consulte a tabela cardDetailspara campos aninhados (se preenchidos, alguns itens aninhados devem ser criptografados) | — |
programAccount
| Campo | Descrição | Exemplo do valor | Obrigatório? |
|---|---|---|---|
programId | Identificador do programa de fidelidade ao qual o viajante está afiliado ou o nome do nível associado ao programa de fidelidade. | Aventura Gold | Sim |
accountName | Nome do programa (se diferente de programId). | Aventura | — |
loyaltyAccountNumber | O número da conta de fidelidade do viajante (também chamado de programAccountNumber); este campo só deve ser preenchido se um identificador diferente de membershipIdfor necessário para as operações de fidelidade. | 1234567 | — |
lastFourDigitsOfCreditCard | Os últimos 4 dígitos do cartão de crédito usado pelo viajante para a reserva. | 0000 | — |
loyaltyConversionRatio | Proporção usada para converter o pagamento em pontos ganhos, por exemplo, R$ 1 = 1 ponto. | — | |
loyaltyAccountBalance | Saldo atual de pontos de fidelidade acumulados pelo viajante. | 2003 | Sim |
cardDetails
| Campo | Descrição | Tipo de campo | Obrigatório? |
|---|---|---|---|
cardNumber | Número do cartão de crédito do viajante (criptografado) | Sequência | Sim |
cardType | Tipo de cartão utilizado (criptografado) | Sequência | Sim |
expirationDate | Data de validade do cartão no formato MM/AAAA (criptografada) | Sequência | Sim |
billingAddress | Endereço de cobrança do cartão usado na transação; consulte a tabela billingAddresspara campos aninhados. | — |
billingAddress
| Campo | Descrição | Tipo de campo | Obrigatório? |
|---|---|---|---|
firstAddressLine | Primeira linha do endereço de cobrança (criptografada) | Sequência | Sim |
secondAddressLine | Segunda linha do endereço de cobrança | Sequência | — |
thirdAddressLine | Terceira linha do endereço de cobrança | Sequência | — |
city | Cidade (elemento do endereço de cobrança) | Sequência | — |
province | Elemento de província ou estado do endereço de cobrança | Sequência | — |
countryCode | Elemento país do endereço de cobrança | Sequência | — |
postalCode | Elemento de código postal do endereço de cobrança (criptografado) | Sequência | Sim |
Usuários
| Campo | Descrição | Exemplo do valor | Obrigatório? |
|---|---|---|---|
userId | Identificador único para o viajante; o mesmo que membershipId | Sim | |
name | Nome, sobrenome e primeiro nome do meio do viajante | — | — |
firstName | Nome do viajante; aninhado em name | Bob | Sim |
middleName | Nome do meio do viajante; aninhado em name | Robert | — |
lastName | Sobrenome do viajante; aninhado em name | Jones | Sim |
contactInfo | Informações de contato do viajante, incluindo endereço, e-mail e número de telefone. | — | — |
address | Endereço do viajante, incluindo rua, cidade, estado ou província e código postal; aninhado em contactInfo | — | — |
streetAddress | Endereço do viajante; aninhado em address | 123 Main St. | — |
city | Cidade do endereço do viajante; aninhada em address | Boston | — |
state | Estado do endereço do viajante; aninhado em address | MA | — |
country | País do endereço do viajante; aninhado em address | USA | — |
postalCode | Código postal do endereço do viajante; aninhado em address | 02112 | — |
taxProvince | O estado ou província em que o viajante pagará impostos; aninhado em address | MA | — |
email | Endereço de e-mail do viajante; aninhado em contactInfo | brjones@local.com | — |
contactNumber | Número de telefone do viajante; aninhado em contactInfo | 555-555-5555 | — |
userType | Se o viajante é um usuário individual (principal) ou está associado a uma organização. | — | |
dateOfBirth | Data de nascimento do viajante | — |
Criptografia e descriptografia de cartão de crédito
Se você usar cardNumbercomo identificador do viajante para validação, algumas informações precisarão ser criptografadas. A Expedia exige o manuseio seguro de informações PCI usando uma técnica JWE (criptografia web JSON) industry-standard para criptografar e descriptografar dados de cartão de crédito: criptografia assimétrica usando um par de chaves pública e privada.
Casos de uso de criptografia
Os locais onde a criptografia é necessária incluem:
- Solicitar:
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 irá criptografar cardNumberna solicitação. O caminho de descriptografia é o inverso do caminho de criptografia:
- Ao receber o JWE criptografado, você deve 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ê validará o
iat(issued-at: a hora em que o JWT foi emitido) para garantir que não seja diferente de 5 minutos da hora atual. (O token expirará 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.