API Referencia
undefined

PatPass

Ambientes y Credenciales

Ambiente de Producción

Configuration configuration = new Configuration();
configuration.setEnvironment(Webpay.Environment.LIVE);
PENDIENTE
var configuration = new Configuration();
configuration.Environment = "PRODUCCION";

Las URLs de endpoint de producción están alojadas dentro de https://webpay3g.transbank.cl/.

Los SDKs traen pre-configurado los certificados de Transbank y validan automáticamente las respuestas. Sólo debes asegurarte de mantener tu SDK actualizado para evitar que los certificados preconfigurados expiren. O también puedes sobre-escribir manualmente el certificado de Webpay a usar para la validación:

configuration.setWebpayCert(
    "-----BEGIN CERTIFICATE-----\n" +
    "MIIEDzCCAvegAwIBAgIJAMaH4DFTKdnJMA0GCSqGSIb3DQEBCwUAMIGdMQswCQYD\n" +
    "VQQGEwJDTDERMA8GA1UECAwIU2FudGlhZ28xETAPBgNVBAcMCFNhbnRpYWdvMRcw\n" +
    ...
    "MX5lzVXafBH/sPd545fBH2J3xAY3jtP764G4M8JayOFzGB0=\n" +
    "-----END CERTIFICATE-----\n");
PENDIENTE
configuration.WebpayCertPath = @"C:\Certs\certificado-publico-transbank.crt"

Para validar las respuestas generadas por Transbank debes usar un certificado público de Webpay. En el repositorio GitHub transbank-webpay-credenciales podrás encontrar el certificado actualizado.

Ambiente de Integración

configuration.setEnvironment(Webpay.Environment.TEST);
PENDIENTE
configuration.Environment = "INTEGRACION";

Las URLs de endpoints de integración están alojados dentro de https://webpay3gint.transbank.cl/.

Consulta la documentación para conocer las tarjetas de prueba que funcionan en el ambiente de integración.

Credenciales del Comercio

configuration.setCommerceCode("597044444432");
configuration.setPrivateKey(
    "-----BEGIN RSA PRIVATE KEY-----\n" +
    ... +
    "-----END RSA PRIVATE KEY-----\n"
);
configuration.setPublicCert(
    "-----BEGIN CERTIFICATE-----\n" +
    ... +
    "-----END CERTIFICATE-----\n"
);
PENDIENTE
configuration.CommerceCode = "597044444432";
configuration.PrivateCertPfxPath = @"C:/Path/to/private/Cert.pfx";
configuration.Password = "PfxPassword";

Todas las peticiones que hagas deben estar firmadas con tu llave privada y certificado enviado a Transbank. Dichas credenciales deben coincidir con el código de comercio usado en cada petición.

