# Migrar sua integração básica de cartões Migre para uma integração que gerencie solicitações bancárias para autenticação de cartão. Se você seguiu o guia [Pagamentos do cartão sem autenticação bancária](https://docs.stripe.com/payments/without-card-authentication.md), 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. ![Dashboard mostrando uma falha de pagamento que indica que o banco exigiu autenticação para o pagamento](https://b.stripecdn.com/docs-statics-srv/assets/failed-payment-dashboard.9e22ec31f3c7063665911e26e389c5dc.png) 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. > Veja um [exemplo completo](https://github.com/stripe-samples/accept-a-payment/tree/master/custom-payment-flow) da integração no GitHub. ## Verifique se o pagamento requer autenticação [Lado do servidor] Faça duas alterações no endpoint de seu servidor que cria o PaymentIntent: 1. **Remova** o parâmetro [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action) para não gerar uma falha nos pagamentos que exigem autenticação. O status do PaymentIntent muda para `requires_action`. 1. **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. #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d amount=1099 \ -d currency=usd \ -d payment_method_types[]=card \ -d confirm=true \-d payment_method="{{PAYMENT_METHOD_ID}}" \ -d confirmation_method=manual ``` Em seguida, atualize a função “gerar resposta” para aceitar o estado `requires_action` em vez de gerar um erro: #### curl ```bash # If the request succeeds, check the # PaymentIntent's `status` and handle # its `next_action`. ``` ## Solicite a autenticação do cliente [Lado 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](https://docs.stripe.com/js.md#stripe-handle-card-action) 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. ```javascript 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 novamente [Lado do servidor] Usando o mesmo endpoint configurado anteriormente *confirm* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) 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. #### curl ```bash curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u <>: \ -X "POST" ``` ## Testar a integração Use nossos cartões de teste em uma área restrita para verificar se sua integração foi atualizada corretamente. O Stripe exibe uma página de autenticação falsa dentro do modal em uma área restrita que permite simular uma tentativa de autenticação bem-sucedida ou fracassada. No modo de produção, o banco controla a IU do que é exibido dentro do modal. | Número | Descrição | | ---------------- | --------------------------------------------------------------------------------------------------- | | 4242424242424242 | Finaliza e processa o pagamento imediatamente. | | 4000000000009995 | Sempre falha, com o código de recusa `insufficient_funds`. | | 4000002500003155 | Exige autenticação, que nesta integração falha com o código de recusa `authentication_not_handled`. |