Developer Hub
This is an auto-generated translation

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

CampoDescriçãoExemplo do valorTipo de campoObrigatório?
partnerIdIdentificador exclusivo da empresa, disponibilizado pela Expedia.SUA MARCASequência, máximo de 20 caracteresSim
AuthorizationToken de acesso recebido pela Expedia do seu servidor de autorização, a ser validado pela sua equipe.JSON Web Token (JWT) padrãoSequência, comprimento padrão de JWT
Authorization2JSON Web Token (JWT) enviado pela Expedia. Assinatura e declarações a serem validadas por você.JWT padrãoSequê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.

CampoDescriçãoTipo de campoObrigatório?
requestIdIdentificador exclusivo da solicitação de transação.SequênciaSim
membershipIdIdentificador único do viajanteSequênciaSim, opção 1.
loyaltyAccountNumberO 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ênciaSim, opção 2.
programIdIdentificador do programa de fidelidade ao qual o viajante está afiliado ou o nome do nível associado ao programa de fidelidade.Sequência
cardNumberNúmero do cartão de crédito do viajante (criptografado)SequênciaSim, opção 3.
emailEndereço de e-mail do viajanteSequênciaSim, opção 4.

Resposta

CampoDescriçãoTipo de campoObrigatório?
statusStatus da transação (valores: Approved, Declined).SequênciaSim
requestIdIdentificador exclusivo da solicitação de transação (do conteúdo da solicitação).SequênciaSim
programAccountDetalhes da conta do programa de fidelidade; consulte a tabela programAccountpara campos aninhados 
languageIdOs idiomas em que o site estará disponível; consulte a página de detalhes de localização para obter mais detalhes.Sequência
optInForMarketingEmailSe o usuário optou por receber e-mails de marketing.Booleano
channelTypePlataformas para as quais o site é otimizado (valores: WEB, MOBILE, TABLET).Sequência
usersLista de detalhes do usuário; consulte a tabela userspara campos aninhados 
cardDetailsDetalhes 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

CampoDescriçãoExemplo do valorObrigatório?
programIdIdentificador do programa de fidelidade ao qual o viajante está afiliado ou o nome do nível associado ao programa de fidelidade.Aventura GoldSim
accountNameNome do programa (se diferente de programId).Aventura
loyaltyAccountNumberO 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
lastFourDigitsOfCreditCardOs últimos 4 dígitos do cartão de crédito usado pelo viajante para a reserva.0000
loyaltyConversionRatioProporção usada para converter o pagamento em pontos ganhos, por exemplo, R$ 1 = 1 ponto. 
loyaltyAccountBalanceSaldo atual de pontos de fidelidade acumulados pelo viajante.2003Sim

cardDetails

CampoDescriçãoTipo de campoObrigatório?
cardNumberNúmero do cartão de crédito do viajante (criptografado)SequênciaSim
cardTypeTipo de cartão utilizado (criptografado)SequênciaSim
expirationDateData de validade do cartão no formato MM/AAAA (criptografada)SequênciaSim
billingAddressEndereço de cobrança do cartão usado na transação; consulte a tabela billingAddresspara campos aninhados. 

billingAddress

CampoDescriçãoTipo de campoObrigatório?
firstAddressLinePrimeira linha do endereço de cobrança (criptografada)SequênciaSim
secondAddressLineSegunda linha do endereço de cobrançaSequência
thirdAddressLineTerceira linha do endereço de cobrançaSequência
cityCidade (elemento do endereço de cobrança)Sequência
provinceElemento de província ou estado do endereço de cobrançaSequência
countryCodeElemento país do endereço de cobrançaSequência
postalCodeElemento de código postal do endereço de cobrança (criptografado)SequênciaSim

Usuários

