Conformidade com a PSD2 europeia

Entenda o impacto dos novos regulamentos de pagamento com cartão do EEE nos seus negócios.

Visão geral

A Diretiva de serviços de pagamento 2 (PSD2) é um regulamento do Espaço Econômico Europeu (EEE) que exige alterações no processo de pagamento e reserva para todas as transações envolvendo um cartão de crédito emitido por um estado do EEE.

A PSD2 aumenta a segurança e reduz a fraude, mas também muda de maneira fundamental como os pagamentos funcionam em toda a Europa. Como parte desses regulamentos, é necessária uma solução de autenticação forte do cliente ao lidar com pagamentos eletrônicos de consumidores dentro do escopo dos regulamentos. Todas as emissoras de cartão, bancos e merchants têm a obrigação de oferecer suporte a uma solução de autenticação forte do cliente. A não conformidade vai resultar em falhas no pagamento, pois os regulamentos estão em vigor nos bancos do EEE.

Esta página explica como os tipos de pagamento aceitos pela Rapid API são afetados e quais ações parceiros podem tomar para manter a conformidade ao atender os seus viajantes. Para mais informações sobre a diretiva, consulte a legislação no site oficial da Comissão Europeia.

Requisitos de conformidade

As etapas para habilitar transações compatíveis no EEE variam dependendo de quem é o Merchant of Record e de como os pagamentos são feitos na Rapid API.

O parceiro é o Merchant of Record

Expedia Affiliate Collect

As reservas que usam o EAC não são afetadas pelos regulamentos da PSD2. Nenhum processo de pagamento ou alterações na integração da API com a Rapid são necessários para manter a conformidade. No entanto, os regulamentos poderão afetar você se for o Merchant of Record e realizar cobranças em cartão de crédito, cartão de débito ou outra forma de pagamento de viajantes dentro do escopo dos regulamentos da UE. É provável que os regulamentos exijam que você ofereça suporte para uma versão da autenticação de dois fatores, ou 2FA, compatível com a PSD2 no processo de pagamento. Entre em contato com o seu processador de pagamento para saber mais sobre os recursos disponíveis para ajudar os merchants a estar em conformidade com a PSD2 e evitar transações com falha.

Cartões de parceiros

Se a sua empresa é o Merchant of Record e paga a Rapid com um cartão de crédito ou débito da sua empresa emitido pelo EEE, esses regulamentos podem afetar você. A lista de cartões compatíveis com a PSD2 é:

  • Cartões virtuais de uso único emitidos no EEE.
  • Cartões corporativos emitidos para a sua empresa, não para um indivíduo, no EEE.
  • Qualquer cartão emitido fora do EEE.

Os regulamentos poderão afetar você se realizar cobranças em cartão de crédito, cartão de débito ou outra forma de pagamento de viajantes dentro do escopo dos regulamentos do EEE. É provável que os regulamentos exijam que você ofereça suporte para uma versão da autenticação de dois fatores, ou 2FA, compatível com a PSD2 no processo de pagamento. Entre em contato com o seu processador de pagamento para saber mais sobre os recursos disponíveis para ajudar os merchants a estar em conformidade com a PSD2 e evitar transações com falha.

Se preferir não usar os cartões de parceiro compatíveis com a PSD2 acima, a sua organização pode solicitar uma isenção direto ao banco que emitiu o seu cartão de parceiro. Se uma isenção for concedida, as transações nesse cartão não vão exigir autenticação, exceto para uma possível verificação on-line única usando 2FA. Essa verificação única pode variar de acordo com o banco. Receber uma isenção pode ser um processo demorado e também significa que o seu banco pode responsabilizar você por quaisquer pagamentos fraudulentos.

A Rapid é o Merchant of Record

Se a sua empresa usa a Rapid como Merchant of Record ao enviar cartões de viajantes para a Rapid, os regulamentos podem afetar você. Quando os viajantes reservam on-line, sem um agente de varejo, os regulamentos exigem que a Rapid permita aos viajantes confirmar se iniciaram o pagamento. O processo em conformidade com a PSD2 para esse requisito é a autenticação de dois fatores, ou 2FA, durante o processo de pagamento. Os parceiros que desejam usar a Rapid como Merchant of Record com qualquer cartão de crédito ou débito emitido no EEE precisam adotar a nossa solução Rapid para 2FA.

No entanto, as transações reservadas por meio de um agente de varejo ou agente da central de atendimento estão isentas do requisito 2FA. A conformidade para essas transações exige apenas uma indicação explícita de que essa reserva foi feita com a assistência de um agente. Use o campo sales_channel da API de disponibilidade para essa indicação.

A propriedade é o Merchant of Record

Se a sua empresa usa o Property Collect, os regulamentos podem afetar você. Há circunstâncias em que uma propriedade pode tentar cobrar o cartão de um viajante que não está presente, por exemplo, taxas de no show ou depósitos. Para que essas cobranças estejam em conformidade com os regulamentos, a autenticação de dois fatores, ou 2FA, deve ser realizada antes da cobrança. Parceiros que desejam usar o Property Collect para viajantes usando um cartão de crédito ou débito emitido no EEE precisam adotar a nossa solução Rapid para 2FA.

