Integración de PayPal Parte 2 API REST de PayPal

Lo que vas a crear

En este tutorial, le mostraré cómo puede realizar pagos utilizando la API REST de PayPal y C #. Todas las bibliotecas que tienen para diferentes idiomas como Ruby, Node.js, Python, PHP son muy similares, por lo que todos los conceptos aquí se aplican a todas las bibliotecas..

Configuración del proyecto

Para empezar, he creado un proyecto MVC en Visual Studio 2015: Archivo> Nuevo> Proyecto, y seleccione Aplicación ASP.NET.

Selecciona el Aplicación Web ASP.NET 5 Plantilla, que utiliza el nuevo MVC 6. Es similar a MVC 5 si está familiarizado con él.

Como puede ver en la foto de abajo, he agregado algunos archivos y carpetas a la solución. Las dos cosas principales a tener en cuenta son:

  1. En Referencias He eliminado el DNX Core 5.0 de destino, que es lo que nos permitiría ejecutar este proyecto en Mac OS X o Linux, pero la biblioteca de PayPal que necesitamos todavía no se ha actualizado.. 
  2. He agregado la carpeta "Servicios", en la que voy a ajustar la lógica de las llamadas de PayPal, para que podamos mantener los controladores cómodos y cortos..

Instalar PayPal SDK utilizando NuGet. Botón derecho del ratón en el nombre de la solución y seleccione Administrar paquetes de NuGet, y luego busque "PayPal" e instálelo.

Crear una aplicación de PayPal

Para integrar nuestra aplicación con PayPal, debemos navegar a los Desarrolladores de PayPal, y luego debajo de Aplicaciones API REST, haga clic en Crear aplicación.

Asigne un nombre a su aplicación y elija una cuenta de desarrollador de sandbox asociada con la aplicación. Para propósitos de prueba, podemos navegar a http://sandbox.paypal.com e iniciar sesión con los detalles de inicio de sesión de sandbox para ver las transacciones y la cuenta de PayPal de prueba.

Después de hacer clic en Crear aplicación, Vemos la pantalla de confirmación con el ID de cliente y los tokens secretos..

Copie los tokens clientId y clientSecret a appsettings.json, Como puedes ver en la siguiente captura de pantalla:

Pruebas de pagos

PayPal proporciona un entorno de Sandbox para pruebas. Puede crear cuentas de comprador y vendedor de prueba desde allí. Cuando te registres, tendrás una cuenta Business en el Sandbox que está vinculada a tu cuenta de desarrollador..

Para crear una nueva cuenta de prueba, inicie sesión en el sitio del desarrollador y luego haga clic en Tablero pestaña y navega hasta Sandbox> Cuentas. Aquí puede ver la lista de cuentas de prueba si tiene alguna:

Si aún no ha creado sus cuentas de prueba, siga adelante y haga clic en Crear una cuenta, en la parte superior derecha, para crear al menos una cuenta personal de prueba y una cuenta comercial de prueba.

Después de crear las cuentas de prueba, puede iniciar sesión a través de www.sandbox.paypal.com con la dirección de correo electrónico de prueba y la contraseña que asignó a cada cuenta en el formulario anterior. Esto es realmente útil para probar que cuando compra algo con su 'cuenta de prueba personal', los fondos se transfieren a su 'cuenta de prueba'. Ahora está listo para comenzar a integrarse con PayPal y probar que los fondos se están moviendo de una cuenta a otra.

Pago único de PayPal

PayPal ofrece diferentes métodos de pago. Puede usar pagos directos con tarjeta de crédito, lo que significa que sus clientes no pueden ver la página de inicio de sesión de PayPal o su resumen, todo sucede en su sitio web. Necesitas ser compatible con PCI para esto, y recomiendo usar Stripe, ya que solo necesitas SSL usando su biblioteca de JavaScript. Por otro lado, para realizar pagos a través de pagos de PayPal, toma tres pasos:

  1. Especifique la información de pago a crear un pago.
  2. Obtener aprobación de pago, redirigiendo a su cliente a PayPal para aprobar la transacción.
  3. Ejecutar el pago para capturar los fondos después de que PayPal redirige a su cliente a su sitio web.

En mi proyecto MVC, en el Servicios carpeta, he creado la clase PayPalPaymentService en la que he agregado estos métodos:

