Lenguaje PHP

Pagos recurrentes con PayPal PHP

Cómo administrar pagos recurrentes mediante suscripciones de PayPal en PHP

Pagos recurrentes con PayPal PHP. Las suscripciones de PayPal permiten habilitar y administrar pagos recurrentes para su servicio que este ofreciendo. Con este tipo de pago, PayPal ofrece opciones para establecer el intervalo de facturación, la frecuencia, la fecha límite y más.

Esto enviará facturas automáticas al cliente por acceder a su servicio. En este tutorial, veremos cómo administrar el pago recurrente usando la suscripción de PayPal usando PHP.

Pagos recurrentes con PayPal PHP
Pagos recurrentes con PayPal PHP

¿Cómo funciona los Pagos recurrentes con PayPal PHP?

La integración de la suscripción de PayPal funciona en base de 4 pasos y los pasos son:

  • Crear y activar plan de facturación
  • Crear acuerdo de facturación
  • Redirigir al formulario de aprobación del cliente
  • Ejecutar el acuerdo de facturación

El proceso de la suscripción será simple. Sin embargo, tenemos que muestra un botón de suscripción en la aplicación web a través de la cual está promocionando su producto o servicios con pagos recurrentes.

Crear un servicio PHP para invocar el código de pago de la suscripción para crear y activar / aprobar el plan de facturación y el acuerdo.

Cuando el cliente hace clic en el botón Suscripción, se llamará al servicio para crear el plan de facturación y el acuerdo de facturación. Tras la creación exitosa del acuerdo de facturación, se mostrará al cliente para obtener su aprobación.

Uso de librerías

En este ejemplo, he implementado pagos recurrentes accediendo a la API REST mediante el SDK PHP de PayPal. Descargue la biblioteca de SDK más reciente y cárguela en la carpeta del proveedor de su aplicación. Anteriormente, hemos visto cómo integrar el pago único mediante la pasarela de pago de PayPal.

En un artículo anterior hemos almacenado en MySQL las sucripciones.

Pasos para crear pagos recurrentes con PayPal PHP

Primer paso: Crear un plan de facturación

En el proceso de integración del pago recurrente mediante suscripciones de PayPal, este es el primer paso para crear el plan de facturación. Este plan incluye detalles del plan, definición de pago y más. Según la especificación agregada con este plan, el cliente recibirá facturas por acceder a los servicios suscritos.

El siguiente código muestra cómo crear un plan especificando las opciones de pago, las preferencias del comerciante y más. En este código de ejemplo, configuré el nombre, la descripción y el tipo del plan de facturación con la referencia del objeto del plan. Luego, especifico la definición de pago y establezco modelos de cargo para el pago.

<?php
use PayPal\Api\ChargeModel;
use PayPal\Api\Currency;
use PayPal\Api\MerchantPreferences;
use PayPal\Api\PaymentDefinition;
use PayPal\Api\Plan;
use PayPal\Api\Patch;
use PayPal\Api\PatchRequest;
use PayPal\Common\PayPalModel;

// Create a new billing plan
if (! empty($_POST["plan_name"]) && ! empty($_POST["plan_description"])) {
$plan = new Plan();
$plan->setName($_POST["plan_name"])
->setDescription($_POST["plan_description"])

// Set billing plan definitions
$paymentDefinition = new PaymentDefinition();
$paymentDefinition->setName('Regular Payments')
->setType('REGULAR')
->setFrequency('DAY')
->setFrequencyInterval('1')
->setCycles('3')
->setAmount(new Currency(array(
'value' => 3,
'currency' => 'USD'
)));

// Set charge models
$chargeModel = new ChargeModel();
$chargeModel->setType('SHIPPING')->setAmount(new Currency(array(
'value' => 1,
'currency' => 'USD'
)));
$paymentDefinition->setChargeModels(array(
$chargeModel
));

// Set merchant preferences
$merchantPreferences = new MerchantPreferences();
$merchantPreferences->setReturnUrl('http://<host>/pagos-recurrentes-con-paypal-php/index.php?status=success')
->setCancelUrl('http://<host>/pagos-recurrentes-con-paypal-php/index.php?status=cancel')
->setAutoBillAmount('yes')
->setInitialFailAmountAction('CONTINUE')
->setMaxFailAttempts('0')
->setSetupFee(new Currency(array(
'value' => 1,
'currency' => 'USD'
)));

$plan->setPaymentDefinitions(array(
$paymentDefinition
));
$plan->setMerchantPreferences($merchantPreferences);

try {
$createdPlan = $plan->create($apiContext);
} catch (PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getCode();
echo $ex->getData();
die($ex);
} catch (Exception $ex) {
die($ex);
}
}
?>