Visão geral da solução Rapid API

Como funciona?

Parceiros que usam a Rapid Merchant of Record ou o Property Collect com cartões de viajantes podem adotar a solução da Rapid API para gerar reservas em conformidade com os regulamentos. As APIs oferecem conformidade com a PSD2 ao oferecer suporte à autenticação de dois fatores com 3DS 2.0 no fluxo de reserva. Com o 3DS 2.0, oferecemos suporte à autenticação baseada em risco, o que reduz o atrito com os viajantes ao deixar a critério do banco quando solicitar a 2FA aos viajantes.

A solução para 2FA é composta por três componentes distintos:

  • Um iframe que os parceiros adicionam à página de pagamento. Ele é usado para hospedar a experiência de 2FA de um banco emissor para o viajante. Na documentação de integração, é chamado de iframe 3DS.
  • Uma nova biblioteca JavaScript no lado do cliente na página de pagamento. Ela é usada para coletar dados do navegador, comunicar-se com o iframe e exibir a experiência de 2FA no iframe. Na documentação de integração, é chamada de biblioteca do conector 3DS.
  • A Rapid aceita as informações do pagador para o banco e conclui a reserva após a 2FA.

Ao usar JavaScript e Rapid juntos, o fluxo de reservas com 2FA agora vai incluir algumas etapas extras antes e depois que a API de reservas for chamada. O diagrama abaixo descreve esse fluxo de reservas atualizado.

Preparar a reserva consiste em registrar pagamentos na Rapid API e coletar dados na API do JavaScript. A próxima etapa é reservar na Rapid API. Por fim, a etapa de completar a reserva começa com Mostrar 2FA na API do JavaScript e, em seguida, completar reserva na Rapid API.

Durante cada etapa do fluxo de reservas revisado, o resultado de uma etapa contém dados que vão ser inseridos na próxima etapa. Os dados precisam ser passados entre o JavaScript no navegador e a Rapid.

Observação: o diagrama acima é uma simplificação do fluxo real da API para fazer uma introdução. Consulte a documentação de integração para saber mais sobre o fluxo completo da API.

Detalhes do componente de integração

iframe do navegador

O iframe, posicionado na experiência da página de pagamento, hospeda um URL de propriedade do banco emissor do cartão do viajante. Esse URL vai exibir a experiência de 2FA para o usuário e transferir qualquer informação fornecida pelo viajante direto para o banco. A princípio, o iframe deve estar oculto, com a capacidade de se sobrepor ao topo da página em forma de pop-up quando a 2FA for solicitada após uma tentativa de reserva.

Biblioteca JavaScript do navegador

Essa biblioteca é adicionada à página de pagamento e é chamada no momento da reserva para dar suporte ao processo de 2FA. As APIs da biblioteca são compatíveis com os recursos descritos abaixo.

Coleta automática de informações do dispositivo do viajante

Antes de uma tentativa de reserva, as informações sobre o dispositivo do viajante devem ser coletadas para preparar uma reserva para a 2FA. Depois, são enviadas ao banco emissor do viajante para análise, para que o banco possa avaliar o risco, decidir se a 2FA é necessária para a transação e garantir que ela seja exibida da maneira correta. De acordo com as especificações do 3DS 2.x, os seguintes dados serão coletados do navegador do viajante: idioma, profundidade de cor, altura da tela, largura da tela, fuso horário, agente de usuário e se o Java está ativado.

Mostrar a experiência de 2FA no iframe do navegador

Após uma tentativa de reserva, a biblioteca é usada para exibir o pop-up do iframe e carregar o conteúdo do banco no iframe. Durante o processo de 2FA, o conteúdo do banco pode coletar outras informações sobre o dispositivo do viajante para dar suporte à sua avaliação de risco. Esse processo é necessário para completar uma reserva.

Rapid

A Rapid inclui novas APIs que funcionam em conjunto com a biblioteca JavaScript no lado do cliente. As APIs agora são compatíveis com os recursos descritos abaixo.

Cadastro do viajante e informações de pagamento

Antes de uma tentativa de reserva, novas informações sobre o viajante devem ser coletadas para preparar uma reserva para a 2FA. Esses dados incluem detalhes da conta do viajante no ponto de venda e o pagamento do viajante. Depois, os dados são enviados ao banco emissor do viajante para análise, para que o banco possa avaliar o risco e decidir se a 2FA é necessária para a transação. Para saber mais, analise a API de registro de pagamento na Rapid.

Conclusão de um pagamento e confirmação de reserva

Após uma tentativa de reserva com a Rapid e o processo de 2FA ser concluído no navegador, a Rapid deve ser invocada mais uma vez. Vamos confirmar que a 2FA foi de fato bem-sucedida, para que a reserva possa ser confirmada. Para saber mais, consulte a parte sobre conclusão da sessão de pagamento na Rapid.

Fluxo de reserva

Visão geral

Se a 2FA estiver ativada no suporte ao perfil do parceiro Rapid, a API de verificação de preço vai retornar um link para a API de registro de pagamentos em vez da API de criação de reserva. O diagrama abaixo mostra a sequência de chamadas da API que deve ser realizada depois que uma reserva é iniciada por um viajante. A sequência compreende as chamadas para a biblioteca JavaScript e a Rapid.