Public static Payment CreatePayment (string baseUrl, string intent) // ### Api Context // Pase un objeto 'APIContext' para autenticar // la llamada y enviar un id de solicitud único // (que garantiza la idempotencia). El SDK genera // un ID de solicitud si no pasa uno explícitamente. var apiContext = PayPalConfiguration.GetAPIContext (); // Recurso de pago var payment = new Payment () intent = intent, // 'sale' o 'authorize' payer = new Payer () payment_method = "paypal", transaction = GetTransactionsList (), redirect_urls = GetReturnUrls (baseUrl , intención); // Crear un pago utilizando un APIContext válido var createdPayment = payment.Create (apiContext); retorno creadoPago;  lista estática privada GetTransactionsList () // Una transacción define el contrato de un pago // para qué es el pago y quién lo está cumpliendo. var transactionList = nueva lista(); // La API de creación de pagos requiere una lista de transacciones; // agregar la Transacción creada a una lista transactionList.Add (new Transaction () description = "Descripción de la transacción.", invoice_number = GetRandomInvoiceNumber (), cantidad = new Amount () currency = "USD", total = "100.00" , // El total debe ser igual a la suma de envío, impuestos y subtotal. Detalles = nuevo Detalles () // Detalles: le permite especificar los detalles de un monto de pago. Impuesto = "15", envío = "10", subtotal = "75", item_list = new ItemList () items = new List() nuevo artículo () nombre = "Nombre del artículo", moneda = "USD", precio = "15", cantidad = "5", sku = "sku"); return transactionList;  Private static RedirectUrls GetReturnUrls (string baseUrl, string intent) var returnUrl = intent == "sale"? "/ Home / PaymentSuccessful": "/ Home / AuthorizeSuccessful"; // Redirigir URLs // Estas URL determinarán cómo se redirige al usuario desde PayPal // una vez que hayan aprobado o cancelado el pago. return new RedirectUrls () cancel_url = baseUrl + "/ Home / PaymentCancelled", return_url = baseUrl + returnUrl;  pago estático público ExecutePayment (string paymentId, string payerId) // ### Api Context // Pase un objeto 'APIContext' para autenticar // la llamada y enviar un id de solicitud único // (que garantiza la idempotencia). El SDK genera // un ID de solicitud si no pasa uno explícitamente. var apiContext = PayPalConfiguration.GetAPIContext (); var paymentExecution = new PaymentExecution () payer_id = payerId; var payment = new Payment () id = paymentId; // Ejecutar el pago. var executPayment = payment.Execute (apiContext, paymentExecution); pago ejecutado de vuelta; 

Hay algunos parámetros que se pasan en esta llamada:

  • Intención: Tres valores posibles: 'venta' para pagos inmediatos, 'autorizar' para autorizar un pago para capturar más tarde, o 'ordenar' para crear un pedido. Cuando llegue el autorización para un pago para capturar más tarde, tiene 3 días garantizados, aunque puede intentar capturar el pago hasta 29 días después.
  • Pagador: Origen de los fondos para este pago, método de pago que se utiliza: pago de la cartera de PayPal, débito directo del banco o tarjeta de crédito directa. 
  • Actas: Esto se utiliza para especificar la cantidad para el pago y, opcionalmente, especificar los artículos que se pagan. También puede especificar el subtotal, envío e impuestos si es necesario.
  • URL de redireccionamiento: Especifique la URL a la que PayPal redireccionará a sus clientes después de una transacción, para que pueda actualizar su base de datos y mostrar un mensaje de confirmación.

Las funciones anteriores se pueden utilizar desde su controlador de esta manera:

público IActionResult CreatePayment () var payment = PayPalPaymentService.CreatePayment (GetBaseUrl (), "sale"); return Redirect (payment.GetApprovalUrl ());  público IActionResult PaymentCancelled () // TODO: Manejar devolución de pago cancelada RedirectToAction ("Error");  público IActionResult PaymentSuccessful (cadena ID de pago, cadena token, cadena PayerID) // Ejecutar Pago var payment = PayPalPaymentService.ExecutePayment (paymentId, PayerID); volver View (); 

