Skip to content
This repository has been archived by the owner on Mar 19, 2021. It is now read-only.

5 Operaciones Patpass

DarkGhostHunter edited this page Jan 2, 2019 · 2 revisions

Operaciones Patpass

Tabla de Contenido

Introducción

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.

Crear una 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

¿Subscripción o Servicio (Plan)?

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.

Confirmar una Subscripción

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();

Confirmar una Subscripción por separado

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";

Notificación de Pago de Subscripción

{ WIP }

Cancelar una Subscripción

{ WIP }

Extender una Subscripción

{ WIP }

Renovar una Subscripción

{ WIP }


⬅ 4 - Operaciones-Onepay | 6 - Outroducción ➡