PatPass
Patpass ComercioREST
Crear una suscripción
Para crear una transacción PatPass Comercio que registre una suscripción, lo primero que necesitas es una instancia de WebpayPatpassComercio
con la Configuration
que incluye el código de comercio y el Api Key
a usar.
Una forma fácil de comenzar es utilizar la configuración para pruebas que viene incluida en el SDK.
import cl.transbank.patpass.PatpassComercio;
import cl.transbank.patpass.model.PatpassComercioInscriptionStartResponse;
import cl.transbank.patpass.model.PatpassComercioTransactionStatusResponse;
// Versión 3.x del SDK
PatpassComercio.Inscription inscription = new PatpassComercio.Inscription(new PatpassOptions(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, PatpassComercioIntegrationType.TEST));
// Versión 2.x del SDK
PatpassCommercio = new PatpassOptions();
use Transbank\Patpass\Options;
use Transbank\Patpass\PatpassComercio;
$commerceCode = "codigo de comercio en String";
$apiKey = "Api Key en String";
$integrationType = "TEST / LIVE dependiendo de tu ambiente de integracion";
PatpassComercio::setCommerceCode($commerceCode);
PatpassComercio::setApiKey($apiKey);
PatpassComercio::setIntegrationType($integrationType);
using Transbank.Common;
using Transbank.Patpass.PatpassComercio;
// Versión 4.x del SDK
var inscription = new Inscription(new Options(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, PatpassComercioIntegrationType.Test));
// Versión 3.x del SDK
PatpassComercio.CommerceCode = "codigo de comercio en String";
PatpassComercio.ApiKey = "Api Key en String";
PatpassComercio.IntegrationType = "TEST / LIVE dependiendo de tu ambiente de integracion";
## Versión 2.x del SDK
@inscription = Transbank::Patpass::PatpassComercio::Inscription.new(::Transbank::Common::IntegrationCommerceCodes::PATPASS_COMERCIO, ::Transbank::Common::IntegrationApiKeys::PATPASS_COMERCIO, :integration)
## Versión 3.x del SDK
ins = Inscription(PatpassComercioOptions(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, IntegrationType.TEST))
# ...
Te recomendamos encapsular estas asignaciones en una función para que puedas reutilizarlas en los demás métodos.
Una vez este preparado el ambiente y la integración, puedes iniciar la transacción sin problemas.
import cl.transbank.patpass.PatpassComercio;
import cl.transbank.patpass.model.PatpassComercioInscriptionStartResponse;
import cl.transbank.patpass.model.PatpassComercioTransactionStatusResponse;
String url = request.getRequestURL().toString().replace("start","end-subscription");
String name = "nombre";
String firstLastName = "apellido";
String secondLastName = "sapellido";
String rut = "14140066-5";
String serviceId = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));;
String finalUrl = request.getRequestURL().toString().replace("start","voucher-generated");
double maxAmount = 1500;
String phoneNumber = "123456734";
String mobileNumber = "123456723";
String patpassName = "nombre del patpass";
String personEmail = "otromail@persona.cl";
String commerceEmail = "otrocomercio@comercio.cl";
String address = "huerfanos 101";
String city = "Santiago";
// Versión 3.x del SDK
PatpassComercio.Inscription inscription = new PatpassComercio.Inscription(new PatpassOptions(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, PatpassComercioIntegrationType.TEST));
final PatpassComercioInscriptionStartResponse response = inscription.start(url,
name,
firstLastName,
secondLastName,
rut,
serviceId,
finalUrl,
maxAmount,
phoneNumber,
mobileNumber,
patpassName,
personEmail,
commerceEmail,
address,
city);
// Versión 2.x del SDK
final PatpassComercioInscriptionStartResponse response = PatpassComercio.Inscription.start(url,
name,
firstLastName,
secondLastName,
rut,
serviceId,
finalUrl,
maxAmount,
phoneNumber,
mobileNumber,
patpassName,
personEmail,
commerceEmail,
address,
city);
use Transbank\Patpass\Options;
use Transbank\Patpass\PatpassComercio;
$returnUrl = "https://callback_url/resultado/de/la/transaccion";
$name = "Nombre";
$lastname1 = "Primer Apellido";
$lastname2 = "Segundo Apellido";
$rut = "11111111-1";
$serviceId = "Identificador del servicio unico de suscripción";
$finalUrl = "https://callback/final/comprobante/transacción";
$maxAmount = 10000; # monto máximo de la suscripción
$telephone = "numero telefono fijo de suscrito";
$mobilePhone = "numero de telefono móvil de suscrito";
$patpassName = "Nombre asignado a la suscripción";
$clientEmail = "Correo de suscrito";
$commerceEmail = "Correo de comercio";
$address = "Dirección de Suscrito";
$city = "Ciudad de suscrito";
$response = PatpassComercio\Inscription::Start(
$returnUrl,
$name,
$lastname1,
$lastname2,
$rut,
$serviceId,
$finalUrl,
$maxAmount,
$telephone,
$mobilePhone,
$patpassName,
$clientEmail,
$commerceEmail,
$address,
$city
);
using Transbank.Patpass.PatpassComercio;
// ...
var returnUrl = "https://callback_url/resultado/de/la/transaccion";
var name = "Nombre";
var lastname1 = "Primer Apellido";
var lastname2 = "Segundo Apellido";
var rut = "11111111-1";
var serviceId = "Identificador del servicio unico de suscripción";
var finalUrl = "https://callback/final/comprobante/transacción";
var maxAmount = 10000; # monto máximo de la suscripción
var telephone = "numero telefono fijo de suscrito";
var mobilePhone = "numero de telefono móvil de suscrito";
var patpassName = "Nombre asignado a la suscripción";
var clientEmail = "Correo de suscrito";
var commerceEmail = "Correo de comercio";
var address = "Dirección de Suscrito";
var city = "Ciudad de suscrito";
// Versión 4.x del SDK
var inscription = new Inscription(new Options(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, PatpassComercioIntegrationType.Test));
var result = inscription.Start(
url: url,
name: name,
lastName: f_lastname,
secondLastName: s_lastname,
rut: rut,
serviceId: service_id,
finalUrl: final_url,
maxAmount: max_amount,
phone: phone_number,
cellPhone: mobile_number,
patpassName: patpass_name,
personEmail: client_email,
commerceEmail: commerce_email,
address: address,
city: city);
// Versión 3.x del SDK
var response = Inscription.Start(
returnUrl,
name,
lastname1,
lastname2,
rut,
serviceId,
finalUrl,
maxAmount,
telephone,
mobilePhone,
patpassName,
clientEmail,
commerceEmail,
address,
city
);
@url = "https://callback_url/resultado/de/la/transaccion"
@name = "Nombre"
@first_last_name = "Primer Apellido"
@second_last_name = "Segundo Apellido"
@rut = "11111111-1"
@service_id = "Identificador del servicio unico de suscripción"
@final_url = "https://callback/final/comprobante/transacción"
@max_amount = 10000; # monto máximo de la suscripció
@phone_number = "numero telefono fijo de suscrito"
@mobile_number = "numero de telefono móvil de suscrito"
@patpass_name = "Nombre asignado a la suscripción"
@person_email = "Correo de suscrito"
@commerce_email = "Correo de comercio"
@address = "Dirección de Suscrito"
@city = "Ciudad de suscrito"
## Versión 2.x del SDK
@inscription = Transbank::Patpass::PatpassComercio::Inscription.new()
@resp = @inscription.start(
@url,
@name,
@first_last_name,
@second_last_name,
@rut,
@service_id,
@final_url,
@max_amount,
@phone_number,
@mobile_number,
@patpass_name,
@person_email,
@commerce_email,
@address,
@city
)
## Versión 1.x del SDK
@resp = Transbank::Patpass::PatpassComercio::Inscription::start(
url: @url,
name: @name,
first_last_name: @first_last_name,
second_last_name: @second_last_name,
rut: @rut,
service_id: @service_id,
final_url: @final_url,
max_amount: @max_amount,
phone_number: @phone_number,
mobile_number: @mobile_number,
patpass_name: @patpass_name,
person_email: @person_email,
commerce_email: @commerce_email,
address: @address,
city: @city
)
## Versión 3.x del SDK
from transbank.patpass_comercio.inscription import Inscription
## Versión 2.x del SDK
from transbank.patpass_comercio.inscription import Inscription
return_url = "https://callback_url/resultado/de/la/transaccion"
name = "Nombre"
first_last_name = "Primer Apellido"
second_last_name = "Segundo Apellido"
rut = "11111111-1"
service_id = "Identificador del servicio unico de suscripción"
final_url = "https://callback/final/comprobante/transacción"
max_amount = 10000; # monto máximo de la suscripció
phone_number = "numero telefono fijo de suscrito"
mobile_number = "numero de telefono móvil de suscrito"
patpass_name = "Nombre asignado a la suscripción"
person_email = "Correo de suscrito"
commerce_mail = "Correo de comercio"
address = "Dirección de Suscrito"
city = "Ciudad de suscrito"
## Versión 3.x del SDK
ins = Inscription(PatpassComercioOptions(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, IntegrationType.TEST))
resp = ins.start(return_url, name, first_last_name, second_last_name, rut, service_id, None,
max_amount, phone_number, mobile_number, patpass_name,
person_email, commerce_mail, address, city)
## Versión 2.x del SDK
resp = Inscription.start(return_url, name, first_last_name, second_last_name, rut, service_id, final_url,
max_amount, phone_number, mobile_number, patpass_name,
person_email, commerce_mail, address, city)
Confirmar suscripción
Para confirmar la suscripción se debe enviar el token generado en la respuesta a la url tambien generada en la respuesta con el metodo post en un formulario.
<form action="${model.url_webpay}" method="post" name="tokenForm">
<input type="hidden" name="tokenComercio" value="${model.tbk_token}">
<input type="submit" class="btn btn-success" value="Start Patpass comercio">
</form>
<form method="POST" action="$res['url']">
<input type="hidden" name="tokenComercio" value="$res['token']" />
<input type="submit" value="Finalizar La Inscripcion" />
</form>
<form method="POST" action="@ViewBag.Url">
<input type="hidden" name="tokenComercio" value="@ViewBag.Token" />
<input type="submit" value="Finalizar La Inscripcion" />
</form>
<form action="<%= @resp.url %>" method="post">
<input type="hidden" name="tokenComercio" value="<%= @resp.token %>">
<button type="submit">Finalizar La Inscripcion</button>
</form>
<form action="" method="POST">
<input type="hidden" name="tokenComercio" value="">
<input type="submit" value="Finalizar La Inscripcion">
</form>
Estado de la suscripción
Una vez que el tarjetahabiente ha pagado (o declinado, o ha ocurrido un error), Webpay retornará el control vía POST a la URL que indicaste en el returnUrl. Recibirás también el parámetro j_token
que te permitirá conocer el resultado de la transacción:
// Versión 3.x del SDK
import cl.transbank.patpass.responses.PatpassComercioTransactionStatusResponse;
PatpassComercio.Inscription inscription = new PatpassComercio.Inscription(new PatpassOptions(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, PatpassComercioIntegrationType.TEST));
final PatpassComercioTransactionStatusResponse response = inscription.status(token);
// Versión 2.x del SDK
import cl.transbank.patpass.model.PatpassComercioTransactionStatusResponse;
final PatpassComercioTransactionStatusResponse response = PatpassComercio.Transaction.status(token);
use Transbank\Patpass\PatpassComercio;
$response = PatpassComercio\Inscription::Status($token);
using Transbank.Patpass.PatpassComercio;
var token = Request.Form["token_ws"];
// Versión 4.x del SDK
var inscription = new Inscription(new Options(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, PatpassComercioIntegrationType.Test));
var result = inscription.Status(token);
// Versión 3.x del SDK
var result = Inscription.Status(token);
@req = params.as_json
@token = @req['j_token']
## Versión 2.x del SDK
@inscription = Transbank::Patpass::PatpassComercio::Inscription.new()
@resp = @inscription.status(token: @token)
## Versión 1.x del SDK
@resp = Transbank::Patpass::PatpassComercio::Inscription::status(token: @token)
## Versión 3.x del SDK
from transbank.patpass_comercio.inscription import Inscription
## Versión 2.x del SDK
from transbank.patpass_comercio.inscription import Inscription
token = request.form.get("tokenComercio")
## Versión 3.x del SDK
ins = Inscription(PatpassComercioOptions(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, IntegrationType.TEST))
resp = ins.status(token)
## Versión 2.x del SDK
resp = Inscription.status(token)
Credenciales y Ambiente
Las credenciales de PatPass Comercio se configuran de la siguiente forma:
import cl.transbank.common.IntegrationType;
import cl.transbank.patpass.PatpassComercio;
//...
// Versión 3.x del SDK
PatpassComercio.Inscription inscription = new PatpassComercio.Inscription(new PatpassOptions(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, PatpassComercioIntegrationType.TEST));
// Versión 2.x del SDK
PatpassComercio.setIntegrationType(IntegrationType.TEST);
PatpassComercio.setApiKey("******");
PatpassComercio.setCommerceCode("******");
use Transbank\Patpass\PatpassComercio;
//...
PatpassComercio::configureForTesting();
using Transbank.Patpass.PatpassComercio;
//..
// Versión 4.x del SDK
var inscription = new Inscription(new Options(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, PatpassComercioIntegrationType.Test));
// Versión 3.x del SDK
Inscription.IntegrationType = PatpassComercioIntegrationType.Test;
Inscription.CommerceCode = "*******";
Inscription.ApiKey = "*******";
@inscription = Transbank::Patpass::PatpassComercio::Inscription.new(
::Transbank::Common::IntegrationCommerceCodes::PATPASS_COMERCIO,
::Transbank::Common::IntegrationApiKeys::PATPASS_COMERCIO, :integration)
ins = Inscription(PatpassComercioOptions(IntegrationCommerceCodes.PATPASS_COMERCIO, IntegrationApiKeys.PATPASS_COMERCIO, IntegrationType.TEST))
Apuntar a producción
Para cambiar el ambiente al que apunta el SDK (que por defecto es integración), debes hacer lo siguiente:
import cl.transbank.common.IntegrationType;
import cl.transbank.patpass.PatpassComercio;
//...
// Versión 3.x del SDK
PatpassComercio.Inscription inscription = new PatpassComercio.Inscription(new PatpassOptions("***ApiKey****", "***CommerceCode****", PatpassComercioIntegrationType.LIVE));
// Versión 2.x del SDK
PatpassComercio.setIntegrationType(IntegrationType.LIVE);
use Transbank\Patpass\PatpassComercio;
//...
PatpassComercio::setCommerceCode('*********');
PatpassComercio::setApiKey('*********');
PatpassComercio::setIntegrationType('LIVE');
using Transbank.Patpass.PatpassComercio;
//..
// Versión 4.x del SDK
var inscription = new Inscription(new Options("***ApiKey****", "***CommerceCode****", PatpassComercioIntegrationType.Live));
// Versión 3.x del SDK
Inscription.IntegrationType = PatpassComercioIntegrationType.Live;
@inscription = Transbank::Patpass::PatpassComercio::Inscription.new("***CommerceCode****", "***ApiKey****", :production)
ins = Inscription(PatpassComercioOptions("***CommerceCode****", "***ApiKey****", IntegrationType.LIVE))
Ejemplos de integración
Ponemos a tu disposición una serie de repositorios en nuestro Github para ayudarte a entender la integración de mejor forma. Puedes encontrar una lista de proyectos de ejemplo acá.