API Referencia
undefined

PatPass

PatPass by Webpay

Crear una suscripción

Para una transacción PatPass by Webpay que registre una suscripción, lo primero que necesitas es preparar una instancia de WebpayNormal con la Configuration que incluye el código de comercio y los certificados a usar.

Una forma fácil de comenzar es usar la configuración para pruebas que viene incluida en el SDK, indicando el correo que quieres que se use para las notificaciones de PatPass

import cl.transbank.webpay.configuration.Configuration;
import cl.transbank.webpay.Webpay;
import cl.transbank.patpass.PatPassByWebpayNormal;
// ...

PatPassByWebpayNormal transaction = new Webpay(
        Configuration.forTestingPatPassByWebpayNormal("[email protected]")
    ).getPatPassByWebpayTransaction();
PENDIENTE
using Transbank.PatPass;
using Transbank.Webpay;
using Transbank.Webpay.Wsdl.Normal;
//...

PatPassByWebpayNormal transaction = new Webpay(
    Configuration.ForTestingPatPassByWebpayNormal("[email protected]")).
        PatPassByWebpayTransaction;

Una vez que ya cuentas con esa preparación, puedes iniciar transacciones:

import com.transbank.webpay.wswebpay.service.WsInitTransactionOutput;
// ...
double amount = 1000; // monto a cobrar cada mes
String sessionId = "identificador que será retornado en el callback de resultado";
String buyOrder = "identificador único de orden de compra";
String returnUrl = "https://callback/resultado/de/transaccion";
String finalUrl = "https://callback/final/post/comprobante/webpay";
PatPassInfo patPassInfo = new PatPassInfo()
    .setServiceId("335456675433")
    .setCardHolderId("11.111.111-1")
    .setCardHolderName("Juan Pedro")
    .setCardHolderLastName1("Alarcón")
    .setCardHolderLastName2("Perez")
    .setCardHolderMail("[email protected]")
    .setCellPhoneNumber("1234567")
    .setExpirationDate(new GregorianCalendar(2019, 1, 1));
WsInitTransactionOutput initResult = transaction.initTransaction(
        amount, sessionId, buyOrder, returnUrl, finalUrl, patPassInfo);

String formAction = initResult.getUrl();
String wsToken = initResult.getToken();
PENDIENTE
using Transbank.PatPass;
using Transbank.Webpay;
using Transbank.Webpay.Wsdl.Normal;
//...

decimal amount = 1000; // monto a cobrar cada mes
string sessionId = "identificador que será retornado en el callback de resultado";
string buyOrder = "identificador único de orden de compra";
string returnUrl = "https://callback/resultado/de/transaccion";
string finalUrl = "https://callback/final/post/comprobante/webpay";

PatPassInfo info = new PatPassInfo
{
    ServiceId = "335456675433",
    CardHolderId = "11.111.111-1",
    CardHolderName = "Juan Pedro",
    CardHolderLastName1 = "Alarcón",
    CardHolderLastName2 = "Perez",
    CardHolderMail = "[email protected]",
    CellPhoneNumber = "1234567",
    ExpirationDate = new System.DateTime(2019, 01, 01)
};
wsInitTransactionOutput initResult = transaction.initTransaction(
    amount, buyOrder, sessionId, returnUrl, finalUrl, info);

string formAction = initResult.url;
string wsToken = initResult.token;

Todo es muy similar a Webpay Normal, con la única diferencia de la información específica de PatPass que incluye los datos personales del usuario (donde es importante el correo electrónico para las notificaciones de PatPass) y la fecha de expiración de la suscripción.

La URL y el token retornados te indican donde debes redirigir al usuario para que comience el flujo de pago. Esta redirección debe ser vía POST por lo que deberás crear un formulario web con un campo token_ws hidden y enviarlo programáticamente para entregar el control a Webpay.

Confirmar una 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 token_ws que te permitirá conocer el resultado de la transacción:

import com.transbank.webpay.wswebpay.service.TransactionResultOutput;
import com.transbank.webpay.wswebpay.service.WsTransactionDetailOutput;
// ...
TransactionResultOutput result =
    transaction.getTransactionResult(request.getParameter("token_ws"));
WsTransactionDetailOutput output = result.getDetailOutput().get(0);
if (output.getResponseCode() == 0) {
    // Suscripción exitosa, puedes procesar el resultado con el contenido de
    // las variables result y output.
}
PENDIENTE
using Transbank.PatPass;
using Transbank.Webpay;
using Transbank.Webpay.Wsdl.Normal;
//..

