Necesito manejar tarjetas rechazadas en mi implementación y probar que funciona.
Mi código de cliente actual (basado en varios ejemplos) se ve así:
BuildNewPayPalButtons = function(val) { paypal.Buttons({ createOrder: function(data, actions) { // Set up the transaction return actions.order.create({ application_context: { shipping_preference: 'NO_SHIPPING' // NOT an enum }, purchase_units: [{ amount: { value: '$amt' }, description: 'my favorite product', invoice_id: '$sessid' }] }); }, onApprove: function(data, actions) { return actions.order.capture().then(function(orderData) { var trns = orderData.purchase_units[0].payments.captures[0]; console.error('OK: Whole JSON ', JSON.stringify(orderData)); // Send the transaction id to the server for verification window.location.href = "$payurl&paymID=" + trns.id; }); }, onCancel: function(data) { window.location.href = "$cancelurl"; }, onError: function(err) { console.error('error from the onError callback', err); window.location.href = "/unimplemented_error.html"; } }).render('#paypal-button-container'); }Sería bueno si la documentación "Complete Javascript SDK" pudiera expandirse para estar a la altura de su nombre.
Cuando se usa actions.order.capture() del lado del cliente, los rechazos se manejan automáticamente. Ver la nota aquí .
El manejo de los rechazos solo es necesario para una captura de API del lado del servidor, como en este ejemplo.
Opcionalmente, puede implementar onError para mostrar un mensaje de error genérico si surge una situación de error 500 aleatoria no detectada, pero esos son un asunto separado de los rechazos y rara vez se encuentran.