Como puedes ver, he creado tres acciones:

  • Crear Pago: Esta es la acción que desencadena el pago. Está haciendo una llamada a PayPal para crear el Pago, luego está redirigiendo al usuario a PayPal para aprobar la transacción.
  • Pago exitoso: Esta es la acción en la que PayPal redirige a nuestro cliente nuevamente después de un pago exitoso. En este punto, podemos ejecutar el pago para transferir los fondos a nuestra cuenta de comerciante.
  • PagoCancellado: Esta acción es donde el usuario es redirigido desde PayPal si el usuario cancela el proceso de aprobación. En este momento, probablemente querrá darle la opción al cliente para que intente nuevamente o se ponga en contacto con usted..

Autorizar un pago para capturar más tarde

Este escenario es muy similar al caso anterior. Es posible que desee utilizar este método si está intentando realizar pedidos anticipados para un producto que aún no está disponible. Los pasos para obtener este pago son:

  1. Autorizar el pago: El parámetro 'intención' para esta llamada debe ser 'autorizar'.
  2. Captura el pago: Tenga en cuenta que las autorizaciones están garantizadas hasta por 3 días, aunque puede intentar capturar un pago por hasta 29 días..

Para implementar este tipo de pago, solo he agregado un nuevo método a la clase PayPalPaymentService para capturar el pago:

CapturePayment estático público CapturePayment (string paymentId) var apiContext = PayPalConfiguration.GetAPIContext (); var payment = Payment.Get (apiContext, paymentId); var auth = payment.transactions [0] .related_resources [0] .authorization; // Especifique una cantidad para capturar. Al establecer 'is_final_capture' en verdadero, todos los fondos restantes en poder de la autorización se liberarán del instrumento de financiamiento. var captura = nueva Captura () cantidad = nueva Cantidad () moneda = "USD", total = "4.54", is_final_capture = true; // Capturar un pago autorizado mediante POSTing a // URI v1 /pagos/autorization/ permission_id ID / capture var responseCapture = auth.Capture (apiContext, capture); return responseCapture; 

Luego, desde el HomeController, he agregado dos nuevas acciones para mostrar este tipo de pago:

público IActionResult AuthorizePayment () var payment = PayPalPaymentService.CreatePayment (GetBaseUrl (), "autorize"); return Redirect (payment.GetApprovalUrl ());  público IActionResult AuthorizeSuccessful (string paymentId, string token, string PayerID) // Capture Payment var capture = PayPalPaymentService.CapturePayment (paymentId); volver View (); 
  • Autorizar el pago Es la acción que desencadena el pago. Es muy similar a la función anterior 'CreatePayment', pero estamos pasando 'autorize' como parámetro de intención en este caso.
  • Autorizar el éxito es la acción en la que su cliente será redirigido después de aprobar con éxito el pago en PayPal. En este punto, estoy capturando el pago, pero podría guardar el ID de pago en su base de datos y capturar el pago cuando necesite.

En estos ejemplos de código, por simplicidad, he codificado los valores de las variables de pago. En su aplicación real, probablemente los envolverá en métodos que toman todos esos valores como variables para que todo se pueda configurar dinámicamente y reutilizarse..

Suscripciones

Esto se denomina "Planes de facturación" en PayPal: puede crear planes de pago recurrente y suscribir a sus clientes a un plan de facturación mediante la creación de un acuerdo de facturación. Mediante la API REST de PayPal, puede crear, actualizar o eliminar planes de facturación; Esto es algo que podría usar si desea crear un panel de administración para administrar estas cosas para su negocio..

Los pasos para crear cargos recurrentes para sus clientes serían:

  1. Crear un plan de facturación. activalo. Después de crear un plan de facturación, se encuentra en un estado CREADO. Necesita activarse haciendo una solicitud de PATCH..
  2. Crear un acuerdo de facturación. y ejecutalo: La respuesta a la llamada a Crear un acuerdo de facturación incluye los enlaces a Approvión_url y Ejecutar_Url. Necesitamos obtener la aprobación para el acuerdo de facturación y luego ejecutar el acuerdo de facturación.

Planes de facturación

Crear un plan de facturación