transactionResultOutput result =
    transaction.getTransactionResult(Request.Form["token_ws"]);
wsTransactionDetailOutput output = result.detailOutput[0];
if (output.responseCode == 0){
    // Suscripción exitosa, puedes procesar el resultado con el contenido de
    // las variables result y output.
}

Los SDKs se encarga de que al mismo tiempo que se obtiene el resultado de la transacción se haga el acknowledge a Transbank de manera que no haya posibilidad de que la transacción se revierta.

En el caso exitoso deberás llevar el control vía POST nuevamente a Webpay para que el tarjetahabiente vea el comprobante que le deja claro que se ha realizado el cargo en su tarjeta. Nuevamente deberás generar un formulario con el token_ws como un campo hidden. La URL para redirigir la debes obtener desde:

result.getUrlRedirection()
PENDIENTE
result.urlRedirection

Finalmente después del comprobante Webpay redirigirá otra vez (vía POST) a tu sitio, esta vez a la URL que indicaste en el finalUrl cuando iniciaste la transacción. Tal como antes, recibirás el token_ws que te permitirá identificar la transacción y mostrar un comprobante o página de éxito a tu usuario.

Credenciales y Ambiente

Las credenciales de PatPass by Webpay se configuran de igual forma a las transacciones Webpay: en base a un objeto Configuration. Y si bien para hacer pruebas iniciales pueden usarse las credenciales pre-configuradas (como se puede ver en todos los ejemplos anteriores), para poder superar el proceso de validación en el ambiente de integración será necesario configurar explícitamente tu código de comercio y certificados:

import cl.transbank.webpay.configuration.Configuration;
import cl.transbank.webpay.Webpay;
import cl.transbank.patpass.PatPassByWebpayNormal;

//...

Configuration configuration = new Configuration();
configuration.setCommerceCode("12345"); // acá va tu código de comercio
configuration.setPrivateKey( // pega acá la llave privada de tu certificado
    "-----BEGIN RSA PRIVATE KEY-----\n" +
    "MIIEpQIBAAKCAQEA0ClVcH8RC1u+KpCPUnzYSIcmyXI87REsBkQzaA1QJe4w/B7g\n" +
    //....
    "MtdweTnQt73lN2cnYedRUhw9UTfPzYu7jdXCUAyAD4IEjFQrswk2x04=\n" +
    "-----END RSA PRIVATE KEY-----");
configuration.setPublicCert( // pega acá tu certificado público
    "-----BEGIN CERTIFICATE-----\n" +
    "MIIDujCCAqICCQCZ42cY33KRTzANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC\n" +
    //....
    "-----END CERTIFICATE-----");

// Default significa usar pesos o dólares (dependiendo del código de comercio).
configuration.setPatPassCurency(PatPassByWebpayNormal.Currency.DEFAULT);
// Si se quiere usar UFs, especificar PatPassByWebpayNormal.Currency.UF.
configuration.commerceMail("[email protected]");

Webpay webpay = new Webpay(configuration);
// Ahora puedes obtener las instancias de las transacciones
// que usarás, por ejemplo:
PatPassByWebpayNormal patPassTransaction = webpay.getPatPassByWebpayTransaction();
PENDIENTE
using Transbank.PatPass;
using Transbank.Webpay;
using Transbank.Webpay.Wsdl.Normal;
//..

Configuration configuration = new Configuration()
{
    CommerceCode = "12345", // acá va tu código de comercio
    PrivateCertPfxPath = @"C:\Certs\certificado.pfx", // pega acá la ruta a tu archivo pfx o p12
    Password = "secret123" // pega acá el secreto con el cual se genero el archivo pfx o p12
    CommerceMail = "[email protected]",
    PatPassCurrency = PatPassByWebpayNormal.Currency.DEFAULT
};

Webpay webpay = new Webpay(configuration);
// Ahora puedes obtener las instancias de las transacciones
// que usarás, por ejemplo:
PatPassByWebpayNormal patPassTransaction = webpay.PatPassByWebpayTransaction;

Apuntar a producción

Para cambiar el ambiente al que apunta el SDK (que por defecto es integración), también debes usar el objeto Configuration (antes de crear una instancia de Webpay):

Configuration configuration = new Configuration();
configuration.setEnvironment(Webpay.Environment.PRODUCCION);
// agregar también configuración del código de comercio y certificados
PENDIENTE
Configuration configuration = new Configuration();
configuration.Environment("PRODUCCION");
// agregar también configuración del código de comercio y certificados