Estoy utilizando la integración estándar de PayPal Checkout (a través de la API de pedidos) y quiero capturar el método de pago real, que creo que PayPal llama una "fuente de fondos", con el que pagó el cliente, para que pueda pasar este valor a mi servidor y persistir en mi base de datos.
¿A qué objeto API debo llamar para obtener esta información?
Al usar los botones JS SDK que llaman a su servidor, puede rastrear en qué botón de su sitio se hizo clic al pasar una función onClick ; su primer parámetro será un objeto con la fuente de fundingSource establecida en, por ejemplo, "paypal", "venmo", "tarjeta", "paylater". Haga que almacene esto en un o w/e global y luego puede incluirlo en el cuerpo JSON enviado a su servidor al capturar un pedido de onApprove.
Sin embargo, el método de financiación real que el pagador terminó usando podría no corresponder a esa selección de clic inicial y no se devuelve; esta y toda la demás información de facturación se mantiene privada para el pagador en PayPal por diseño.
Este es un enfoque similar al que describe Preston, y de la misma manera tiene la limitación de que solo devuelve la fuente de financiación del botón que se seleccionó inicialmente en lugar de la que el usuario realmente pagó (ya que esto se puede cambiar por el usuario desde dentro del modal de PayPal).
Parece que esto es actualmente lo más cerca que pueden estar aquellos que usan la integración estándar de PayPal Checkout de obtener el método de pago con el que el usuario realmente pagó porque, por alguna razón, PayPal solo considera necesario exponer esa información (que existe en el API) a los desarrolladores que han implementado la integración avanzada .
Esto es una decepción si eres alguien como yo que ha invertido un tiempo considerable en integrar la integración estándar solo para descubrir demasiado tarde (gracias a la documentación deficiente tanto de las integraciones como de la API) que la integración estándar solo puede acceder a una versión inhabilitada de la API que tiene datos limitados.
En su JavaScript del lado del cliente, agregue la fuente de fundingSource: fundingSource y cualquier otra variable que desee obtener de los datos del pedido:
paypal.Buttons({ ... onApprove: function (data, actions) { return fetch("/route/to/paypal/capture", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ fundingSource: fundingSource, // Add any other variables you need here }), }) ...Luego, al capturar el pago en su servidor, use:
$data = json_decode($request->getContent(), true); ... $payment_method = $data["fundingSource"];