Crea un plan de facturación que defina los periodos de facturación. Este es un resumen de los parámetros que debemos pasar para crear un plan..

  • Nombre: Nombre del plan de facturación..
  • Descripción: Descripción del plan de facturación..
  • Tipo: Los valores permitidos son 'FIJOS' para un número establecido de pagos recurrentes, o 'INFINITE' para un plan que se repite hasta que se cancela manualmente.
  • Preferencias del comerciante: Este es un objeto que especifica preferencias como la tarifa de configuración, el máximo de intentos fallidos de un pago, la URL de retorno, la URL de cancelación, la URL de notificación, donde PayPal redireccionará al usuario después de un pago.
  • Definiciones de pago: Arreglo de definiciones de pago para este plan. Normalmente esta matriz tendría una o dos definiciones de pago. Si queremos ofrecer una prueba gratuita o una prueba a un precio con descuento, entonces configuramos dos definiciones de pago. La primera será la definición del período de prueba, y la segunda será el pago regular. Las propiedades para una definición de pago son nombre, tipo (prueba o regular), frecuencia (día semana mes año), intervalo de frecuencia (Si establecemos la frecuencia en 'SEMANA' y el intervalo de frecuencia en '1', estamos definiendo un pago semanal), cantidad cobrar al cliente, y ciclos es el numero de pagos totales. Modelos de carga es especificar el costo de envío y el impuesto adicional al valor de la cantidad para el plan.

Este es un fragmento de código que muestra cómo crear un plan de facturación:

// Defina el plan y adjunte las definiciones de pago y las preferencias del comerciante. // Más información: https://developer.paypal.com/webapps/developer/docs/api/#create-a-plan var billingPlan = plan nuevo name = "Tuts + Plus", description = "Plan mensual de cursos. ", escriba =" arreglado ", // Defina las preferencias del comerciante. // Más información: https://developer.paypal.com/webapps/developer/docs/api/#merchantpreferences-object merchant_preferences = new MerchantPreferences () setup_fee = GetCurrency ("0"), // $ 0 return_url = "returnURL ", // Recuperar de config cancel_url =" cancelURL ", // Recuperar de config auto_bill_amount =" YES ", initial_fail_amount_action =" CONTINUE ", max_fail_attempts =" 0 ", payment_definitions = new List // Defina un plan de prueba que solo cobrará $ 9.99 por el primer // mes. Después de eso, el plan estándar asumirá los // meses restantes del año. new PaymentDefinition () name = "Plan de prueba", escriba = "TRIAL", frequency = "MONTH", frequency_interval = "1", cantidad = GetCurrency ("0"), // Gratis para los ciclos del 1er mes = "1 ", charge_models = nueva lista new ChargeModel () type = "TAX", amount = GetCurrency ("1.65") // Si necesitamos cobrar Impuestos, new ChargeModel () type = "SHIPPING", amount = GetCurrency ("9.99") / / Si necesitamos cobrar por el envío, // Defina el plan de pago estándar. Representará un // plan mensual por $ 19.99 USD que se cobra una vez al mes durante 11 meses. nueva Definición de pago nombre = "Plan estándar", tipo = "REGULAR", frecuencia = "MES", frecuencia_intervalo = "1", cantidad = GetCurrency ("15.00"), //> NOTA: Para los planes de tipo 'IFNINITE', los ciclos 'deben ser 0 para un objeto' REGULAR "de definición de pago '. cycles =" 11 ", charge_models = new List new ChargeModel type = "TAX", amount = GetCurrency ("2.47"), new ChargeModel () type = "SHIPPING", amount = GetCurrency ("9.99"); // Obtener configuración de PayPal var apiContext = PayPalConfiguration.GetAPIContext (); // Crear plan plan. Crear (apiContext);

Un plan de facturación recién creado está en un estado CREADO. Actívelo al estado ACTIVO para que sus clientes puedan suscribirse al plan. Para activar el plan, necesitamos hacer una solicitud de PATCH:

// Active el plan var patchRequest = new PatchRequest () new Patch () op = "replace", path = "/", value = new Plan () state = "ACTIVE"; plan.Update (apiContext, patchRequest);

Como puede ver, las bibliotecas de PayPal son un envoltorio directo sobre su API REST, lo cual es bueno, pero la API también es realmente compleja en comparación con otras como Stripe. Por este motivo, es realmente una buena opción envolver todas las comunicaciones de PayPal en objetos con API más claras y sencillas para nuestras aplicaciones. Aquí puede ver cómo se ve este código envuelto en múltiples funciones que toman parámetros:

Plan público público CreatePlanObject (cadena planName, cadena planDescription, cadena returnUrl, cadena cancelUrl, frecuencia de cadena, int frequencyInterval, decimal planPrice, decimal shippingAmount = 0, decimal taxPercentage = 0, bool trial = false, int trialLength = 0, decimal trialPrice = 0 ) // Defina el plan y adjunte las definiciones de pago y las preferencias del comerciante. // Más información: https://developer.paypal.com/docs/rest/api/payments.billing-plans/ return new Plan name = planName, description = planDescription, type = PlanType.Fixed, // Define the merchant preferencias // Más información: https://developer.paypal.com/webapps/developer/docs/api/#merchantpreferences-object merchant_preferences = new MerchantPreferences () setup_fee = GetCurrency ("1"), return_url = returnUrl, cancel_url = cancelUrl , auto_bill_amount = "YES", initial_fail_amount_action = "CONTINUE", max_fail_attempts = "0", payment_definitions = GetPaymentDefinitions (trial, trialLength, trialPrice, frequency, frequencyInterval, planPrice, shippingAmount, taxPercentage));  lista estática privada GetPaymentDefinitions (bool trial, int trialLength, decimal trialPrice, string frequency, int frequencyInterval, decimal planPrice, decimal shippingAmount, decimal taxPercentage) var paymentDefinitions = new List(); if (trial) // Defina un plan de prueba que cobrará 'trialPrice' por 'trialLength' // Después de eso, el plan estándar asumirá el control. paymentDefinitions.Add (new PaymentDefinition () name = "Trial", type = "TRIAL", frequency = frequency, frequency_interval = frequencyInterval.ToString (), cantidad = GetCurrency (trialPrice.ToString ()), ciclos = trialLength.ToString ( ), charge_models = GetChargeModels (trialPrice, shippingAmount, taxPercentage));  // Definir el plan de pago estándar. Representará una 'frecuencia' (mensual, etc.) // plan para 'planPrice' que cobra 'planPrice' (una vez al mes) para #cycles. var regularPayment = new PaymentDefinition name = "Standard Plan", type = "REGULAR", frequency = frequency, frequency_interval = frequencyInterval.ToString (), amount = GetCurrency (planPrice.ToString ()), //> NOTE: For 'IFNINITE 'planes tipo', 'ciclos' debe ser 0 para un objeto 'REGULAR "Definición de pago'. cycles =" 11 ", charge_models = GetChargeModels (trialPrice, shippingAmount, taxPercentage); paymentDefinitions.Add (regularPayment); return paymentDefinitions; Lista GetChargeModels (plan decimal, precio de envío decimal, porcentaje de impuestos decimal) // Crear el plan de facturación var chargeModels = nueva lista(); if (shippingAmount> 0) chargeModels.Add (new ChargeModel () type = "SHIPPING", monto = GetCurrency (shippingAmount.ToString ()));  if (taxPercentage> 0) chargeModels.Add (new ChargeModel () type = "TAX", cantidad = GetCurrency (String.Format ("0: f2", planPrice * taxPercentage / 100))));  devolver chargeModels; 

Actualizar plan de facturación

Puede actualizar la información de un plan de facturación existente realizando una solicitud de "PATCH". Esta es una función que envuelve esa llamada:

public static void UpdateBillingPlan (string PlanId, string path, valor del objeto) // Tokens de autenticación de PayPal var apiContext = PayPalConfiguration.GetAPIContext (); // Recuperar plan var plan = Plan.Get (apiContext, planId); // Activar el plan var patchRequest = new PatchRequest () new Patch () op = "replace", path = path, value = value; plan.Update (apiContext, patchRequest); 

Para actualizar la descripción del plan de facturación, podemos llamar a esta función y pasar los parámetros correctos:

UpdateBillingPlan (planId: "P-5FY40070P6526045UHFWUVEI", ruta: "/", valor: nuevo Plan description = "new description");

Eliminar un plan de facturación

Idealmente, cuando no quiera aceptar nuevos clientes a un plan de facturación, querrá actualizarlo al estado "INACTIVO". Esto no afectará los acuerdos de facturación existentes en este plan. Esto se puede hacer simplemente llamando a la función UpdateBillingPlan:

UpdateBillingPlan (planId: "P-5FY40070P6526045UHFWUVEI", ruta: "/", valor: nuevo Plan state = "INACTIVE");

acuerdos de facturación

Crear un acuerdo de facturación

Una vez que haya creado uno o más planes de facturación, desea comenzar a que los clientes se suscriban a sus planes de suscripción. Para hacer esto, debe recopilar sus datos de cliente y realizar una solicitud a PayPal. Para poder probar esta funcionalidad, he agregado varias acciones al HomeController:

