Ir a contenido
Crea una cuenta
o
Inicia sesión
Logotipo de Stripe Docs
/
Pregúntale a la IA
Crear una cuenta
Iniciar sesión
Empieza ahora
Pagos
Automatización contable
Plataformas y marketplaces
Gestión del dinero
Herramientas para desarrolladores
Empieza ahora
Pagos
Automatización contable
Empieza ahora
Pagos
Automatización contable
Plataformas y marketplaces
Gestión del dinero
Resumen
Control de versiones
Registro de cambios
Actualiza tu versión de API
Actualiza la versión de SDK
Herramientas para desarrolladores
SDK
API
    API v2
    Claves de API
    Encabezado de Stripe-Context
    Registro de cambios diario
    Límites de frecuencia
    Pruebas automatizadas
    Metadatos
    Cómo expandir respuestas
    Paginación
    Dominios y direcciones IP
    Buscar
    Localización
    Administración de errores
      Gestión de errores avanzados
    Códigos de error
Pruebas
Workbench
Destinos de eventos
Flujos de trabajo
CLI de Stripe
Stripe Shell
Dashboard para desarrolladores
Kit de herramientas para agentes
Alertas de estado de StripeBuild with LLMsStripe para Visual Studio CodeCargas de archivos
Seguridad
Seguridad
Amplía Stripe
Stripe Apps
Stripe Connectors
Socios
Ecosistema de socios
Certificación de socio
InicioHerramientas para desarrolladoresAPI

Administración de errores

Capta y responde rechazos, datos no válidos, problemas de red, etc.

Copiar página

Stripe ofrece varios tipos de errores. Estos pueden reflejar eventos externos, como pagos fallidos e interrupciones de redes, o problemas de código, como llamadas API no válidas.

Para gestionar errores, usa todas o algunas de las técnicas de la tabla que figura a continuación. Sea cual sea la técnica que uses, puedes seguir con nuestras respuestas recomendadas para cada tipo de error.

TécnicaFinalidadCuándo se necesita
Captar excepcionesRecuperar una llamada API cuando esta no puede continuarSiempre
Supervisar webhooksReaccionar a las notificaciones de StripeA veces
Obtener información almacenada sobre erroresInvestigar problemas anteriores y admitir otras técnicasA veces

Captar excepciones

Errores y HTTP

Con esta biblioteca, no es necesario comprobar si hay respuestas HTTP que no sean 200. La biblioteca las traduce como excepciones.

En el caso poco frecuente de que necesites datos HTTP, consulta cómo gestionar las excepciones de bajo nivel y el objeto Error.

Si un problema inmediato evita que continúe una llamada API, la biblioteca de Ruby para Stripe lanza una excepción. Captar y gestionar las excepciones es una práctica recomendada.

Para detectar una excepción, usa la palabra clave rescue de Ruby. Captura Stripe::StripeError o sus subclases para gestionar solo las excepciones específicas de Stripe. Cada subclase representa un tipo diferente de excepción. Cuando detectes una excepción, puedes usar su clase para elegir una respuesta.

Ruby
require 'stripe' Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
def example_function(params) begin Stripe::PaymentIntent.create(params) rescue Stripe::CardError => e puts "A payment error occurred: #{e.error.message}" rescue Stripe::InvalidRequestError => e puts "An invalid request occurred." rescue Stripe::StripeError => e puts "Another problem occurred, maybe unrelated to Stripe." else puts "No error." end end

Después de configurar la gestión de excepciones, pruébala con varios datos, incluidas las tarjetas de prueba, para simular diferentes resultados de pago.

Ruby
example_function( # The required parameter currency is missing, amount: 2000, confirm: true, payment_method:
'pm_card_visa'
, )
console
Ruby
An invalid request occurred.

Supervisar webhooks

Stripe te notifica sobre muchos tipos de problemas utilizando webhooks. Esto incluye problemas que no se producen inmediatamente después de una llamada a la API. Por ejemplo:

  • Pierdes una disputa.
  • Un pago recurrente falla después de haberse cobrado correctamente durante meses.
  • Tu front-end confirma un pago, pero se desconecta antes de saber que el pago falló. (El back-end sigue recibiendo notificaciones del webhook, aunque no haya sido el que realizó la llamada API).

No necesitas manejar todos los tipos de eventos de webhook. De hecho, algunas integraciones no manejan ninguna.

En tu controlador de webhook, comienza con los pasos básicos desde el creador de webhooks: obtén un objeto Event y usa el tipo de evento para descubrir qué sucedió. Luego, si el tipo de evento indica que ocurrió un error, debes seguir estos otros pasos:

  1. Ve a event.data.object para recuperar el objeto afectado.
  2. Usa información almacenada en el objeto afectado para obtener contexto, incluido un objeto Error.
  3. Usa el tipo de error para elegir una respuesta.
Ruby
require 'stripe' require 'sinatra' post '/webhook' do payload = request.body.read data = JSON.parse(payload, symbolize_names: true) # Get the event object event = Stripe::Event.construct_from(data) # Use the event type to find out what happened case event.type when 'payment_intent.payment_failed' # Get the object affected payment_intent = event.data.object # Use stored information to get an error object e = payment_intent.last_payment_error # Use its type to choose a response case e.type when 'card_error' puts "A payment error occurred: #{e.message}" when 'invalid_request' puts "An invalid request occurred." else puts "Another problem occurred, maybe unrelated to Stripe." end end content_type 'application/json' { status: 'success' }.to_json end

Para probar cómo responde tu integración a los eventos de webhook, puedes activar eventos de webhook de manera local. Después de completar los pasos de configuración en ese enlace, activa un pago fallido para ver el mensaje de error resultante.

Command Line
stripe trigger payment_intent.payment_failed
Output
A payment error occurred: Your card was declined.

Obtener información almacenada sobre errores

Muchos objetos almacenan información sobre errores. Eso significa que si algo ya salió mal, puedes recuperar el objeto y examinarlo para obtener más información. En muchos casos, la información almacenada tiene la forma de un objeto de error, y puedes usar su tipo para elegir una respuesta.

Por ejemplo:

  1. Recupera un Payment Intent específico.
  2. Para verificar si se produjo un error de pago, determina si last_payment_error está vacío.
  3. De ser así, registra el error. Incluye el tipo de error y el objeto afectado.
Ruby
require 'stripe' Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
payment_intent = Stripe::PaymentIntent.retrieve(
'{{PAYMENT_INTENT_ID}}'
) e = payment_intent.last_payment_error if !e.nil? puts "PaymentIntent #{payment_intent.id} experienced a #{e.type}." end

Estos son algunos objetos comunes que almacenan información sobre errores.

ObjetoAtributoValores
Payment Intentlast_payment_errorUn objeto de error
Setup Intentlast_setup_errorUn objeto de error
Facturalast_finalization_errorUn objeto de error
Setup Attemptsetup_errorUn objeto de error
Payoutfailure_codeUn código de error de pago
Refundfailure_reasonUn código de error de reembolso

Para probar el código que usa información almacenada sobre errores, a menudo tendrás que simular transacciones fallidas. Por lo general, para hacerlo, usa tarjetas de prueba o números bancarios de prueba. Por ejemplo:

  • Simula un pago rechazado para crear errores de Charges, PaymentIntents y SetupIntents, entre otros.
  • Simula un error de pago.
  • Simula un error de reembolso.

Tipos de errores y respuestas

En la biblioteca Ruby de Stripe, los objetos Error son parte de stripe.error.StripeError y sus subclases. Utiliza la documentación de cada clase para ver consejos sobre cómo responder.

Nombre

Clase

Descripción
Error de pago

Stripe::CardError

Se produjo un error durante un pago, debido a alguno de estos motivos:
  • Pago bloqueado por presunto fraude
  • Pago rechazado por el emisor.
  • Otros errores de pago.
Errores de solicitud no válida

Stripe::InvalidRequestError

Hiciste una llamada API con parámetros erróneos, en el estado equivocado o de forma no válida.

Error de conexión

Stripe::APIConnectionError

Hubo un problema de red entre tu servidor y Stripe.
Error de API

Stripe::APIError

Se produjo un error del lado de Stripe. (Esto no suele ocurrir).
Error de autenticación

Stripe::AuthenticationError

Stripe no puede autenticarte con la información proporcionada.
Error de idempotencia

Stripe::IdempotencyError

You used an idempotency key for something unexpected, like replaying a request but passing different parameters.
Error de permiso

Stripe::PermissionError

La clave API usada para esta solicitud no tiene los permisos necesarios.
Error de límite de velocidad

Stripe::RateLimitError

Hiciste demasiadas llamadas API en muy poco tiempo.
Error de verificación de firma

Stripe::SignatureVerificationError

You’re using webhook signature verification and couldn’t verify that a webhook event is authentic.

Errores de pago

Errores de pago sin tarjeta

Everything in this section also applies to non-card payments. For historical reasons, payment errors have the type Stripe::CardError. But in fact, they can represent a problem with any payment, regardless of the payment method.

Los errores de pago, a veces llamados ”errores de tarjeta” por motivos históricos, cubren una amplia variedad de problemas comunes. Están divididos en tres categorías:

  • Pago bloqueado por presunto fraude
  • Pago rechazado por el emisor
  • Otros errores de pago

To distinguish these categories or get more information about how to respond, consult the error code, decline code, and charge outcome.

(To find the charge outcome from an error object, first get the Payment Intent that’s involved and the latest Charge it created. See the example below for a demonstration.)

Ruby
require 'stripe' Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
def example_function(params) begin Stripe::PaymentIntent.create(params) rescue Stripe::CardError => e charge = Stripe::Charge.retrieve(e.error.payment_intent.latest_charge) if charge.outcome.type == 'blocked' puts 'Payment blocked for suspected fraud.' elsif e.code == 'card_declined' puts 'Payment declined by the issuer.' elsif e.code == 'expired_card' puts 'Card expired.' else puts 'Other card error.' end end end

Users on API version 2022-08-01 or older:

(To find the charge outcome from an error object, first get the Payment Intent that’s involved and the latest Charge it created. See the example below for a demonstration.)

Ruby
require 'stripe' Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
def example_function(params) begin Stripe::PaymentIntent.create(params) rescue Stripe::CardError => e if e.error.payment_intent.charges.data[0].outcome.type == 'blocked' puts 'Payment blocked for suspected fraud.' elsif e.code == 'card_declined' puts 'Payment declined by the issuer.' elsif e.code == 'expired_card' puts 'Card expired.' else puts 'Other card error.' end end end

Puedes activar algunos tipos de errores de pago más comunes con las tarjetas de prueba. Consulta la siguiente lista para ver las opciones:

  • Simulating payments blocked for fraud risk
  • Simulating declined payments and other card errors

El código de prueba que figura a continuación muestra algunas posibilidades.

Ruby
example_function( currency: 'usd', amount: 2000, confirm: true, payment_method:
'pm_card_radarBlock'
, )
console
Ruby
Payment blocked for suspected fraud.

Pago bloqueado por presunto fraude

Tipo

Stripe::CardError

Códigos
charge = Stripe::Charge.retrieve(e.error.payment_intent.latest_charge) charge.outcome.type == 'blocked'
Códigos

e.error.payment_intent.charges.data[0].outcome.type == 'blocked'

ProblemaEl sistema de prevención de fraude de Stripe, Radar, bloqueó el pago

Soluciones

Este error se puede producir cuando tu integración funciona correctamente. Cáptalo y solicítale al cliente otro método de pago.

Para bloquear menos pagos legítimos, intenta lo siguiente:

  • Optimize your Radar integration to collect more detailed information.
  • Use Payment Links, Checkout, or Stripe Elements for prebuilt optimized form elements.

Los clientes de Radar para Equipos de Fraude tienen estas opciones adicionales:

  • Para eximir un pago en particular, agrégalo a tu lista de permitidos. Radar for Fraud Teams
  • To change your risk tolerance, adjust your risk settings. Radar para Equipos de Fraude
  • To change the criteria for blocking a payment, use custom rules. Radar para Equipos de Fraude

You can test your integration’s settings with test cards that simulate fraud. If you have custom Radar rules, follow the testing advice in the Radar documentation.

Pago rechazado por el emisor

Tipo

Stripe::CardError

Códigos

e.error.code == "card_declined"

ProblemaEl emisor de la tarjeta rechazó el pago.

Soluciones

This error can occur when your integration is working correctly. It reflects an action by the issuer, and that action might be legitimate. Use the decline code to determine what next steps are appropriate. See the documentation on decline codes for appropriate responses to each code.

También puedes

  • Follow recommendations to reduce issuer declines.
  • Use Payment Links, Checkout, or Stripe Elements for prebuilt form elements that implement those recommendations.

Test how your integration handles declines with test cards that simulate successful and declined payments.

Otros errores de pago

Tipo

Stripe::CardError

ProblemaSe produjo otro error de pago.
SolucionesThis error can occur when your integration is working correctly. Use the error code to determine what next steps are appropriate. See the documentation on error codes for appropriate responses to each code.

Errores de solicitudes no válidas

Tipo

Stripe::InvalidRequestError

ProblemaHiciste una llamada API con parámetros erróneos, en el estado equivocado o de forma no válida.
SolucionesEn la mayoría de los casos, el problema es de la solicitud misma. Puede ser que los parámetros no sean válidos o que la solicitud no pueda realizarse en el estado actual de tu integración.
  • Consult the error code documentation for details on the problem.
  • Para mayor comodidad, puedes seguir el enlace para ver la documentación sobre el código de error.
  • Si el error involucra un parámetro específico, usa para determinar de cuál se trata.

Errores de conexión

Tipo

Stripe::APIConnectionError

ProblemaHubo un problema de red entre tu servidor y Stripe.

Soluciones

Treat the result of the API call as indeterminate. That is, don’t assume that it succeeded or that it failed.

Para saber si se realizó correctamente, puedes

  • Recupera el objeto relevante desde Stripe y comprueba su estado.
  • Escucha la notificación de webhook que indica que la operación se realizó correctamente o falló.

To help recover from connection errors, you can:

  • When creating or updating an object, use an idempotency key. Then, if a connection error occurs, you can safely repeat the request without risk of creating a second object or performing the update twice. Repeat the request with the same idempotency key until you receive a clear success or failure. For advanced advice on this strategy, see Low-level error handling.
  • Habilita los reintentos automáticos. Luego, Stripe genera las claves de idempotencia y, cuando es seguro hacerlo, repite las solicitudes por ti.

Este error puede ocultar otros. Es posible que aparezca otro error después de que se resuelva el problema de conexión. Revisa que no haya errores en todas estas soluciones, al igual que lo harías en la solicitud original.

Errores de API

Tipo

Stripe::APIError

ProblemaSe produjo un error del lado de Stripe. (Esto no suele ocurrir).

Soluciones

Trata el resultado de la llamada API como indeterminado. Es decir, no des por sentado que se realizó correctamente ni que falló.

Recurre a los webhooks para obtener información sobre el resultado. Cuando sea posible, Stripe activará webhooks para todos los objetos nuevos que se creen mientras se resuelva un problema.

To set your integration up for maximum robustness in unusual situations, see this advanced discussion of server errors.

Errores de autenticación

Tipo

Stripe::AuthenticationError

ProblemaStripe no puede autenticarte con la información proporcionada.
Soluciones
  • Use the correct API key.
  • Make sure you aren’t using a key that you “rotated” or revoked.

Errores de idempotencia

Tipo

Stripe::IdempotencyError

ProblemaYou used an idempotency key for something unexpected, like replaying a request but passing different parameters.
Soluciones
  • Después de usar una clave de idempotencia, reutilízala solo para llamadas API idénticas.
  • Usa claves de idempotencia que no superen los 255 caracteres.

Errores de permisos

Tipo

Stripe::PermissionError

ProblemaThe API key used for this request doesn’t have the necessary permissions.
Soluciones
  • Make sure you aren’t using a restricted API key for a service it doesn’t have access to.
  • Don’t perform actions in the Dashboard while logged in as a user role that lacks permission.

Errores de límite de frecuencia

Tipo

Stripe::RateLimitError

ProblemaHiciste demasiadas llamadas API en muy poco tiempo.
Soluciones
  • Si una sola llamada API activa este error, espera y vuelve a intentarlo.
  • To handle rate-limiting automatically, retry the API call after a delay, and increase the delay exponentially if the error continues. See the documentation on rate limits for further advice.
  • Si anticipas que tendrás un gran incremento del tráfico y quieres solicitar un aumento del límite de frecuencia, ponte en contacto con soporte por adelantado.

Errores de verificación de firma

Tipo

Stripe::SignatureVerificationError

ProblemaYou’re using webhook signature verification and couldn’t verify that a webhook event is authentic.

Soluciones

Este error puede ocurrir cuando tu integración funciona correctamente. Si usas una verificación de firma de webhook y un tercero intenta enviarte un webhook falso o malicioso, entonces la verificación falla y, como resultado, se devuelve este error. Cáptalo y responde con un código de estado 400 Bad Request.

If you receive this error when you shouldn’t—for instance, with webhooks that you know originate with Stripe—then see the documentation on checking webhook signatures for further advice. In particular, make sure you’re using the correct endpoint secret. This is different from your API key.

¿Te fue útil esta página?
SíNo
¿Necesitas ayuda? Ponte en contacto con soporte.
Únete a nuestro programa de acceso anticipado.
Echa un vistazo a nuestro registro de cambios.
¿Tienes alguna pregunta? Contacto.
¿LLM? Lee llms.txt.
Con tecnología de Markdoc