CampoDescriçãoExemplo do valorObrigatório?
userIdIdentificador único para o viajante; o mesmo que membershipId Sim
nameNome, sobrenome e primeiro nome do meio do viajante
firstNameNome do viajante; aninhado em nameBobSim
middleNameNome do meio do viajante; aninhado em nameRobert
lastNameSobrenome do viajante; aninhado em nameJonesSim
contactInfoInformações de contato do viajante, incluindo endereço, e-mail e número de telefone.
addressEndereço do viajante, incluindo rua, cidade, estado ou província e código postal; aninhado em contactInfo
streetAddressEndereço do viajante; aninhado em address123 Main St.
cityCidade do endereço do viajante; aninhada em addressBoston
stateEstado do endereço do viajante; aninhado em addressMA
countryPaís do endereço do viajante; aninhado em addressUSA
postalCodeCódigo postal do endereço do viajante; aninhado em address02112
taxProvinceO estado ou província em que o viajante pagará impostos; aninhado em addressMA
emailEndereço de e-mail do viajante; aninhado em contactInfobrjones@local.com
contactNumberNúmero de telefone do viajante; aninhado em contactInfo555-555-5555
userTypeSe o viajante é um usuário individual (principal) ou está associado a uma organização. 
dateOfBirthData 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.

  1. Gere uma chave simétrica aleatória (RSK) com 256 bits de comprimento.
  2. 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)

Exemplos de códigos

Exemplo de Java para criptografia

A criptografia JWE pode ser implementada de modo eficiente e rápido com a ajuda de bibliotecas JWE de terceiros. Por exemplo, este código Java para criptografia foi criado com a ajuda da biblioteca Nimbus JOSE+JWT.

public String encryptWithJWE(String plainText){
    X509Certificate publicCertificate = <fetch public cert>
    //get RSA public key
    final X509EncodedKeySpec publicKeySpec = new 
    X509EncodedKeySpec(publicCertificate.getPublicKey().getEncoded());
    final KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    RSAPublicKey rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(publicKeySpec);
    //get keyID
    String keyID = certificateManager.getKid(publicCertificate);
    // Create JWE Header containing the needed metadata for encryption and decryption
    JWEHeader jweHeader = new JWEHeader.Builder(JWEAlgorithm.RSA_OAEP_256, EncryptionMethod.A256GCM)
        .type(JOSEObjectType.JWT)
        .customParam(IAT, System.currentTimeMillis())
        .keyID(keyID)
        .build();
/*

Exemplo de cabeçalho JWE

{
"alg":"RSA-OAEP-256",
"typ":"JWT",
"enc":"A256GCM",
"iat":<Time (in UTC) when JWE was issued, expressed in UNIX epoch time (seconds since 1 January, 1970)>,
"kid":<Key ID or subject key Identifier from the public key certificate>
}
*/
    JWEObject jweObject = new JWEObject(jweHeader, new Payload(plainText));
    RSAEncrypter encrypter = new RSAEncrypter(rsaPublicKey);
    jweObject.encrypt(encrypter);
    return jweObject.serialize();
    }

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:

  1. 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).
  2. 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.)
  3. Depois, use a sua chave privada e descriptografe a chave de criptografia JWE.
  4. 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.

Exemplo de código

Exemplo de Java para criptografia

A criptografia JWE pode ser implementada de modo eficiente e rápido com a ajuda de bibliotecas JWE de terceiros. Por exemplo, este código Java para criptografia foi criado com a ajuda da biblioteca Nimbus JOSE+JWT.

public String decryptJWE(String jweString) {
    PrivateKey privateKey = <fetch private key>;
    RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privateKey;
    JWEObject jweObject = JWEObject.parse(jweString);
    JWEHeader jweHeader = jweObject.getHeader();validateJweHeader(jweHeader);
    RSADecrypter rsaDecrypter = new RSADecrypter(rsaPrivateKey);
    jweObject.decrypt(rsaDecrypter);
    return jweObject.getPayload().toString();
}

Detalhes da API

Sem dados do cartão de crédito

Com dados do cartão de crédito

Esta página foi útil?
Como podemos melhorar esse conteúdo?
Agradecemos por nos ajudar a melhorar.