Migra tu integración básica para tarjetas
Si seguiste la guía Pagos con tarjeta sin autenticación bancaria, tu integración crea pagos que serán rechazados cuando el banco le solicite al cliente que autentique la compra.
Si empiezas a ver un gran número de pagos fallidos como el que se muestra en el Dashboard a continuación o con un código de error requires_action_not_handled
en la API, actualiza tu integración básica para gestionar los pagos y no rechazarlos.
Utiliza esta guía para obtener información sobre cómo actualizar la integración que creaste en la guía anterior para agregar código de servidor y de cliente a fin de solicitar al cliente que abra un cuadro de diálogo para solicitar la autenticación del pago.
Nota
Mira una muestra completa de esta integración en GitHub.
Comprueba si el pago requiere autenticación.Lado del servidor
Introduce dos cambios en el punto de conexión del servidor que crea el PaymentIntent:
- Elimina el parámetro error_on_requires_action para que los pagos que requieran autenticación ya no den error. El estado del PaymentIntent cambia a
requires_action
. - Agrega el parámetro
confirmation_method
para indicar que quieres volver a confirmar el pago de manera explícita (manualmente) en el servidor después de gestionar las solicitudes de autenticación.
Luego, actualiza tu función «generar respuesta» para gestionar el estado requires_action
en lugar de que se genere un error:
Pídele al cliente autenticaciónLado del cliente
Luego, actualiza tu código de lado del cliente para indicarle a Stripe que abra un cuadro de diálogo si el cliente necesita autenticación.
Usa stripe.handleCardAction cuando el estado del PaymentIntent sea requires_action
. En caso de haberse concretado, el estado del PaymentIntent será requires_confirmation
y deberás reconfirmar el PaymentIntent en tu servidor para finalizar el pago.
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 el PaymentIntent nuevamenteLado del servidor
Utilizando el mismo punto de conexión que configuraste antes, vuelve a confirmar el PaymentIntent para finalizar el pago y completar el pedido. Si no se vuelve a confirmar en el término de una hora, el intento de pago falla y vuelve a requires_payment_method
.
Probar la integración
Utiliza nuestras tarjetas de prueba en modo de prueba para verificar que tu integración se haya actualizado correctamente. Stripe muestra una página de autenticación simulada dentro del cuadro de diálogo en modo de prueba que te permite recrear un intento de autenticación correcto o fallido. En modo activo, el banco controla la interfaz de usuario de lo que aparece dentro del cuadro de diálogo.
Número | Descripción |
---|---|
Se efectúa correctamente la transacción y se procesa el pago de inmediato. | |
Siempre da error con un código de rechazo insufficient_funds . | |
Requiere autenticación, por lo que en esta integración dará error con el código de rechazo authentication_not_handled . |