Primeiro inicialize a biblioteca JavaScript e, em seguida, crie a sessão de pagamento usando a Rapid API. O fluxo retorna ao JavaScript para inicializar a sessão de pagamento e, em seguida, reservar usando a Rapid API. Se a 2FA não for necessária, a reserva será concluída. Se a 2FA for necessária, então mostre a 2FA com iframe usando o JavaScript, por fim, conclua a sessão de pagamento usando a Rapid API.

Quando uma reserva é preparada para a 2FA, a autenticação nem sempre é necessária. A necessidade da 2FA é determinada pelo banco emissor do cartão de crédito utilizado para o pagamento. Essa determinação ocorre durante a transação e é indicada na resposta da API de criação de reserva.

O diagrama abaixo exibe a sequência de chamadas da API que deve ser realizada ao usar a Espera e retomada.

Comece inicializando a biblioteca JavaScript e crie a sessão de pagamento usando a Rapid API. Depois, inicialize a sessão de pagamento com a API do JavaScript e reserve com a Rapid API. Se a 2FA não for necessária, continue usando a Rapid API para retomar a reserva. Se a 2FA for necessária, mostre a 2FA com iframe via API do JavaScript, conclua a sessão de pagamento com a Rapid API e, por fim, use a Rapid API para retomar a reserva.

Observação: os diagramas acima são uma simplificação do fluxo real da API para fins introdutórios. Consulte a documentação de integração para saber mais sobre o fluxo completo da API.

Mais informações

Para mais informações sobre os requisitos técnicos para a experiência de 2FA, consulte o protocolo 3D Secure da EMVCo e a especificação das funções principais.

Guia de integração de autenticação de dois fatores e da Rapid

Visão geral

O suporte à autenticação de dois fatores, ou 2FA, exige a integração com uma nova biblioteca JavaScript, chamada de biblioteca do conector 3DS, e com a Rapid. As duas são usadas em conjunto para apresentar a 2FA na página de pagamento e confirmar uma reserva. Essa solução é compatível com os modelos de negócio Expedia Collect e Property Collect.

A sequência de chamadas da API que deve ser realizada para dar suporte a uma reserva com a 2FA é descrita abaixo e detalhada nas seções a seguir.

  1. Método de configuração do JavaScript
  2. API de registro de pagamento da Rapid
  3. Método de inicializar sessão do JavaScript
  4. API de reserva da Rapid
  5. Método de desafio do JavaScript
  6. API de conclusão de pagamento da Rapid

Para permitir essa sequência, a 2FA deve ser habilitada para perfis de parceiros individuais pelo suporte a parceiros da Rapid.

Rapid

Se a autenticação de dois fatores estiver habilitada para um perfil de parceiro, as respostas da API serão diferentes para permitir um fluxo de reserva revisado com a 2FA.

API de disponibilidade

O valor do campo sales_channel na solicitação de API deve ser preciso para receber uma isenção da 2FA quando permitido pelos regulamentos. Esse valor, junto com muitos outros fatores, é analisado pelo banco emissor do cartão para tomar uma decisão no momento da reserva. Apenas ferramentas de agente estão isentas da 2FA. Para especificar isso, defina o valor de sales_channel como agent_tool.

API de verificação de preço

A resposta da API vai incluir um link para a API de registro de pagamentos em vez da API de criação de reserva.

Exemplo de resposta quando a 2FA está ativada:

{
    "status": "matched",
    "occupancies": {
        //...(example omitted for length)
    },
    "links": {
        "payment_session": {
            "method": "POST",
            "href": "/v3/payment-sessions?token=QldfCGlcUAVgBDRwdWXBBL"
        }
    }
}

API de registro de pagamentos

Essa é a segunda etapa no fluxo de reserva JavaScript-Rapid PSD2 e ocorre após o método setup do JavaScript.

A solicitação vai incluir as informações de pagamento que fazem parte do fluxo de reserva que não é PSD2 e novos campos que dão suporte a uma 2FA bem-sucedida. Dois desses campos, encoded_browser_metadata e version, são retornados pela API do JavaScript setup method.

A resposta vai incluir a payment_session_id e a encoded_init_config. Elas são inseridas no método initSession da biblioteca JavaScript. O link da reserva incluído na resposta deve ser usado após o método initSession.

Exemplo de solicitação:

{
    "version": "1",
    "browser_accept_header": "*/*",
    "encoded_browser_metadata": "ZW5jb2RlZF9icm93c2VyX21ldGFkYXRh",
    "preferred_challenge_window_size": "medium",
    "merchant_url": "https://server.adomainname.net",
    "customer_account_details": {
        "authentication_method": "guest",
        "authentication_timestamp": "2018-02-12T11:59:00.000Z",
        "create_date": "2018-09-15",
        "change_date": "2018-09-17",
        "password_change_date": "2018-09-17",
        "add_card_attempts": 1,
        "account_purchases": 1
    },
    "payments": [
        {
            "type": "customer_card",
            "card_type": "VI",
            "number": "4111111111111111",
            "security_code": "123",
            "expiration_month": "08",
            "expiration_year": "2025",
            "billing_contact": {
                "given_name": "John",
                "family_name": "Smith",
                "email": "smith@example.com",
                "phone": "4875550077",
                "address": {
                    "line_1": "555 1st St",
                    "line_2": "10th Floor",
                    "line_3": "Unit 12",
                    "city": "Seattle",
                    "state_province_code": "WA",
                    "postal_code": "98121",
                    "country_code": "US"
                }
            },
            "enrollment_date": "2018-09-15"
        }
    ]
}

Resposta de exemplo:

{
    "payment_session_id": "76d6aaea-c1d5-11e8-a355-529269fb1459",
    "encoded_init_config": "QSBiYXNlNjQgZW5jb2RlZCBvYmplY3Qgd2hpY2ggY29udGFpbnMgY29uZmlndXJhdGlvbiBuZWVkZWQgdG8gcGVyZm9ybSBkZXZpY2UgZmluZ2VycHJpbnRpbmcgYW5kL29yIDNEUyBNZXRob2Qu",
    "links": {
        "book": {
            "method": "POST",
            "href": "/v3/itineraries?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
        }
    }
}

API de criação de reserva

Essa é a quarta etapa no fluxo de reserva JavaScript-Rapid PSD2 e ocorre após o método initSession do JavaScript. A solicitação não vai incluir novos campos para a PSD2, todas as informações necessárias estão contidas no token do link Reservar retornado pela API de registro de pagamento. A resposta, se bem-sucedida, sempre vai conter um itinerary_id. No entanto, isso por si só não indica que uma reserva foi confirmada porque a 2FA pode ser necessária.

Se a 2FA for necessária, a resposta também vai incluir um encoded_challenge_config. Os valores de encoded_challenge_config e payment_session_id retornados do registro de pagamento precisam ser transmitidos como parâmetros para o método challenge do JavaScript.

A resposta também vai incluir um novo link para complete_payment_session. Esse link deve ser usado após o método challenge da biblioteca JavaScript.

Se a 2FA não for necessária, a reserva vai ser confirmada e a resposta vai incluir links para retrieve, cancel e, de maneira opcional, resume.

Exemplo de resposta de criação de reserva se a 2FA for necessária:

{
    "itinerary_id": "8999989898988",
    "links": {
        "complete_payment_session": {
            "method": "PUT",
            "href": "/v3/itineraries/8999989898988/payment-sessions?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
        }
    },
    "encoded_challenge_config": "ABElifsiejfacies2@033asfe="
}

API de conclusão de sessão de pagamento

Essa é a sexta etapa no fluxo de reserva JavaScript-Rapid PSD2 e ocorre após o método challenge do JavaScript. Essa API é necessária para concluir o pagamento e informar à Rapid que uma tentativa de 2FA foi concluída, com sucesso ou não.

A solicitação não vai incluir novos campos para a PSD2.

A resposta, se bem-sucedida, vai conter um valor de itinerary_id e links para retrieve, cancel e, de maneira opcional, resume. Uma resposta bem-sucedida de que uma reserva foi confirmada.

Resposta de exemplo:

{
    "itinerary_id": "8999989898988",
    "links": {
        "retrieve": {
            "method": "GET",
            "href": "/v3/itineraries/8999989898988?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
        }
    }
}

Biblioteca JavaScript de conectores 3DS e iframe 3DS

Ao usar o fluxo de trabalho de reserva PSD2, a página de pagamento deve incluir um novo iframe e biblioteca JavaScript. O iframe, conhecido como iframe 3DS, vai exibir a experiência de autenticação usando o 3D-Secure 2.x para o viajante. A biblioteca JavaScript, conhecida como biblioteca de conectores 3DS, vai dar suporte à transferência de informações para bancos emissores e carregar o conteúdo dos bancos no iframe.

Como adicionar o iframe 3DS e a biblioteca JavaScript

Como adicionar o iframe 3DS

O iframe 3DS deve ser encapsulado em um contêiner a princípio oculto, mas que pode ser exibido quando uma autenticação for necessária para processar um pagamento.

O design do contêiner pode ser personalizado para se adequar à página de hospedagem. Abaixo vemos um exemplo de implementação destinado apenas para fins de orientação usando um modal de bootstrap.

<div id="threeDsIframeModal" class="modal" role="dialog">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-body iframe-container">
                <div class="embed-responsive embed-responsive-16by9">
                    <iframe id="threeDsIframe" src="<<3DS iframe URL>>"> </iframe>
                </div>
            </div>
        </div>
    </div>
</div>

A origem do iframe deve ser definida para um dos dois valores:

Tipo de URLURLObservações
Produçãohttps://static.pay.expedia.com/3ds/threeDsIframe.htmlOferece suporte à 2FA de produção
Sandbox de testehttps://static.pay.expedia.com/3ds/sandboxThreeDsIframe.htmlOferece suporte ao teste de 2FA

O URL de teste oferece suporte a testes e esse tópico é analisado depois neste documento. Para restringir o conteúdo do iframe durante o teste, o iframe pode ser atribuído com o sandbox, mas deve permitir o seguinte:

sandbox = 'allow-scripts allow-forms allow-same-origin';

Como adicionar a biblioteca JavaScript de conectores 3DS

A biblioteca de conectores 3DS se comunica com o iframe 3DS e envia dados ao banco emissor, que fornece o conteúdo do iframe. Abaixo vemos um exemplo de como adicionar a biblioteca à página de pagamento.

<head>
    <script src="<<3DS connector script URL>>" integrity="<<actual integrity value>>"></script>
</head>

Os valores de origem e integridade do elemento script devem ser definidos para os valores abaixo:

Versão da bibliotecaAtributoValor
1.3.39srchttps://static.pay.expedia.com/3ds/1.3.39/pay-3ds-js-libs-connector.min.js
integridadesha384-par0I4Q5cfljwzqw2mAggM4dKdYzGyj4uZiL4cMviGjI3qVzEgWGuZ2075mYutbT
1.3.65srchttps://static.pay.expedia.com/3ds/1.3.65/pay-3ds-js-libs-connector.min.js
integridadesha384-gYopPw6xE5DZwnZXGavkwnvs3NkDOobnHqjroUnSHpGXvs/J9xjHX/8aGzKtSgWI

Observação: o URL de origem e a integridade vão ser alterados à medida que versões futuras estiverem disponíveis para adoção. Versões mais recentes não devem interromper a integração existente. Versões mais antigas do script ainda vão estar acessíveis.

Como usar o iframe 3DS e a biblioteca JavaScript

A biblioteca requer o uso de JavaScript Promises. Abaixo é mostrado um exemplo de implementação destinado apenas para orientação e uma demonstração de como os dados são transferidos entre os métodos JavaScript e a Rapid.

// Initialize the library
let connector = new PayThreeDSConnector.ThreeDSConnector("threedsiframe", "https://static.pay.expedia.com");
RapidIntegration.priceCheck(priceCheckLink)
  .then(priceCheckResponse => {
    paymentSessionLink = priceCheckResponse.links.payment_session.href;
    // Setup an authentication session with the library
    return connector.setup({ referenceId: '1000' })
  }).then(setupResponse => {
    console.log("Setup Response: ", setupResponse);

    // Send information from setup to Rapid's Register Payments API
    return RapidIntegration.registerPayment(paymentSessionLink,
           setupResponse);
  }).then(paymentSessionResponse => {
    console.log("Register Payments Response: ", paymentSessionResponse);
    paymentSessionId = paymentSessionResponse.paymentSessionId;
    bookLink = paymentSessionResponse.links.book.href;
    if (paymentSessionResponse.encoded_init_config) {
      // If the payment session response contains an encoded_init_config
      // field, initialize an authentication session with the library
      // using information returned from Rapid's Register Payments API
      connector.initSession({
        paymentSessionId: paymentSessionId,
        encodedInitConfig: paymentSessionResponse.encodedInitConfig
      }).then(initSessionResponse => {
        console.log("Init Session Response: ", initSessionResponse);
        // Then create a booking with Rapid's Book API
        return RapidIntegration.createBooking(bookLink,
               paymentSessionId);
      })
    } else {
      // Otherwise, create a booking with Rapid's Book API directly
      return RapidIntegration.createBooking(bookLink, paymentSessionId);
    }
  }).then(createBookingResponse => {
    console.log("Create Booking Response: ", createBookingResponse);
    itineraryId = createBookingResponse.itinerary_id;
    if (createBookingResponse.encoded_challenge_config) {
      // If the Create Booking API contains an encoded_challenge_config field,
      // display the authentication challenge window
      $('#threeDsIframeModal).modal('show');
      completePaymentSessionLink = createBookingResponse.links.complete_payment_session.href;
      // Perform the challenge using the information returned from Rapid's Register Payments API
      // and Create Booking API
      connector.challenge({
        paymentSessionId: paymentSessionId,
        encodedChallengeConfig: createBookingResponse.encodedChallengeConfig
      }).then(challengeResponse => {
        console.log("Challenge Response: ", challengeResponse);
        // Complete a booking with Rapid's Complete Payment Session API
        return RapidIntegration.completePaymentSession(completePaymentSessionLink, itineraryId);
      }).then(completePaymentSessionResponse => {
        console.log("Complete Payment Session Response: ", completePaymentSessionResponse);
        return completePaymentSessionResponse;
      }).finally(() => {
        // Close the authentication challenge window
        $('#threeDsIframeModal').modal('hide');
      });
    } else {
      return createBookingResponse;
    }
  }).then(bookingResponse => {
    ...
  });

Observação: as referências à classe RapidIntegration fazem parte do exemplo e não da biblioteca de conectores 3DS. Elas servem para demonstrar um wrapper que permite a transferência de informações para as APIs.

O exemplo usa valores estáticos para parâmetros que devem ser determinados no tempo de execução, por exemplo, referenceId.

Diretrizes da página de pagamento

As marcas de cartão que dão suporte à 2FA podem exigir que os seus logotipos e as suas marcas sejam exibidos de acordo com as suas diretrizes.

Bandeira do cartãoMarca de 2FALogos e orientações
MastercardVerificação de identidade Mastercard(https://brand.mastercard.com/debit/mastercard-brand-mark/downloads.html))]
VisaVisa Secure[https://www.merchantsignage.visa.com/brand_guidelines

Observação: logos e orientações para outras marcas de cartão serão incluídos à medida que estiverem disponíveis.

Documentação da biblioteca JavaScript de conectores 3DS

Classe: ThreeDSConnector

Construtor

new ThreeDSConnector(threeDsIFrameId, threeDsIFrameOrigin)

Parâmetros:

NomeTipoDescrição
threeDsIFrameOriginstringO ID do iframe 3DS.
threeDsIFrameOriginstringA origem do iframe 3DS. Usado para direcionar janela de mensagem de saída e filtrar mensagens de entrada ao se comunicar com o iframe 3DS.

Método

Configuração

Configure a sessão de pagamento ao coletar os detalhes básicos sobre o navegador que o serviço 3DS de back-end precisa, como tamanho da tela, profundidade de cor etc.

Assinatura do método:

setup(setupRequest)

Parâmetros:

NomeTipo
setupRequestSetupRequest

Retorna:

Promessa de SetupResponse

Inicializar sessão

Inicializa a sessão para autenticação com 3DS. Como parte da inicialização, outros dados podem ser coletados do navegador. Se solicitado pela emissora do cartão, um URL de método 3DS pode ser carregado no iframe para permitir que o servidor de controle de acesso da emissora do cartão colete dados direto do navegador. O cliente não precisa esperar o callback de conclusão ser invocado para que o pedido seja criado.

Assinatura do método:

initSession(initSessionRequest)

Parâmetros:

NomeTipo
initSessionRequestInitSessionRequest

Retorna: promessa de InitSessionResponse

Challenge

Carrega a experiência de autenticação 3DS, se exigida pela emissora do cartão.

Assinatura do método:

challenge(challengeRequest)

Parâmetros:

NomeTipo
challengeRequestChallengeRequest

Retorna: promessa de ChallengeResponse

Classe: SetupRequest

Estrutura de solicitação para a chamada de configuração.

Propriedades:

NomeTipoDescrição
referenceIdstringO ID de referência para identificar a sessão de pagamento do viajante. Usado para registro e rastreamento. Use uma concatenação de APIKey e Customer-Session-ID com sublinhado. Exemplo: [APIKey]_[SessionID]

Classe: SetupResponse

Resposta da chamada de configuração.

Propriedades:

NomeTipoDescrição
versionstringA versão dessa biblioteca. Essa é a mesma versão presente no caminho de URL para a biblioteca.
encodedBrowserMetadatastringUm objeto codificado contendo os detalhes coletados no navegador. O cliente deve tratar isso como dados opacos a serem passados para os serviços de pagamento de back-end sem análise.

Classe: InitSessionRequest

Estrutura de solicitação para o método initSession.

Propriedades:

NomeTipoDescrição
paymentSessionIdstringUm ID exclusivo retornado pela API de registro de pagamentos do Rapid.
encodedInitConfigstringUma lista codificada de objetos de configuração contendo dados necessários para inicialização, retornados pela API de registro de pagamentos do Rapid.

Classe: InitSessionResponse

Estrutura de resposta para o método initSession.

Propriedades:

NomeTipoDescrição
statusCodestringStatus da chamada initSession.
messagestringOpcional. Indica o motivo da falha.

Valores possíveis para statusCode:

ValorDescrição
SUCCESSInicialização concluída com sucesso.
SKIPPEDNenhuma inicialização foi feita.
FAILEDInicialização falhou. O campo de mensagem contém informações extras sobre a falha.
TIMEOUTA inicialização não foi concluída no tempo disponível. O tempo-limite é de 10 segundos.

Observação: para todos os valores de statusCode de initSessionresponse, continue com a API de reserva da Rapid.

Classe: ChallengeRequest

Estrutura de solicitação para o método de desafio.

Propriedades:

Valor do statusCodeValor do teste encoded_Challenge_configDescrição
SUCCESSW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0Sem interação do usuário com iframe
SUCCESS / FAILEDW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNIT1cifV0Sem interação do usuário com iframe
FAILEDW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQSem interação do usuário com iframe
TIMEOUTW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0
ERRORW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d

Valores possíveis para statusCode

ValorDescrição
SUCCESSO desafio 3DS foi concluído com sucesso.
SKIPPEDErro ao importar uma aplicação externa.
FAILEDO desafio 3DS não foi concluído com sucesso devido à incapacidade do titular do cartão de realizar a autenticação.
TIMEOUTO desafio não foi concluído no tempo disponível. O tempo limite é de 1.200 segundos.

Observação: para todos os valores de statusCode de challengeResponse, prossiga com a Rapid para concluir a sessão de pagamento.

Testes com a Rapid e a autenticação de dois fatores

A sua integração com os métodos Rapid e conector 3DS pode ser testada com valores de parâmetro de entrada que correspondem a situações específicas suportadas pelas APIs.

Rapid

Para testar a Rapid, inclua mais um cabeçalho HTTP chamado "teste" na solicitação HTTP e use um dos valores compatíveis com essa API para testar uma situação compatível.

Dentro do fluxo de reserva PSD2, as respostas de teste da Rapid também podem ser usadas para testar os métodos da biblioteca de conectores 3DS.

Registrar pagamentos

Os seguintes valores de cabeçalho de teste resultam em diferentes valores de encoded_init_config na resposta da API e diferentes códigos de resposta HTTP. É possível transmitir encoded_init_config à chamada initSession da biblioteca JavaScript para acionar diferentes casos de teste da biblioteca de conectores 3DS.

Valor do cabeçalho de testeCódigo de HTTP e respostaCaso de teste initSession
standard201 – Standard ResponseSUCCESS
init_skip201 - Response Without encodedInitConfigNão compatível
init_fail201 – Standard ResponseFAILED
init_timeout201 – Standard ResponseTIMEOUT
internal_server_error500 – Internal Server Error
internal_server_error503 - Server Unavailable

Observação: diferentes casos de teste de init_skip na biblioteca de conectores 3DS Library.t_config que podem ser transmitidos a initSession e forçar um statusCode de SKIPPED.

Criar reserva

Além dos cabeçalhos de teste definidos em Solicitações de teste de reserva da Rapid para o fluxo de reserva que não é PSD2, há suporte para valores de cabeçalho de teste adicionais para o fluxo de trabalho PSD2.

Os valores do cabeçalho de teste resultam em valores encodedChallengeConfig diferentes que podem ser passados para a chamada challenge da biblioteca JavaScript para acionar diferentes casos de teste.

Valor do cabeçalho de testeCódigo de HTTP e respostaCaso de teste initSession
complete_payment_session201 – Response with complete payment session linkSUCCESS sem interação do usuário com iframe
complete_payment_session_show201 – Response with complete payment session linkSUCCESS/FAILED com interação do usuário com iframe
complete_payment_session_fail201 – Response with complete payment session linkFAILED sem interação do usuário com iframe
complete_payment_session_timeout201 – Response with complete payment session linkTIMEOUT
complete_payment_session_error201 – Response with complete payment session linkERROR

Concluir sessão de pagamento

Os valores do cabeçalho de teste resultam em diferentes casos de erro que podem ocorrer ao tentar concluir um pagamento e confirmar uma reserva.

Valor do cabeçalho de testeCódigo de HTTP e resposta
payment_declined400 - Payment declined response
price_mismatch409 - Price mismatch response
rooms_unavailable410 - Rooms unavailable response

Biblioteca de conectores 3DS e iframe 3DS

Para testar o conector 3DS sem dependências externas, valores de parâmetros específicos correspondem às respostas de método com suporte. Esse comportamento só tem suporte quando o iframe é carregado com o teste do URL do sandbox.

Inicializar sessão

Os valores compatíveis do InitSessionResponse statusCode podem ser testados variando o initSessionRequest encodedInitConfig.

Valor do statusCodeValor do teste encodeInitConfig
SUCCESSW3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d
FAILEDW3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJGQUlMRUQifV0=
TIMEOUTW3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJUSU1FT1VUIn1d
SKIPPEDNão compatível no momento.

Observação: os valores encoded_init_config também podem ser gerados com os cabeçalhos de teste compatíveis da API de registro de pagamentos.

Challenge

Os valores compatíveis do challengeResponse statusCode podem ser testados variando o challengeRequest encondedChallengeConfig.

Valor do statusCodeValor do teste encoded_Challenge_configDescrição
SUCCESSW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0Sem interação do usuário com iframe
SUCCESS / FAILEDW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNIT1cifV0Sem interação do usuário com iframe
FAILEDW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQSem interação do usuário com iframe
TIMEOUTW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0
ERRORW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d

Observação: os valores encodedInitConfig também podem ser gerados com os cabeçalhos de teste compatíveis com o fluxo PSD2 da API de reserva.

Observação: ao testar o valor do código de status do Challenge de SUCCESS ou FAILED com base na contribuição do usuário com o iframe, a resposta do método Challenge vai aguardar a conclusão da autenticação da UI (interface do usuário) simulada no iframe.

Exemplo de UI (interface do usuário) em iframe 3DS:

Exemplo de iframe 3DS

Exemplo de uso

Abaixo vemos um exemplo de implementação destinado apenas a orientação. O exemplo demonstra como usar os valores de parâmetro predefinidos para testar a biblioteca para um desafio 3DS sem que o usuário precise interagir com o iframe.

var c = new PayThreeDSConnector.ThreeDSConnector('threedsiframe', 'https://static.pay.expedia.com'); // change to match the 3DS iframe ID
c.setup({ referenceId: '1000' })
    .then((setupResponse) => {
        console.log('Setup Output: ', setupResponse);
        return c.initSession({
            paymentSessionId: 1,
            encodedInitConfig: ' W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d',
        }); // SUCCESS
    })
    .then((initResponse) => {
        console.log('InitSession Output: ', initResponse);
        $('#threedsIframeModal').modal(); // replace with code to show the modal containing the 3DS iframe
        return c.challenge({
            paymentSessionId: 1,
            encodedChallengeConfig:
                ' W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0=',
        }); // SUCCESS
    })
    .then((challengeResponse) => {
        console.log('Challenge Output: ', challengeResponse);
    })
    .finally(() => {
        $('#threedsIframeModal').modal('hide'); // replace with code to hide the modal containing the 3DS iframe
    });

Autenticação de dois fatores e Property Collect

Sobre a autenticação de dois fatores para Property Collect

Nas reservas com Property Collect, a Expedia não realiza uma cobrança no cartão, apenas encaminha para tratamento pela propriedade. A propriedade pode usar essas informações para validar o cartão antes do check-in. O viajante deve realizar o pagamento no momento do check-in.

No entanto, às vezes, viajantes não conseguem fazer o check-in e as propriedades podem cobrar uma taxa de no show. Essas cobranças podem ser afetadas pelos regulamentos da PSD2 porque envolvem realizar uma cobrança em um cartão quando o viajante não está presente.

Se as transações forem afetadas, os pagamentos podem falhar ou as propriedades podem enfrentar penalidades das marcas de cartão se a cobrança não estiver em conformidade.

Para proteger o nosso relacionamento com as propriedades e continuar atendendo os nossos parceiros, o Expedia Group está oferecendo às propriedades um caminho opcional para a conformidade. As propriedades afetadas agora podem aproveitar a 2FA oferecida pelo Expedia Group. Isso permite que as propriedades protejam os seus negócios e garante que a Rapid possa continuar a oferecer propriedades diversificadas.

A Rapid fornece o sinalizador de <payment_registration_recommended=true> no arquivo de conteúdo da propriedade e no conteúdo da propriedade, que pode ajudar você a identificar uma propriedade que pode estar envolvida no projeto.

Observação: apenas propriedades no Espaço Econômico Europeu (EEE) se qualificam para 2FA, e o conjunto de propriedades que pode exigir a 2FA não é estático e pode crescer à medida que outras propriedades optam por habilitar esse recurso.

Como a 2FA para Property Collect pode afetar uma integração?

Se um parceiro quiser oferecer propriedades que possam exigir a 2FA, o caminho de reserva vai oferecer suporte a 2FA. Sem suporte à 2FA, a reserva dessas propriedades pode falhar se o banco emissor do cartão determinar que a 2FA é necessária para a transação, como em cartões emitidos no EEE.

Quando uma taxa de no show for cobrada pela propriedade, a Rapid vai ser o Merchant of Record. A descrição da cobrança na fatura do cartão não vai ser definida pela propriedade. O valor da descrição é definido pelo parceiro. Para personalizar esse texto, entre em contato com o suporte aos parceiros da Rapid.
Para manter a conformidade com os requisitos das marcas de cartão e o processo de inicialização da Rapid, use a API de pagamentos aceitos para exibir processing_country na página de pagamento em caso de no show. Isso é necessário para todas as transações em que a Rapid é o Merchant of Record e pode ocorrer se a autenticação de dois fatores for usada e ocorrer um no show.

Como o impacto em uma integração podem ser mitigados

Se uma integração Rapid não oferecer suporte à 2FA no fluxo de reservas, o risco de reservas com falha pode ser reduzido ao não vender essas propriedades.

Entre em contato com o suporte aos parceiros da Rapid para remover as tarifas Property Collect afetadas das respostas da API de disponibilidade.

De acordo com a ferramenta do agente, ao usar uma ferramenta de agente, a transação está isenta de 2FA. Use o campo sales_channel da API de disponibilidade para indicar isso.

Tratamento de erros

A API de criação de reserva e a API de conclusão de sessão de pagamento podem resultar em reservas confirmadas e transações de pagamento.

A sua integração deve considerar as seguintes instruções para evitar perdas financeiras e casos de operação de cliente:

OrigemFunçãoConfiguração de tempo limite sugeridoProcesso de recuperação de errosAções necessárias
Rapid APIVerificação de preço de pré-reserva para token de registro de pagamento10 segundosTente outra vez ou selecione outra propriedade, quarto ou tarifa-
JavaScriptConfiguração do conector 3DS10 segundosRepita a mesma solicitação-
Rapid APIRegistrar sessão de pagamento10 segundosTente mais uma vez a mesma solicitação sem o processo Expect: 100-Continue-
JavaScriptIniciar sessão de pagamento10 segundosRepita a mesma solicitação-
Rapid APICriar reserva90 segundosRepita a mesma solicitaçãoPara todos os erros: recuperar reserva com affiliate_reference_id
JavaScriptMostrar desafio de 2FA10 segundosRepita a mesma solicitação-
JavaScriptEsperar por challenge.statusCode180 ~ 1.200 segundosSolicitar conclusão da sessão de pagamento-
Rapid APIConcluir sessão de pagamento90 segundosRepita a mesma solicitaçãoPara todos os erros: recuperar reserva comaffiliate_reference_id
Rapid APIPara todos os erros: recuperar reserva comaffiliate_reference_id30 segundosRepita a mesma solicitaçãoPara todos os erros: aguarde 90 segundos antes de tentar mais uma vez, para confirmar o status final das reservas pelo código de resposta da API 404 ou 200
Esta página foi útil?
Como podemos melhorar esse conteúdo?
Agradecemos por nos ajudar a melhorar.