public IActionResult Subscribe () var plan = PayPalSubscriptionsService.CreateBillingPlan ("Tuts + Plan", "Plan de prueba para este artículo", GetBaseUrl ()); var abono = PayPalSubscriptionsService.CreateBillingAgreement (plan.id, nuevo PayPal.Api.ShippingAddress city = "London", line1 = "line 1", postal_code = "SW1A 1AA", country_code = "GB", "Pedro Alonso", "Tuts +", DateTime.Now); return Redirect (abono.GetApprovalUrl ());  público IActionResult SubscribeSuccess (token de cadena) // Ejecutar acuerdo aprobado PayPalSubscriptionsService.ExecuteBillingAgreement (token); volver View ();  public IActionResult SubscribeCancel (token de cadena) // TODO: Manejar devolución de pago cancelada RedirectToAction ("Error"); 
  • Suscribir: Esta es la primera acción que se llama. Se está creando un plan de facturación de prueba y luego se crea un acuerdo de facturación (suscripción) a ese plan, y el usuario se redirige a PayPal para confirmar el pago..
  • Suscribir éxito: Esta acción es la que se usa como 'URL de retorno' después de una suscripción exitosa. El identificador de token de acuerdo se pasa en la cadena de consulta, y usamos este token para ejecutar el acuerdo de facturación y hacerlo activo.
  • SuscribirCancelar: Esta acción es la utilizada como 'Cancelar URL'. Si, por algún motivo, el pago falla, o si su cliente cancela el pago en PayPal, el usuario pasa a esta acción y usted debe manejar esto. Tal vez ofrezca la opción de intentarlo de nuevo..

Como puede ver en el fragmento de código anterior, he incluido la mayor parte de la funcionalidad en varios métodos. El primero es "CreateBillingPlan" que se explicó en la sección anterior. El segundo es "CreateBillingAgreement" que se utiliza para suscribir a un usuario a un plan:

acuerdo estático público CreateBillingAgreement (string PlanId, ShippingAddress shippingAddress, string string, description, DateTime startDate) // Tokens de autenticación de PayPal var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () name = name, description = description, start_date = startDate.ToString ("yyyy-MM-ddTHH: mm: ss") + "Z", payer = new Payer () payment_method = "paypal ", plan = new Plan () id = planId, shipping_address = shippingAddress; var createdAgreement = agreement.Create (apiContext); volver creado Acuerdo; 

El tercer método es "ExecuteBillingAgreement". Después de una aprobación exitosa de la suscripción, usamos el token devuelto para activar la suscripción:

public static void ExecuteBillingAgreement (token de cadena) // Tokens de autenticación de PayPal var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () token = token; var executeAgreement = agreement.Execute (apiContext); 

Suspender un acuerdo de facturación

Utilice este método para suspender un acuerdo:

public static void SuspendBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.Suspend (apiContext, new AgreementStateDescriptor () note = "Suspendiendo el acuerdo"); 

Reactivar un acuerdo de facturación

Este es realmente similar al anterior:

public static void ReactivateBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.ReActivate (apiContext, new AgreementStateDescriptor () note = "Reactivating the agreement"); 

Cancelar un acuerdo de facturación

Utilice esta función para cancelar un plan:

public static void CancelBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.Cancel (apiContext, new AgreementStateDescriptor () note = "Cancelando el acuerdo"); 

Actualizar un acuerdo de facturación

Esta opción es muy limitada, y lo que esperaría de esta llamada es la posibilidad de cambiar el plan de suscripción, para actualizar o degradar a un cliente. Esto no se admite en una sola llamada, ya que está en Stripe. Debe manejar este escenario cancelando el acuerdo actual y creando uno nuevo para actualizaciones o degradaciones. No es ideal, pero podría cambiar en el futuro..

Conclusión

Esta es una descripción general de las funciones más comunes que las personas utilizan para integrarse con PayPal. Su API es mucho más grande que los métodos de integración que se explican en este artículo. También puede emitir reembolsos y reembolsos parciales, y tienen muchas opciones diferentes para los casos perimetrales en las muestras que se tratan en este artículo. Si está interesado en obtener más detalles sobre cualquier integración específica, deje una sugerencia en los comentarios..