Consulta [la documentación para generar una llave privada y un certificado usando openssl](https://transbankdevelopers.cl/documentacion/como_empezar#credenciales-en-webpay si no sabes aún como realizarlo.

En el repositorio GitHub transbank-webpay-credenciales podrás encontrar códigos de comercios y certificados actualizados para probar en integración aunque aún no tengas tu propio código de comercio.

Los SDKs ya incluyen esos códigos de comercio, certificados y llaves privadas que funcionan en el ambiente de integración, por lo que puedes obtener rápidamente una configuración lista para hacer tus primeras pruebas en dicho ambiente:

Configuration configuration =
    Configuration.forTestingPatPassByWebpayNormal("[email protected]");
PENDIENTE
var configuration = Configuration.ForTestingPatPassByWebpayNormal("[email protected]");

PatPass by Webpay Normal

PatPassByWebpayNormal transaction =
    new Webpay(configuration).getPatPassByWebpayTransaction();
PENDIENTE
var transaction = new Webpay(configuration).PatPassByWebpayTransaction;

WSDL: /WSWebpayTransaction/cxf/WSWebpayService?wsdl

Una transacción de autorización de PatPass by WebPay corresponde a una solicitud de inscripción de pago recurrente con tarjetas de crédito, en donde el primer pago se resuelve al instante, y los subsiguientes quedan programados para ser ejecutados mes a mes. PatPass by WebPay cuenta con fecha de caducidad o termino, la cual debe ser proporcionada junto a otros datos para esta transacción. La transacción puede ser realizada en pesos y es posible enviar el monto en UF. WebPay realizará la conversión a pesos al momento de realizar el cargo al tarjetahabiente.

El flujo de pago en PatPass by WebPay se inicia desde el comercio, en donde el Tarjetahabiente selecciona el producto o servicio. Una vez realizado esto, elige pagar con PatPass by WebPay, en donde se despliega el formulario de pago y se completan los datos requeridos, dando paso al proceso de autenticación del Tarjetahabiente con el objetivo de validar que la tarjeta este siendo utilizada por el titular. Una vez resuelta la autenticación se procede a autorizar el pago y si esta es aprobada, se emite un comprobante electrónico de pago y el sistema procede a generar la inscripción encargada de la recurrencia mensual.

Dentro de los atributos más relevantes de WebPay se pueden mencionar:

  • Permite realizar transacciones seguras y en línea a través de Internet.
  • En transacciones con WebPay Plus se solicita al tarjetahabiente autenticarse con su emisor, protegiendo de esta forma al comercio por eventuales fraudes o desconocimientos de compra.
  • La seguridad es reforzada por medio de la utilización de servidores seguros, protegidos con TLS 1.2
  • Firma digital.

Flujo en caso de éxito

De cara al tarjetahabiente, el flujo de páginas para la transacción es el siguiente:

Flujo de páginas PatPass by Webpay Normal

Desde el punto de vista técnico, la secuencia es la siguiente:

Diagrama de secuencia PatPass by Webpay Normal

  1. Una vez seleccionado los bienes o servicios, tarjetahabiente decide pagar a través de PatPass by WebPay.
  2. El comercio inicia una transacción en Webpay, invocando el método initTransaction().
  3. Webpay procesa el requerimiento y entrega como resultado de la operación el token de la transacción y URL de redireccionamiento a la cual se deberá redirigir al tarjetahabiente.
  4. Comercio redirecciona al tarjetahabiente hacia Webpay, con el token de la transacción a la URL indicada en punto 3. La redirección se realiza enviando por método POST el token en variable token_ws.
  5. El navegador Web del tarjetahabiente realiza una petición HTTPS a Webpay, en base al redireccionamiento generado por el comercio en el punto 4.
  6. Webpay responde al requerimiento desplegando el formulario de pago de Webpay. Desde este punto la comunicación es entre Webpay y el tarjetahabiente, sin interferir el comercio. El formulario de pago de PatPass by Webpay despliega, entre otras cosas, el monto de la transacción, fecha de término de suscripción, información del comercio como nombre y logotipo, y la opción de pago a través de crédito.
  7. Tarjetahabiente ingresa los datos de la tarjeta, hace clic en pagar.
  8. WebPay procesa la solicitud de autorización (primero autenticación bancaria y luego la autorización de la transacción), y si todo resulta exitoso, realiza el proceso de inscripción de PatPass by WebPay.
  9. Una vez resuelta la autorización, WebPay retorna el control al comercio, realizando un redireccionamiento HTTPS hacia la página de transición del comercio, en donde se envía por método POST el token de la transacción en la variable token_ ws. El comercio debe implementar la recepción de esta variable.
  10. El navegador Web del tarjetahabiente realiza una petición HTTPS al sitio del comercio, en base a la redirección generada por WebPay en el punto 9.
  11. El sitio del comercio recibe la variable token_ws e invoca el segundo método Web, getTransactionResult() (mientras se despliega la página de transición), para obtener el resultado de la autorización. Se recomienda que el resultado de la autorización sea persistida en los sistemas del comercio, ya que este método se puede invocar una única vez por transacción.
  12. Comercio recibe el resultado de la invocación del método getTransactionResult().
  13. Para que el comercio informe a WebPay que el resultado de la transacción se ha recibido sin problemas, el sistema del comercio debe consumir el tercer método acknowledgeTrasaction(). Si esto fue ejecutado correctamente el producto puede ser liberado al cliente.

Los SDKs consumen acknowledgeTransaction() de manera automática, tan pronto reciben una respuesta de getTransactionResult().

  1. Una vez recibido el resultado de la transacción e informado a WebPay su correcta recepción, el sitio del comercio debe redirigir al tarjetahabiente nuevamente a WebPay, con la finalidad de desplegar el comprobante de pago. Es importante realizar este punto para que el tarjetahabiente entienda que el proceso de pago fue exitoso, y que involucrará un cargo a su tarjeta bancaria. El redireccionamiento a WebPay se hace utilizando como destino la URL informada por el método getTransactionResult() enviando por método POST el token de la transacción en la variable token_ws.
  2. WebPay recibe un requerimiento con el token en la variable token_ws.
  3. WebPay identifica la transacción y despliega el comprobante de pago al tarjetahabiente.
  4. Una vez visualizado el comprobante de pago por un periodo acotado de tiempo, el tarjetahabiente es redirigido de vuelta al sitio del comercio, por medio de redireccionamiento con el token en la variable token_ws enviada por método POST hacia la página final informada por el comercio en el método initTransaction().
  5. Sitio del comercio despliega página final de pago.

Flujo si usuario aborta el pago

Diagrama de secuencia si usuario aborta el
pago

Si el tarjetahabiente anula la transacción en el formulario de pago de Webpay, el flujo cambia y los pasos son los siguientes:

  1. Una vez seleccionado los bienes o servicios, tarjetahabiente decide pagar a través de PatPass by WebPay.
  2. El comercio inicia una transacción en Webpay, invocando el método initTransaction().
  3. Webpay procesa el requerimiento y entrega como resultado de la operación el token de la transacción y URL de redireccionamiento a la cual se deberá redirigir al tarjetahabiente.
  4. Comercio redirecciona al tarjetahabiente hacia Webpay, con el token de la transacción a la URL indicada en punto 3. La redirección se realiza enviando por método POST el token en variable token_ws.
  5. El navegador Web del tarjetahabiente realiza una petición HTTPS a Webpay, en base al redireccionamiento generado por el comercio en el punto 4.
  6. Webpay responde al requerimiento desplegando el formulario de pago de Webpay. Desde este punto la comunicación es entre Webpay y el tarjetahabiente, sin interferir el comercio. El formulario de pago de PatPass by Webpay despliega, entre otras cosas, el monto de la transacción, fecha de término de suscripción, información del comercio como nombre y logotipo, y la opción de pago a través de crédito.
  7. Tarjetahabiente hace clic en anular, en formulario PatPass by WebPay.
  8. Webpay retorna el control al comercio, realizando un redireccionamiento HTTPS hacia la página de final del comercio, en donde se envía por método POST el token de la transacción en la variable TBK_TOKEN además de las variables TBK_ORDEN_COMPRA y TBK_ID_SESION.
  1. El comercio con la variable TBK_TOKEN debe invocar el método getTransactionResult(), para obtener el resultado de la autorización. En este caso debe obtener una excepción, pues el pago fue abortado.
  2. El comercio debe informar al tarjetahabiente que su pago no se completó.

Crear una transacción PatPass by Webpay Normal

Para crear una transacción basta llamar al método initTransaction()

initTransaction()

Permite inicializar una transacción en Webpay. Como respuesta a la invocación se genera un toke que representa en forma única una transacción.

WsInitTransactionOutput initResult = transaction.initTransaction(
        amount, sessionId, buyOrder, returnUrl, finalUrl, patPassInfo);
PENDIENTE
wsInitTransactionOutput initResult = transaction.initTransaction(
    amount, buyOrder, sessionId, returnUrl, finalUrl, patPassInfo);
Parámetros
Nombre
tipo
Descripción
WSTransactionType
wsTransactionType
Indica el tipo de transacción, su valor debe ser siempre TR_NORMAL_WS_WPM. Los SDKs se encargan automáticamente de este parámetro
sessionId
xs:string
(Opcional) Identificador de sesión, uso interno de comercio, este valor es devuelto al final de la transacción. Largo máximo: 61
returnURL
xs:anyURI
URL del comercio, a la cual Webpay redireccionará posterior al proceso de autorización. Largo máximo: 256
finalURL
xs:anyURI
URL del comercio a la cual Webpay redireccionará posterior al voucher de éxito de Webpay. Largo máximo 256
transactionDetails
wsTransactionDetail
Lista de objetos del tipo wsTransactionDetail, el cual contiene datos de la transacción. Para este tipo de transacciones debe contener exactamente un elemento
transactionDetails[0].amount
xs:decimal
Monto de la transacción. Máximo 2 decimales para USD y UF. Largo máximo: 10
transactionDetails[0].buyOrder
xs:string
Orden de compra de la tienda. Este número debe ser único para cada transacción. Largo máximo: 26. La orden de compra puede tener: Números, letras, mayúsculas y minúsculas, y los signos |_=&%.,~:/?[[email protected]()>-
transactionDetails[0].commerceCode
xs:string
Código comercio de la tienda entregado por Transbank. Largo: 12. Los SDKs se encargan automáticamente de este parámetro a partir de la configuración de comercio y certificados/llaves usada para iniciar la transacción
wPMDetail
wpmDetailInput
Objeto del tipo wpmDetailInput, el cual contiene datos asociados a la inscripción de PatPass by WebPay. Los SDKs se encargan de estos parámetros al pasarlos dentro de un objeto PatPassInfo en la función initTransacction()
wPMDetail.serviceId
xs:string
Corresponde al identificador de servicio con que el comercio identifica a su cliente. Largo máximo: 30
wPMDetail.cardHolderId
xs:string
RUT del tarjetahabiente. Largo máximo: 12. Formato: NNNNNNNNA
wPMDetail.cardHolderName
xs:string
Nombre tarjetahabiente. Largo máximo: 50
wPMDetail.cardHolderLastName1
xs:string
Apellido paterno tarjetahabiente. Largo máximo: 50
wPMDetail.cardHolderLastName2
xs:string
Apellido materno tarjetahabiente. Largo máximo: 50
wPMDetail.cardHolderMail
xs:string
Correo electrónico tarjetahabiente. Largo máximo: 50
wPMDetail.cellPhoneNumber
xs:string
Número teléfono celular tarjetahabiente. Largo máximo: 12
wPMDetail.expirationDate
xs:dateTime
Fecha expiración de PatPass by WebPay, corresponde al último pago. Largo: 10. Formato AAAA-MM-DD
wPMDetail.commerceMail
xs:string
Correo electrónico comercio. Largo máximo: 50. Los SDKs se encargan automáticamente de este parámetro a partir del email de comercio ingresado en la configuración usada para iniciar la transacción
wPMDetail.ufFlag
xs:boolean
Valor en true indica que el monto enviado está expresado en UF, valor en false indica que valor esta expresado en pesos. Los SDKs se encargan automáticamente de este parámetro a partir de la configuración de moneda y certificados/llaves usada para iniciar la transacción
Respuesta
initResult.getUrl();
initResult.getToken();
PENDIENTE
initResult.url;
initResult.token;
Nombre
tipo
Descripción
token
xs:string
Token de la transacción. Largo: 64.
url
xs:string
URL de formulario de pago PatPass by Webpay. Largo máximo: 256.

Confirmar una transacción PatPass by Webpay Normal

Cuando el comercio retoma el control mediante returnURL puedes confirmar una transacción usando los métodos getTransactionResult() y acknowledgeTransaction()

getTransactionResult()

Permite obtener el resultado de la transacción una vez que Webpay ha resuelto su autorización financiera.

TransactionResultOutput result =
    transaction.getTransactionResult(
        request.getParameter("token_ws"));
PENDIENTE
transactionResultOutput result =
    transaction.getTransactionResult(Request.Form["token_ws"]);
Parámetros
Nombre
tipo
Descripción
tokenInput
xs:string
Token de la transacción. Largo: 64.
Respuesta
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.
    result.getBuyOrder();
    result.getSessionId();
    result.getCardDetail().getCardNumber();
    result.getCardDetail().getCardExpirationDate();
    result.getAccountingDate();
    result.getTransactionDate();
    result.getVci();
    result.getUrlRedirection();
    output.getAuthorizationCode();
    output.getPaymentType();
    output.getAmount();
    output.getSharesNumber();
    output.getCommerceCode();
    output.getBuyOrder();
PENDIENTE
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.
    result.buyOrder;
    result.sessionId;
    result.cardDetail.cardNumber;
    result.cardDetail.cardExpirationDate;
    result.accountingDate;
    result.transactionDate;
    result.VCI;
    result.urlRedirection;
    output.authorizationCode;
    output.paymentTypeCode;
    output.amount;
    output.sharesNumber;
    output.commerceCode;
    output.buyOrder;
Nombre
tipo
Descripción
buyOrder
xs:string
Orden de compra de la tienda indicado en initTransaction(). Largo máximo: 26
sessionId
xs:string
Identificador de sesión, el mismo enviado originalmente por el comercio en initTransaction(). Largo máximo: 61.
cardDetails
carddetails
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente.
cardDetails.cardNumber
xs:string
4 últimos números de la tarjeta de crédito del tarjetahabiente.Solo para comercios autorizados por Transbank se envía el número completo. Largo máximo: 16.
cardDetails.cardExpirationDate
xs:string
(Opcional) Fecha de expiración de la tarjeta de crédito del tarjetahabiente. Formato YYMM Solo para comercios autorizados por Transbank. Largo máximo: 4
accoutingDate
xs:string
Fecha de la autorización. Largo: 4, formato MMDD
transactionDate
xs:string
Fecha y hora de la autorización. Largo: 6, formato: MMDDHHmm
VCI
xs:string
Resultado de la autenticación del tarjetahabiente. Puede tomar el valor TSY (Autenticación exitosa), TSN (Autenticación fallida), TO (Tiempo máximo excedido para autenticación), ABO (Autenticación abortada por tarjetahabiente), U3 (Error interno en la autenticación), CNP (No Participa, probablemente por ser una tarjeta extranjera que no participa en el programa 3DSecure), A (Intento de autenticación). Puede ser vacío si la transacción no se autenticó. Largo máximo: 3
urlRedirection
xs:string
URL de redirección para visualización de voucher. Largo máximo: 256
detailsOutput
wsTransactionDetailOutput
Lista con resultado de cada una de las transactionDetails enviados en initTransaction(). Para PatPass by Webpay tiene máximo un elemento.
detailsOutput[0].authorizationCode
xs:string
Código de autorización de la transacción Largo máximo: 6
detailsOutput[0].paymentTypeCode
xs:string
Tipo de pago de la transacción.
VN = Venta Normal
Largo máximo: 2
detailsOutput[0].responseCode
xs:string
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada.
-1 = Rechazo de transacción.
-2 = Transacción debe reintentarse.
-3 = Error en transacción.
-4 = Rechazo de transacción.
-5 = Rechazo por error de tasa.
-6 = Excede cupo máximo mensual.
-7 = Excede límite diario por transacción.
-8 = Rubro no autorizado.
-100 Rechazo por inscripción de PatPass by Webpay.
detailsOutput[0].amount
xs:decimal
Monto de la transacción. Formato número entero para transacciones en pesos y UF máximo 2 decimales. Largo máximo: 10
detailsOutput[0].sharesNumber
xs:int
Cantidad de cuotas. Valor por defecto 0. Largo máximo: 2
detailsOutput[0].commerceCode
xs:string
Código comercio de la tienda. Largo: 12
detailsOutput[0].buyOrder
xs:string
Orden de compra de la tienda. Largo máximo: 26

acknowledgeTransaction()

Indica a Webpay que se ha recibido conforme el resultado de la transacción.

Parámetros

Los SDKs ejecutan automáticamente acknowledgeTransaction() cuando reciben la respuesta de getTransactionResult().

Nombre
tipo
Descripción
tokenInput
xs:string
Token de la transacción. Largo: 64.
Respuesta

Los SDKs arrojarán una excepción dentro de getTransactionResult() si falla el acknowledgeTransaction() que se ejecuta automáticamente.

Ninguna.