Activar plan de facturación

Después de crear el plan de facturación, el objeto del plan se utiliza para obtener las propiedades para activar el plan. Es necesario activar un plan de facturación para preparar el acuerdo de facturación. El siguiente código muestra cómo activar un plan creado parcheando las instancias de la matriz del modelo de PayPal.

try {
$patch = new Patch();
$value = new PayPalModel('{"state":"ACTIVE"}');
$patch->setOp('replace')
->setPath('/')
->setValue($value);
$patchRequest = new PatchRequest();
$patchRequest->addPatch($patch);
$createdPlan->update($patchRequest, $apiContext);
$patchedPlan = Plan::get($createdPlan->getId(), $apiContext);

require_once "createPHPTutorialSubscriptionAgreement.php";
} catch (PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getCode();
echo $ex->getData();
die($ex);
} catch (Exception $ex) {
die($ex);
}

Segundo paso: crear un acuerdo de facturación

Una vez activado el Plan de Facturación, se enviará la solicitud para preparar el acuerdo de facturación. Se supone que debe mostrarse al cliente que desea suscribirse para acceder a los servicios de su producto o aplicación.

Se debe crear la instancia del acuerdo de facturación para establecer el plan y la información del pagador para preparar el acuerdo. En este código, después de establecer el nombre del acuerdo, la descripción, el ID del plan activado se establece en el objeto del acuerdo.

También incluye detalles del pagador y del envío. Antes de llamar a la acción de creación, todas las especificaciones se establecen como una matriz de objetos.

<?php
use PayPal\Api\Agreement;
use PayPal\Api\Payer;
use PayPal\Api\ShippingAddress;
use PayPal\Api\Plan;

// Create new agreement
$startDate = date('c', time() + 3600);
$agreement = new Agreement();
$agreement->setName('PHP Tutorial Plan Subscription Agreement')
->setDescription('PHP Tutorial Plan Subscription Billing Agreement')
->setStartDate($startDate);

// Set plan id
$plan = new Plan();
$plan->setId($patchedPlan->getId());
$agreement->setPlan($plan);

// Add payer type
$payer = new Payer();
$payer->setPaymentMethod('paypal');
$agreement->setPayer($payer);

// Adding shipping details
$shippingAddress = new ShippingAddress();
$shippingAddress->setLine1('111 First Street')
->setCity('Saratoga')
->setState('CA')
->setPostalCode('95070')
->setCountryCode('US');
$agreement->setShippingAddress($shippingAddress);

try {
// Create agreement
$agreement = $agreement->create($apiContext);

// Extract approval URL to redirect user
$approvalUrl = $agreement->getApprovalLink();

header("Location: " . $approvalUrl);
exit();
} catch (PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getCode();
echo $ex->getData();
die($ex);
} catch (Exception $ex) {
die($ex);
}
?>

Tercer paso: Redirigir a la aprobación del cliente

En la creación exitosa del acuerdo de facturación, el objeto del acuerdo contendrá el enlace de aprobación. Esta es la URL a la que se debe redirigir al cliente para aprobar el acuerdo de facturación.

En la página de aprobación del cliente, PayPal mostrará la opción de aceptar y pagar para acceder a los servicios. Al hacer clic en el botón Aceptar, el cliente ha sido considerado suscriptor hasta la fecha límite de suscripción, si la hubiera.

Pagar de forma recurrente
Pagar de forma recurrente

Cuarto paso: Ejecutar el pago

Cuando el cliente aprueba el acuerdo y desea continuar con el pago, se llamará a la devolución de llamada como se especifica en el plan de facturación.

Con esta URL de devolución de llamada, el token se enviará con la cadena de consulta. Al usar este token, se ejecutará el acuerdo o suscripción para procesar el pago.

if (!empty($_GET['status'])) {
if($_GET['status'] == "success") {
$token = $_GET['token'];
$agreement = new \PayPal\Api\Agreement();

try {
// Execute agreement
$agreement->execute($token, $apiContext);
} catch (PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getCode();
echo $ex->getData();
die($ex);
} catch (Exception $ex) {
die($ex);
}
} else {
echo "user canceled agreement";
}
exit;
}

Página de inicio de ejemplo de PHP de suscripciones a Paypal con opción de suscripción

El siguiente código HTML es para mostrar la opción de suscripción a los clientes. El cuadro de suscripción mostrará los detalles sobre los servicios a los que el cliente puede acceder después de una suscripción exitosa.

Este cuadro contiene un formulario HTML con el título y la descripción del plan. Al hacer clic en el botón Suscribirse, los detalles del plan se publicarán en PHP para procesar los pasos que hemos discutido anteriormente.

En el código PHP, la solicitud de autenticación de la API de PayPal se enviará antes de crear el plan de facturación y el acuerdo para ser aprobado por el cliente.

<div id="subscription-plan">
<div class="plan-info">PHP jQuery Tutorials</div>
<div class="plan-desc">Read tutorials to learn PHP.</div>
<div class="price">$49 / month</div>

<div>
<form method="post">

<input type="hidden" name="plan_name"
value="PHP jQuery Tutorials" /> <input type="hidden"
name="plan_description"
value="Tutorials access to learn PHP with simple examples." />
<input type="submit" name="subscribe" value="Subscribe"
class="btn-subscribe" />
</form>
</div>
</div>

Código PHP para implementar el pago de cancelación en la suscripción

Este código PHP se ejecutará al enviar el formulario de suscripción con los detalles del plan de facturación. Este código obtiene el objeto de contexto de la API de PayPal mediante la autenticación con las credenciales de la API. Reemplace CLIENT_ID y CLIENT_SECRET que obtuvo al crear la aplicación API REST de PayPal. Ya hemos visto esto al implementar PayPal Checkout.

<?php
require 'vendor/PayPal-PHP-SDK/autoload.php';

$apiContext = new \PayPal\Rest\ApiContext(new \PayPal\Auth\OAuthTokenCredential('CLIENT_ID', 'CLIENT_SECRET'));

if (! empty($_POST["subscribe"])) {
require_once "./Service/createPHPTutorialSubscriptionPlan.php";
}
?>

Salida de ejemplo de suscripciones PHP PayPal

La siguiente captura de pantalla muestra el resultado de la página de destino que se crea con la opción de suscripción.

Suscripción aprobada

Una vez realizada el proceso de suscripción, pueden ingresar a su cuenta empresa de PayPal y verificar si la recurrencia ha sido registrada correctamente tal como ven en la imagen.

Suscripcion activa con paypal
Suscripcion activa con paypal

Conclusión

En este artículo hemos aprendido a generar pagos recurrentes usando la pasarela de pagos PayPal con el lenguaje PHP.

Además, hemos empleado una librería para realizar el proceso de recurrencia.

Hemos usado un formulario que muestra un producto o servicio con el precio para que el usuario final pueda dar un clic al botón para poder iniciar el proceso de suscripción.

El ejemplo es algo sencillo, pero se puede integrar nuevas funciones como almacenar en base de datos, personalizar respuestas, etc.

Descargar

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Un comentario

  1. Hola, soy aficionado al mundo de la programación, pero solo eso, aficionado, estoy buscando una cuenta regresiva que al acabar muestre el enlace de descarga, pero con un aspecto tipo botón….¿que cuesta ese comando? Gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba