¿Alguien ha encontrado una solución a esto ? Parece que he llegado a la misma conclusión sin solución.
Si tuviera que ir a la página de pago de mi aplicación, la intención de pago se crea en el backend (se explica el proceso a continuación). Entonces, no después de que se crea payIntent, si abro una nueva pestaña y voy al menú y agrego un nuevo elemento de menú, firestore mostrará el nuevo total (correcto), pero dado que se crea la intención de pago, stripe cobra el total anterior (incorrecto) .
lo que estoy haciendo es
Cada vez que se carga la página, envío una solicitud GET a mi backend que verifica la identidad del usuario (usando firestore/firebase).
Comprueba si hay un intento de pago (los intentos de pago se almacenan en firestore correspondientes al usuario)
(y ofc si el carrito de los usuarios está vacío, no se crea una intención de pago)
Envíe de vuelta a la interfaz payInent.clienSecret y artículos del carrito para completar la página
Desde el front-end usando elementos de rayas y confirmPayment confirme el pago
(usando ngrok, la página se carga en aproximadamente 800-1200 ms, así que no está tan mal, creo)
Las posibles soluciones son el uso de webhooks, cuando payintent está procesando, verifique y actualice el precio, pero parece una solución con cinta adhesiva (si es que funciona). O usar webhooks cuando el pago se ha realizado correctamente, actualizar el pago, de nuevo parece una solución de cinta adhesiva (si es que funciona).
EDITAR: posible solución 3 cofirmPayment en el back-end pero de acuerdo con la documentación que elimina la autenticación 3ds, que es la razón por la que estoy haciendo confirmPayment en el front-end de todos modos
SOLUCIÓN: la pieza que falta es que debe actualizar el monto de la intención de pago cuando se agrega algo a su carrito. Una vez que agregue eso, creo que eso resolverá su problema.
Entonces, una función para crear la intención de pago y actualizar la intención de pago (cuando ya hay una intención de pago creada) al agregar al carrito. Y luego una última actualización de PaymentIntent en la página de pago cada vez que eliminen un artículo o si editan el artículo.
gracias justin miguel
No estoy seguro de entender completamente tu pregunta. Si confirma una Intención de pago del lado del cliente utilizando su secreto de cliente, la Intención de pago intentará cobrar el amount actual establecido en él. Stripe nunca utilizará una cantidad anterior o "antigua".
En cuanto a una solución, le recomiendo que recupere la Intención de pago del lado del cliente usando Stripe.js cuando su cliente haga clic en su botón "pagar" y vea si el amount establecido actualmente en la Intención de pago coincide con lo que está mostrando actualmente. a ellos. Si no coincide, cancele el proceso de pago, actualice su estado del lado del cliente en función de la última versión de la Intención de pago que acaba de recuperar, solicite al cliente que confirme el nuevo monto y pídale que haga clic en "pagar" nuevamente.