Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

368
Vistas
Stripe: guarde el método de pago del cliente solo si el usuario lo solicita

Uso el elemento de pago de rayas en el lado del cliente. Envía una solicitud al servidor para recuperar la identificación del intento de pago y el secreto del cliente.

Me gustaría poder guardar el método de pago del cliente solo si el cliente ha marcado la casilla guardar este método de pago para futuras compras

Pero me gustaría que el método se registre solo después de pasar mi flujo completo en el lado del servidor y tener éxito.

1- Para esto configuro el método de captura en "manual" cuando creo la intención de pago y capturo y actualizo la intención de pago cuando todas las instrucciones del lado del servidor han tenido éxito así:

 if (isWantSaveMethod) { await stripe.paymentIntents.update(paymentIntent.id, { setup_future_usage: 'off_session' }) } await stripe.paymentIntents.capture(paymentIntent.id)

=> El problema es que si actualizo el intento de pago antes de que se capture, obtengo el error: You cannot provide a new payment method to a PaymentIntent when it has a status of requires_capture. You should either capture the remaining funds, or cancel this PaymentIntent and try again with a new PaymentIntent.

2- Luego intenté usar una configuración de intención, que aparentemente nos permite vincular un método de pago a un cliente

 if (isWantSaveMethod) { await stripe.setupIntents.create({ payment_method: paymentIntent.payment_method, confirm: true, customer: paymentIntent.customer, }) } await stripe.paymentIntents.capture(paymentIntent.id)

=> Pero: The provided PaymentMethod was previously used with a PaymentIntent without Customer attachment, shared with a connected account without Customer attachment, or was detached from a Customer. It may not be used again. To use a PaymentMethod multiple times, you must attach it to a Customer first.

3- Luego intenté adjuntar la intención de pago a un cliente de esta manera:

 if (isWantSaveMethod) { await stripe.paymentMethods.attach(paymentIntent.payment_method, { customer: paymentIntent.customer, }) await stripe.setupIntents.create({ payment_method: paymentIntent.payment_method, confirm: true, customer: paymentIntent.customer, }) } await stripe.paymentIntents.capture(paymentIntent.id)

=> Pero recuerdo que la documentación dice: Para adjuntar un nuevo PaymentMethod a un cliente para pagos futuros, le recomendamos que use SetupIntent o PaymentIntent con setup_future_usage . Estos enfoques realizarán los pasos necesarios para garantizar que PaymentMethod se pueda usar en un pago futuro.

Así que finalmente estoy aquí para saber cuál es la buena manera de hacer eso. ¿Cómo los sitios web populares hacen esto?

Solo quiero asegurarme de que todas mis instrucciones en el lado del servidor se ejecutaron correctamente antes de guardar el método de pago y quiero poder usar este método más adelante.

¿Cómo puedo hacer eso respetando las recomendaciones que dio la raya en relación con el método adjunto?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Al usar el elemento de pago, el flujo de usuario previsto es que pasaría setup_future_usage cuando se crea la intención de pago. Stripe quiere saber si tiene la intención de usar setup_future_usage antes de tiempo para que puedan elegir qué tipos de Método de pago se deben usar en el Elemento de pago (dado que no todos se pueden usar con setup_future_usage . Debe cambiar su flujo de pago para preguntar si su cliente quiere guardar su método de pago antes de mostrar el Elemento de pago, o puede usar los elementos individuales como el elemento Tarjeta en su lugar (cada uno de estos elementos debe permitir pasar setup_future_usage con la llamada de confirmación del lado del cliente; ejemplo aquí ).

Alternativamente (realmente no recomendaría esto), puede considerar hacer lo siguiente:

  1. Asegúrese de no haber habilitado ningún tipo de método de pago que no sea compatible setup_future_usage (puede encontrar la lista aquí ).
  2. Cambie su código del lado del cliente para enviar primero una solicitud a su servidor para actualizar la intención de pago para configurar setup_future_usage y espere a que la respuesta sea exitosa antes de continuar llamando al lado del cliente confirmPayment .
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda