-
-
Notifications
You must be signed in to change notification settings - Fork 2
5 Operaciones Patpass
Tabla de Contenido
- Introducción
- Crear una Subscripción
- Confirmar una Subscripción
- Notificación de Pago de Subscripción
- Cancelar una Subscripción
- Extender una Subscripción
- Renovar una Subscripción
- Outro
Esta sección es un trabajo en progreso. De hecho, el Wrapper todavía no soporta Patpass.
Patpass es el mecanismo con el cual podrás cobrar a tus usuarios una subscripción de monto fijo, mes a mes.
La operación es muy simple: si el cliente se subscribe a tu servicio, deberá pagar el primer mes de subscripción con Patpass para comenzar. Si el pago fue exitoso, los siguientes pagos se realizarán automáticamente mes a mes, notificados a ambas partes cada vez que se realicen o exista un error.
A propósito, aquí puedes usar UF para tu subscripción.
Para crear una subscripción, necesitaremos el email del usuario, teléfono, RUT o alguna especie de identificador, y el propio identificador de la subscripción. Esto último es necesario para vincular el pago a la subscripción en tus sistemas, sino nunca sabrás si esa subscripción fue pagada o no.
Por último, tendrás que ingresar cuándo la subscripción expirará. Si no ingresas uno, se entenderá que la subscripción no tendrá término.
<?php
namespace App;
use DarkGhostHunter\TransbankApi\Transbank;
use App;
$patpass = Transbank::make('integration')->patpass();
// Crea la subscripción, pero no la envíes todavía
$subscription = $patpass->makeSubscription([
'buyOrder' => 'app-order#65468798',
'sessionId' => 'app-session-id-1',
'amount' => 19990,
// De aquí para abajo es la información para la subscripción vía Patpass
'serviceId' => 'app-subscription#213546654',
'cardHolderId' => '11.111.111-1',
'cardHolderName' => 'Juan Armando',
'cardHolderLastName1' => 'Pérez',
'cardHolderLastName2' => 'Rojas',
'cardHolderMail' => 'juanperez@email.com',
'cellPhoneNumber' => 56987654321,
'expirationDate' => '20190101', // YYYYMMDD
]);
// Ahora la enviaremos a Patpass
$result = $subscription->getResult();
// El resultado entregara la URL a la que debemos redirigir al usuario
return App::redirectTo($result->getWebpayRedirect());
Terminado esto, el cliente pasará a Patpass donde pagará el primer ciclo de la subscripción. Luego Patpass redirigirá al usuario a nuestro sitio donde tendremos que confirmar que todo fue exitoso
Como verás en tu subscripción, podrás colocar como serviceId
el identificador de tu subscripción o servicio (plan). Debes elegir una dependiendo de cómo sea tu sistema.
- Si un cliente puede tener múltiples subscripciones a un mismo servicio, indica el identificador de subscripción.
- Si un cliente puede tener sólo una subscripción a un servicio, indica el identificador del servicio (plan).
De esta forma, cada vez que Patpass señale a tu Servidor el estado de pago del siguiente ciclo, podrás también adquirir la información de la subscripción o plan, y hacer lo que estimes necesario dependiendo del resultado: extenderla, borrarla, deshabilitarla, etcétera.
Ahora tenemos que verificar si la primera transacción fue exitosa o no con isSuccess()
, usando el token que nos envía Patpass.
<?php
// Consige la transacción desde Webpay
$subscription = $patpass->confirmSubscription(
$request->input('token_ws')
);
// Si la transacción fue un éxito, avisamos
if ($subscription->isSuccess()) {
return "Te has subscrito exitosamente a nuestro servicios.";
}
// Como la transacción no fue un éxito, devolveremos el error
return "Ocurrió un error subscribiéndote a nuestro servicio: \n" .
$subscription->getErrorForHumans();
Por defecto, confirmSubscription()
obtiene el resultado de la subscripción y confirma automáticamente. Sin embargo, con Patpass, también puedes obtener el resultado de la transacción y confirmar por separado, tal como con una Transacción Webpay Normal.
Esto te puede ser útil, por ejemplo, para revisar en última instancia si hay suficientes cupos para la subscripción, y no confirmar la subscripción si ya no hay. Como con Webpay, tienes 30 segundos para confirmar, sino la subscripción no tendrá efecto y ningún pago se realizará.
<?php
use Transbank\Werapper\Transbank;
use App\Database\Subscription;
$patpass = Transbank::make('integration')->patpass();
$token = $request->input('token_ws');
$subscription = $patpass->getSubscription($token);
// La subscriptión fue completada con éxito, excepto la confirmación final
if ($subscription->isSuccess()) {
// Veamos si hay cupos. Esto es sólo un ejemplo que mágicamente nos da TRUE o FALSE
$hasFreeSpots = Subscription::get($subscription->serviceId)->hasFreeSpots();
// Si hay cupos, confirmaremos
if ($hasFreeSpots && $patpass->acknowledgeSubscription($token)) {
return "La transacción $subscription->buyOrder fue un éxito y tus productos van en camino.";
}
// Caso contrario, no hay cupos, por lo que le daremos la mala noticia :(
return "El plan para tu subscripción $subscription->buyOrder ya no tiene cupos. ¡Debes subscribirte más rápido!";
}
// La subscripción no fue completada, así que mostraremos el error
return "Hubo un error procesando la subscripción $subscription->buyOrder";
{ WIP }
{ WIP }
{ WIP }
{ WIP }