Testando com a API Rapid Lodging e o 3DS 2.0
Teste sua implementação de SCA com cenários específicos suportados pelas APIs.
Para testar a API Rapid Lodging, inclua um cabeçalho HTTP adicional chamado test na solicitação HTTP e use um dos valores suportados para essa API para testar um cenário compatível.
No fluxo de reserva com autenticação forte do cliente (SCA), as respostas de teste de Rapid API também podem ser usadas para testar os métodos da biblioteca de conectores 3D-Secure (3DS).
Registrar pagamento
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. O encoded_init_config pode ser passado para a chamada initSession da biblioteca JavaScript para acionar diferentes casos de teste dentro da biblioteca do conector 3DS.
| Valor do cabeçalho de teste | Código de HTTP e resposta | Caso de teste initSession |
|---|---|---|
| padrão | 201 – Resposta padrão | SUCCESS |
init_skip | 201 – Resposta sem encoded_init_config | Não compatível |
init_fail | 201 – Resposta padrão | FAILED |
init_timeout | 201 – Resposta padrão | TIMEOUT |
internal_server_error | 500 – Erro interno do servidor | — |
internal_server_error | 503 - Servidor indisponível | — |
Nota: Use init_skip para casos de teste dentro da Biblioteca de Conectores 3DS encoded_init_config que podem ser passados para initSession e forçar um statusCode de IGNORADO.
Criar reserva
Além dos cabeçalhos de teste definidos nas solicitações de teste da API Rapid Lodging para o fluxo de reserva non-SCA, valores de cabeçalho de teste adicionais são suportados para o fluxo de trabalho SCA.
>> Leia mais sobre como solicitar testes de admissão
Os valores do cabeçalho de teste resultam em diferentes valores encodedChallengeConfig que podem ser passados para a chamada de desafio da biblioteca JavaScript para acionar vários casos de teste.
| Valor do cabeçalho de teste | Código de HTTP e resposta | Caso de teste initSession |
|---|---|---|
complete_payment_session | 201 – Response with complete payment session link | SUCCESS sem interação do usuário com iframe |
complete_payment_session_show | 201 – Response with complete payment session link | SUCCESS/FAILED com interação do usuário com iframe |
complete_payment_session_fail | 201 – Response with complete payment session link | FAILED sem interação do usuário com iframe |
complete_payment_session_timeout | 201 – Response with complete payment session link | TIMEOUT |
complete_payment_session_error | 201 – Response with complete payment session link | ERROR |
Além dos cabeçalhos de teste definidos nas solicitações de teste da API Rapid Lodging para o fluxo de reserva non-SCA, valores de cabeçalho de teste adicionais são suportados para o fluxo de trabalho SCA.
>> Leia mais sobre como solicitar testes de admissão
Os valores do cabeçalho de teste resultam em diferentes valores encodedChallengeConfig que podem ser passados para a chamada de desafio da biblioteca JavaScript para acionar vários casos de teste.
| Valor do cabeçalho de teste | Código de HTTP e resposta | Caso de teste initSession |
|---|---|---|
complete_payment_session | 201 – Response with complete payment session link | SUCCESS sem interação do usuário com iframe |
complete_payment_session_show | 201 – Response with complete payment session link | SUCCESS/FAILED com interação do usuário com iframe |
complete_payment_session_fail | 201 – Response with complete payment session link | FAILED sem interação do usuário com iframe |
complete_payment_session_timeout | 201 – Response with complete payment session link | TIMEOUT |
complete_payment_session_error | 201 – Response with complete payment session link | ERROR |
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 teste | Código de HTTP e resposta |
|---|---|
payment_declined | 400 - Payment declined response |
price_mismatch | 409 - Price mismatch response |
rooms_unavailable | 410 - 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 suportados do initSessionResponse statusCode podem ser testados variando o initSessionRequest encoded_init_config.
| Valor do statusCode | Valor do teste encodeInitConfig |
|---|---|
| SUCCESS | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d |
| FAILED | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJGQUlMRUQifV0= |
| TIMEOUT | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJUSU1FT1VUIn1d |
| SKIPPED | Nã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 suportados do challengeResponse statusCode podem ser testados variando o challengeRequest encoded_challenge_config.
| Valor do statusCode | Valor do teste encoded_Challenge_config | Descrição |
|---|---|---|
| SUCCESS | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0 | Sem interação do usuário com iframe |
| SUCCESS / FAILED | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNIT1cifV0 | Sem interação do usuário com iframe |
| FAILED | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQ | Sem interação do usuário com iframe |
| TIMEOUT | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0 | |
| ERROR | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d |
Os valores encoded_init_config também podem ser gerados com os cabeçalhos de teste suportados para o fluxo SCA da API de Reservas.
Nota: Ao testar o valor do código de status do desafio SUCESSO ou FALHA com base na entrada do usuário no iframe, a resposta do método de desafio aguardará a conclusão da interface de autenticação simulada no iframe.
Exemplo de UI (interface do usuário) em iframe 3DS:

Exemplo de uso
Este exemplo demonstra como usar os valores de parâmetros predefinidos para testar a biblioteca em 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 3DS e pagamento posterior
Ao reservar com o modelo pay-later, a Expedia não cobra no cartão. Em vez disso, enviamos ao provedor para que ele processe o pedido. O provedor poderá usar essas informações para validar o cartão antes da reserva. O viajante deverá efetuar o pagamento pessoalmente à chegada.
No entanto, às vezes os planos mudam, caso em que o provedor pode cobrar uma taxa no-show. Essas cobranças podem ser afetadas pelas regulamentações da SCA, pois envolvem a cobrança em um cartão quando o viajante não está presente.
Se as transações forem afetadas, os pagamentos podem falhar ou os vendedores podem sofrer penalidades das bandeiras de cartão se a cobrança for non-compliant.
Para proteger nosso relacionamento com nossos fornecedores e continuar atendendo nossos parceiros, a Expedia Group está oferecendo um caminho opcional para a conformidade: a Expedia Group pode fornecer autenticação em nome deles. Isso permite que os fornecedores protejam seus negócios e garante que a Rapid API possa continuar oferecendo a mesma gama diversificada de opções.
Na API Rapid Lodging, isso se apresenta na forma do indicador payment_registration_recommended=true no arquivo de conteúdo propriedade e no conteúdo propriedade, o que pode ajudar a identificar um propriedade quando ele estiver potencialmente envolvido no projeto.
Possíveis impactos em uma integração
Se você deseja oferecer fornecedores que podem exigir autenticação segura, o processo de reserva deve ser compatível com 3DS. Sem suporte para 3DS, a reserva dessas opções pode falhar se o banco card-issuing determinar que a autenticação é necessária para a transação.
Quando uma taxa no-show for cobrada, Rapid API será o Merchant registrado. A descrição da cobrança na nota fiscal do cartão será definida pela sua organização, não pelo propriedade. Para personalizar esse texto, entre em contato com o suporte aos parceiros da Rapid.
Para manter a conformidade com os requisitos das bandeiras de cartão e com o processo de lançamento da campanha Rapid API, utilize a API de Pagamentos Aceitos para exibir oprocessing_country na página check-out em caso de no-show. Isso é necessário para todas as transações em que Rapid API é o Merchant registrado, e pode ocorrer se o 3DS for usado e ocorrer um no-show.
Como mitigar os impactos da integração
Se uma integração Rapid API não suportar autenticação segura no fluxo de reservas, o risco de reservas com falha pode ser reduzido eliminando os fornecedores cujos anúncios não estejam em conformidade. Entre em contato com o Suporte a Parceiros da Rapid para que as taxas afetadas sejam removidas das suas respostas da API de Disponibilidade.
Ao utilizar uma ferramenta de agente, a transação fica isenta de SCA (Autenticação Forte do Cliente) de acordo com os regulamentos. Utilize a API de Disponibilidade.sales_channel campo 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:
| Origem | Função | Configuração de tempo limite sugerido | Processo de recuperação de erros | Ações necessárias |
|---|---|---|---|---|
| Rapid API | Verificação de preço de pré-reserva para token de registro de pagamento | 10 segundos | Tente outra vez ou selecione outra propriedade, quarto ou tarifa | - |
| JavaScript | Configuração do conector 3DS | 10 segundos | Repita a mesma solicitação | - |
| Rapid API | Registrar sessão de pagamento | 10 segundos | Tente novamente a mesma solicitação sem o processo "Expect: 100-continue". | - |
| JavaScript | Iniciar sessão de pagamento | 10 segundos | Repita a mesma solicitação | - |
| Rapid API | Criar reserva | 90 segundos | Repita a mesma solicitação | Para todos os erros: Recupere a reserva com affiliate_reference_id |
| JavaScript | Exibir desafio de autenticação | 10 segundos | Repita a mesma solicitação | - |
| JavaScript | Esperar por challenge.statusCode | 180 ~ 1.200 segundos | Solicitar conclusão da sessão de pagamento | - |
| Rapid API | Concluir sessão de pagamento | 90 segundos | Repita a mesma solicitação | Para todos os erros: Recupere a reserva com affiliate_reference_id |
| Rapid API | Para todos os erros: Recupere a reserva com affiliate_reference_id | 30 segundos | Repita a mesma solicitação | Para 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 |