Migrar sua integração básica de cartões
Se você seguiu o guia de pagamentos do cartão sem autenticação bancária, então sua integração cria pagamentos que são recusados quando um banco solicita ao cliente que faça a autenticação da compra.
Se começarem a aparecer muitos pagamentos com falha, como o que aparece abaixo no Dashboard ou com o código de erro requires_action_not_handled
na API, faça upgrade da sua integração básica para aceitar esses pagamentos, em vez de recusá-los.
Use este guia para saber como atualizar a integração criada no guia anterior para adicionar código de servidor e cliente que mostre um modal para solicitar ao cliente que autentique o pagamento.
Observação
Veja um exemplo completo da integração no GitHub.
Verifique se o pagamento requer autenticaçãoLado do servidor
Faça duas alterações no endpoint de seu servidor que cria o PaymentIntent:
- Remova o parâmetro error_on_requires_action para não gerar uma falha nos pagamentos que exigem autenticação. O status do PaymentIntent muda para
requires_action
. - Adicione o parâmetro
confirmation_method
para indicar que você deseja confirmar explicitamente (manualmente) o pagamento mais uma vez no servidor depois de aceitar as solicitações de autenticação.
Em seguida, atualize a função “gerar resposta” para aceitar o estado requires_action
em vez de gerar um erro:
Solicite a autenticação do clienteLado do cliente
Em seguida, atualize o código do lado do cliente para indicar à Stripe que é preciso mostrar um modal se o cliente precisar se autenticar.
Use stripe.handleCardAction quando o status de um PaymentIntent for requires_action
. Se funcionar, o status do PaymentIntent será requires_confirmation
, e você deve confirmar o PaymentIntent outra vez no seu servidor para finalizar o pagamento.
const handleServerResponse = async (responseJson) => { if (responseJson.error) { // Show error from server on payment form } else if (responseJson.requiresAction) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(responseJson.clientSecret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } }
Confirmar o PaymentIntent novamenteLado do servidor
Usando o mesmo endpoint configurado anteriormente, confirme o PaymentIntent mais uma vez para finalizar o pagamento e executar o pedido. A tentativa de pagamento apresenta falha e o PaymentIntent retorna para o status requires_payment_method
se não for confirmado novamente em até uma hora.
Testar a integração
Use nossos cartões de teste no modo de teste para verificar se sua integração foi atualizada corretamente. A Stripe exibe uma página falsa de autenticação no modal em modo de teste que permite simular uma tentativa de autenticação com êxito ou com falha. No modo de produção, o banco controla a IU do que é exibido no modal.
Número | Descrição |
---|---|
Finaliza e processa o pagamento imediatamente. | |
Sempre falha, com o código de recusa insufficient_funds . | |
Exige autenticação, que nesta integração falha com o código de recusa authentication_not_handled . |