API Referencia
undefined

Webpay Rest

Ambientes y Credenciales

La API REST de Webpay está protegida para garantizar que solamente comercios autorizados por Transbank hagan uso de las operaciones disponibles. La seguridad esta implementada mediante los siguientes mecanismos:

  • Canal seguro a través de TLSv1.2 para la comunicación del cliente con Webpay.
  • Autenticación y autorización mediante el intercambio de headers Tbk-Api-Key-Id y Tbk-Api-Key-Secret.

Ambiente de Producción

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

// Host: https://webpay3g.transbank.cl
// Host: https://webpay3g.transbank.cl
// Host: https://webpay3g.transbank.cl
# Host: https://webpay3g.transbank.cl
# Host: https://webpay3g.transbank.cl
Host: https://webpay3g.transbank.cl

Ambiente de Integración

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

// Host: https://webpay3gint.transbank.cl
// Host: https://webpay3gint.transbank.cl
// Host: https://webpay3gint.transbank.cl
# Host: https://webpay3gint.transbank.cl
# Host: https://webpay3gint.transbank.cl
Host: 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

// Tbk-Api-Key-Id: Próximamente...
// Tbk-Api-Key-Secret: Próximamente...
// Content-Type: application/json
// Tbk-Api-Key-Id: Próximamente...
// Tbk-Api-Key-Secret: Próximamente...
// Content-Type: application/json
// Tbk-Api-Key-Id: Próximamente...
// Tbk-Api-Key-Secret: Próximamente...
// Content-Type: application/json
# Tbk-Api-Key-Id: Próximamente...
# Tbk-Api-Key-Secret: Próximamente...
# Content-Type: application/json
# Tbk-Api-Key-Id: Próximamente...
# Tbk-Api-Key-Secret: Próximamente...
# Content-Type: application/json
Tbk-Api-Key-Id: Próximamente...
Tbk-Api-Key-Secret: Próximamente...
Content-Type: application/json

Todas las peticiones que hagas deben incluir el código de comercio y la llave secreta entregada por Transbank, actuando ambas como las credenciales que autorizan distintas operaciones.

Puedes revisar la siguiente tabla con credenciales de integración para hacer pruebas.

Producto Código de Comercio Secreto
Webpay Plus Próximamente... Próximamente...
Webpay Plus Mall Próximamente... Próximamente...
Oneclick Mall 597055555541 Mall
597055555542 Tienda 1
597055555543 Tienda 2
579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Oneclick Mall Captura Diferida 597055555547 Mall
597055555548 Tienda 1
597055555549 Tienda 2
579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Transacción Completa 597055555530 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Transacción Completa sin CVV 597055555557 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Transacción Completa Diferida 597055555531 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Transacción Completa Diferida sin CVV 597055555556 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Transacción Completa Mall 597055555551 Mall
597055555552 Tienda 1
597055555553 Tienda 2
579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C

Los SDKs ya incluyen esos códigos de comercio y llaves secretas 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:

Transbank\Webpay\WebpayPlus::configureForTesting();
Transbank\Webpay\WebpayPlus::configureMallForTesting();
Transbank\Webpay\WebpayPlus::configureDeferredForTesting();
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible

Webpay Plus

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible

Una transacción de autorización normal (o transacción normal), corresponde a una solicitud de autorización financiera de un pago con tarjetas de crédito o débito, en donde quién realiza el pago ingresa al sitio del comercio, selecciona productos o servicio, y el ingreso asociado a los datos de la tarjeta de crédito o débito lo realiza en forma segura en Webpay.

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 Webpay Plus

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

Diagrama de secuencia Webpay Plus

  1. Una vez seleccionado los bienes o servicios, tarjetahabiente decide pagar a través de Webpay.
  2. El comercio inicia una transacción en Webpay.
  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 Webpay despliega, entre otras cosas, el monto de la transacción, información del comercio como nombre y logotipo, las opciones de pago a través de crédito o débito.
  7. Tarjetahabiente ingresa los datos de la tarjeta, hace clic en pagar en formulario Webpay.
  8. Webpay procesa la solicitud de autorización (primero autenticación bancaria y luego la autorización de la transacción).
  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 para confirmar y obtener el resultado de la autorización. El resultado de la autorización podrá ser consultado posteriormente con la variable anteriormente mencionada.
  12. Comercio recibe el resultado de la confirmación.
  1. Sitio del comercio despliega voucher con los datos de la transacción.

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 Webpay.
  2. El comercio inicia una transacción en Webpay.
  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 Webpay despliega, entre otras cosas, el monto de la transacción, información del comercio como nombre y logotipo, las opciones de pago a través de crédito o débito.
  7. Tarjetahabiente hace clic en “anular”, en formulario Webpay.
  8. Webpay retorna el control al comercio, realizando un redireccionamiento HTTPS hacia la página de retorno 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 de confirmación de transacción 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 Webpay Plus

Para crear una transacción basta llamar al método Transaction.create()

Transaction.create()

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

import cl.transbank.webpay.exception.CreateTransactionException;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.CreateWebpayPlusTransactionResponse;
import java.util.Random;
public class IntegrationExample {
    public static void main(String[] args) {
        String buyOrder = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        String sessionId = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        double amount = 1000;
        String returnUrl = "https://domai.cl/webpay-return";
        try {
            final WebpayPlusTransactionCreateResponse response = WebpayPlus.Transaction.create(buyOrder, sessionId, amount, returnUrl);
            final String token = response.getToken();
            final String url = response.getUrl();
        } catch (TransactionCreateException | IOException e) {
            e.printStackTrace();
        }
    }
}
use Transbank\Webpay\WebpayPlus\Transaction;

$response = Transaction::create($buy_order, $session_id, $amount, $return_url);
// Este SDK aún no se encuentra disponible
@resp = Transbank::Webpay::WebpayPlus::Transaction::create(
                                                       buy_order: buy_order,
                                                       session_id: session_id,
                                                       amount: amount,
                                                       return_url: return_url
                                                      )
# Este SDK aún no se encuentra disponible
POST /rswebpaytransaction/api/webpay/v1.0/transactions

Tbk-Api-Key-Id: Próximamente...
Tbk-Api-Key-Secret: Próximamente...
Content-Type: application/json

{
 "buy_order": "ordenCompra12345678",
 "session_id": "sesion1234557545",
 "amount": 10000,
 "return_url": "http://www.comercio.cl/webpay/retorno"
}

Parámetros

Nombre
tipo
Descripción
buy_order
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]()>-
session_id
String
Identificador de sesión, uso interno de comercio, este valor es devuelto al final de la transacción. Largo máximo: 61
amount
Decimal
Monto de la transacción. Máximo 2 decimales para USD. Largo máximo: 17
return_url
String
URL del comercio, a la cual Webpay redireccionará posterior al proceso de autorización. Largo máximo: 256

Respuesta

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
 "token": "e9d555262db0f989e49d724b4db0b0af367cc415cde41f500a776550fc5fddd3",
 "url": "https://webpay3gint.transbank.cl/webpayserver/initTransaction"
}
Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64.
url
String
URL de formulario de pago Webpay. Largo máximo: 255.

Confirmar una transacción Webpay Plus

Cuando el comercio retoma el control mediante return_url debes confirmar y obtener el resultado de una transacción usando el método Transaction.commit().

Transaction.commit()

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

import cl.transbank.webpay.exception.CreateTransactionException;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.CreateWebpayPlusTransactionResponse;
import java.util.Random;
public class IntegrationExample {
    public static void main(String[] args) {
        String buyOrder = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        String sessionId = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        double amount = 1000;
        String returnUrl = "https://domai.cl/webpay-return";
        try {
            final CreateWebpayPlusTransactionResponse response = WebpayPlus.Transaction.create(buyOrder, sessionId, amount, returnUrl);
            final String token = response.getToken();
            final String url = response.getUrl();
        } catch (CreateTransactionException e) {
            e.printStackTrace();
        }
    }
}
use Transbank\Webpay\WebpayPlus\Transaction;

$response = Transaction::commit($token);
// Este SDK aún no se encuentra disponible
@resp = Transbank::Webpay::WebpayPlus::Transaction::commit(token: @token)
# Este SDK aún no se encuentra disponible
PUT /rswebpaytransaction/api/webpay/v1.0/transactions/{token}
Tbk-Api-Key-Id: Próximamente...
Tbk-Api-Key-Secret: Próximamente...
Content-Type: application/json

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)

Respuesta

object(Transbank\Webpay\WebpayPlus\TransactionCommitResponse)#250 (14) 
 { 
     ["vci"]=> string(3) "TSY" 
     ["amount"]=> int(1000) 
     ["status"]=> string(10) "AUTHORIZED" 
     ["buyOrder"]=> string(6) "123456" 
     ["sessionId"]=> string(13) "session123456" 
     ["cardNumber"]=> string(4) "6623" 
     ["accountingDate"]=> string(4) "0718"
     ["transactionDate"]=> string(24) "2019-07-18T16:41:38.167Z"
     ["authorizationCode"]=> string(4) "1213"
     ["paymentTypeCode"]=> string(2) "VN"
     ["responseCode"]=> int(0) 
     ["installmentsAmount"]=> NULL
     ["installmentsNumber"]=> NULL
     ["balance"]=> NULL 
 }
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
  "vci": "TSY",
  "amount": 10000,
  "status": "AUTHORIZED",
  "buy_order": "ordenCompra12345678",
  "session_id": "sesion1234557545",
  "card_detail": {
      "card_number": "6623"
  },
  "accounting_date": "0522",
  "transaction_date": "2019-05-22T16:41:21.063Z",
  "authorization_code": "1213",
  "payment_type_code": "VN",
  "response_code": 0,
  "installments_number": 0
}
Nombre
tipo
Descripción
vci
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), NP (No Participa, probablemente por ser una tarjeta extranjera que no participa en el programa 3DSecure), ACS2 (Autenticación fallida extranjera). Puede ser vacío si la transacción no se autenticó. Largo máximo: 3. Este campo es información adicional suplementaria al responseCode pero el comercio no debe validar este campo. Porque constantemente se agregan nuevos mecanismos de autenticación que se traducen en nuevos valores para este campo que no están necesariamente documentados. (En el caso de tarjetas internacionales que no proveen 3D-Secure, la decisión del comercio de aceptarlas o no se realiza a nivel de configuración del comercio en Transbank y debe ser conversada con el ejecutivo del comercio)
amount
Decimal
Formato número entero para transacciones en peso y decimal para transacciones en dólares. Largo máximo: 17
status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 64
buy_order
String
Orden de compra de la tienda indicado en Transaction.create(). Largo máximo: 26
session_id
String
Identificador de sesión, el mismo enviado originalmente por el comercio en Transaction.create(). Largo máximo: 61.
card_detail
carddetails
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente.
card_detail.card_number
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: 19.
accounting_date
String
Fecha de la autorización. Largo: 4, formato MMDD
transaction_date
String
Fecha y hora de la autorización. Largo: 6, formato: MMDDHHmm
authorization_code
String
Código de autorización de la transacción Largo máximo: 6
payment_type_code
String
Tipo de pago de la transacción.
VD = Venta Débito.
VN = Venta Normal.
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés
VP = Venta Prepago.
response_code
String
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
installments_amount
Number
Monto de las cuotas. Largo máximo: 17
installments_number
Number
Cantidad de cuotas. Largo máximo: 2
balance
Number
Monto restante para un detalle anulado. Largo máximo: 17

Obtener estado de una transacción Webpay Plus

Esta operación permite obtener el estado de la transacción en cualquier momento. En condiciones normales es probable que no se requiera ejecutar, pero en caso de ocurrir un error inesperado permite conocer el estado y tomar las acciones que correspondan.

Transaction.status()

Obtiene resultado de transacción a partir de un token.

import cl.transbank.webpay.exception.StatusTransactionException;
import cl.transbank.webpay.model.CardDetail;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.StatusWebpayPlusTransactionResponse;
public class IntegrationExample {
    public static void main(String[] args) {
        String token = "ee24c0128dbe285415c55d6c9a704dd393eb8d477eda3346d9735de81a40d420";
        try {
            final StatusWebpayPlusTransactionResponse response = WebpayPlus.Transaction.status(token);
            final String accountingDate = response.getAccountingDate();
            final double amount = response.getAmount();
            final String authorizationCode = response.getAuthorizationCode();
            final double balance = response.getBalance();
            final String buyOrder = response.getBuyOrder();
            final CardDetail cardDetail = response.getCardDetail();
            final String cardNumber = cardDetail != null ? cardDetail.getCardNumber() : null;
            final double installmentsAmount = response.getInstallmentsAmount();
            final byte installmentsNumber = response.getInstallmentsNumber();
            final String paymentTypeCode = response.getPaymentTypeCode();
            final byte responseCode = response.getResponseCode();
            final String sessionId = response.getSessionId();
            final String status = response.getStatus();
            final String transactionDate = response.getTransactionDate();
            final String vci = response.getVci();
        } catch (StatusTransactionException e) {
            e.printStackTrace();
        }
    }
}
use Transbank\Webpay\WebpayPlus\Transaction;

$response = Transaction::getStatus($token);  
// Este SDK aún no se encuentra disponible
@resp = Transbank::Webpay::WebpayPlus::Transaction::status(token: @token)
# Este SDK aún no se encuentra disponible
GET /rswebpaytransaction/api/webpay/v1.0/transactions/{token}
Tbk-Api-Key-Id: Próximamente...
Tbk-Api-Key-Secret: Próximamente...
Content-Type: application/json

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)

Respuesta


  object(Transbank\Webpay\WebpayPlus\TransactionStatusResponse)#252 (14) 
  { 
    ["vci"]=> string(3) "TSY"
    ["amount"]=> int(1000)
    ["status"]=> string(10) "AUTHORIZED"
    ["buyOrder"]=> string(6) "123456"
    ["sessionId"]=> string(13) "session123456"
    ["cardNumber"]=> string(4) "6623"
    ["accountingDate"]=> string(4) "0718"
    ["transactionDate"]=> string(24) "2019-07-18T16:41:38.167Z"
    ["authorizationCode"]=> string(4) "1213"
    ["paymentTypeCode"]=> string(2) "VN"
    ["responseCode"]=> int(0)
    ["installmentsAmount"]=> NULL
    ["installmentsNumber"]=> int(0)
    ["balance"]=> NULL
   }
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
  "vci": "TSY",
  "amount": 10000,
  "status": "AUTHORIZED",
  "buy_order": "ordenCompra12345678",
  "session_id": "sesion1234557545",
  "card_detail": {
      "card_number": "6623"
  },
  "accounting_date": "0522",
  "transaction_date": "2019-05-22T16:41:21.063Z",
  "authorization_code": "1213",
  "payment_type_code": "VN",
  "response_code": 0,
  "installments_number": 0
}
Nombre
tipo
Descripción
vci
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), NP (No Participa, probablemente por ser una tarjeta extranjera que no participa en el programa 3DSecure), ACS2 (Autenticación fallida extranjera). Puede ser vacío si la transacción no se autenticó. Largo máximo: 3. Este campo es información adicional suplementaria al responseCode pero el comercio no debe validar este campo. Porque constantemente se agregan nuevos mecanismos de autenticación que se traducen en nuevos valores para este campo que no están necesariamente documentados. (En el caso de tarjetas internacionales que no proveen 3D-Secure, la decisión del comercio de aceptarlas o no se realiza a nivel de configuración del comercio en Transbank y debe ser conversada con el ejecutivo del comercio)
amount
Formato número entero para transacciones en peso y decimal para transacciones en dólares.
Monto de la transacción. Largo máximo: 17
status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 64
buy_order
String
Orden de compra de la tienda indicado en Transaction.create(). Largo máximo: 26
session_id
String
Identificador de sesión, el mismo enviado originalmente por el comercio en Transaction.create(). Largo máximo: 61.
card_detail
carddetails
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente.
card_detail.card_number
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: 19.
accounting_date
String
Fecha de la autorización. Largo: 4, formato MMDD
transaction_date
String
Fecha y hora de la autorización. Largo: 6, formato: MMDDHHmm
authorization_code
String
Código de autorización de la transacción Largo máximo: 6
payment_type_code
String
Tipo de pago de la transacción.
VD = Venta Débito.
VN = Venta Normal.
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés
VP = Venta Prepago.
response_code
String
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
installments_amount
Number
Monto de las cuotas. Largo máximo: 17
installments_number
Number
Cantidad de cuotas. Largo máximo: 2
balance
Number
Monto restante para un detalle anulado. Largo máximo: 17

Reversar o Anular un pago Webpay Plus

Este método permite a todo comercio habilitado, reembolsar o anular una transacción que fue generada en Webpay Plus. El método permite generar el reembolso del total o parte del monto de una transacción. Dependiendo de la siguiente lógica de negocio la invocación a esta operación generará una reversa o una anulación:

  • Si el monto enviado es menor al monto total entonces se ejecutará una anulación parcial.
  • Si el monto enviado es igual al total, entonces se evaluará una anulación o reversa. Será reversa si el tiempo para ejecutarla no ha terminado, de lo contrario se ejecutará una anulación.

La anulación puede realizarse máximo 90 días después de la fecha de la transacción original.

Puedes leer más sobre la anulación en la información del producto Webpay para conocer más detalles y restricciones.

Para anular una transacción se debe invocar al método Transaction.refund().

Transaction.refund()

Permite solicitar a Webpay la anulación de una transacción realizada previamente y que se encuentra vigente.

Los SDKs permiten indicar opcionalmente el código de comercio de la transacción a anular, para soportar la anulación en comercios Webpay Plus Mall. En comercios Webpay Plus, no es necesario especificar el código de comercio pues se usa el indicado en la configuración.

import cl.transbank.webpay.exception.RefundTransactionException;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.RefundWebpayPlusTransactionResponse;
public class IntegrationExample {
    public static void main(String[] args) {
        String token = "ee24c0128dbe285415c55d6c9a704dd393eb8d477eda3346d9735de81a40d420";
        double amount = 1000;
        try {
            final RefundWebpayPlusTransactionResponse response = WebpayPlus.Transaction.refund(token, amount);
            final String authorizationCode = response.getAuthorizationCode();
            final String authorizationDate = response.getAuthorizationDate();
            final double balance = response.getBalance();
            final double nullifiedAmount = response.getNullifiedAmount();
            final byte responseCode = response.getResponseCode();
            final String type = response.getType();
        } catch (RefundTransactionException e) {
            e.printStackTrace();
        }
    }
}
use Transbank\Webpay\WebpayPlus\Transaction;

$response = Transaction::refund($token, $amount);
// Este SDK aún no se encuentra disponible
@resp = Transbank::Webpay::WebpayPlus::Transaction::refund(token: @token, amount: @amount)
# Este SDK aún no se encuentra disponible
POST /rswebpaytransaction/api/webpay/v1.0/transactions/{token}/refunds
Tbk-Api-Key-Id: 597055555532
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "amount": 1000
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
amount
Formato número entero para transacciones en peso. Sólo en caso de dólar acepta dos decimales.
Monto que se desea anular o reversar de la transacción. Largo máximo: 17.

Respuesta

object(Transbank\Webpay\WebpayPlus\TransactionRefundResponse)#252 (6) 
  {
    ["type"]=> string(8) "REVERSED"
    ["authorizationCode"]=> NULL
    ["authorizationDate"]=> NULL
    ["nullifiedAmount"]=> NULL
    ["balance"]=> NULL
    ["responseCode"]=> NULL 
  }
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json
{
  "type": "NULLIFY",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "nullified_amount": 1000.00,
  "balance": 0.00,
  "response_code": 0
}
Nombre
tipo
Descripción
type
String
Tipo de reembolso (REVERSE o NULLIFY). Largo máximo: 10
authorization_code
String
Código de autorización de la anulación. Largo máximo: 6
authorization_date
String
Fecha y hora de la autorización.
balance
Decimal
Saldo actualizado de la transacción (considera la venta menos el monto anulado). Largo máximo: 17
nullified_amount
Decimal
Monto anulado. Largo máximo: 17
response_code
Number
Código de resultado de la reversa/anulacion. Si es exitoso es 0, de lo contrario la reversa/anulación no fue realizada Largo Máximo: 2

En caso de error pueden aparecer los siguientes códigos de error comunes para el método Transaction.refund():

Código Descripción
304 Validación de campos de entrada nulos
245 Código de comercio no existe
22 El comercio no se encuentra activo
316 El comercio indicado no corresponde al certificado o no es hijo del comercio MALL en caso de transacciones MALL
308 Operación no permitida
274 Transacción no encontrada
16 La transacción no permite anulación
292 La transacción no está autorizada
284 Periodo de anulación excedido
310 Transacción anulada previamente
311 Monto a anular excede el saldo disponible para anular
312 Error genérico para anulaciones
315 Error del autorizador
53 La transacción no permite anulación parcial de transacciones con cuotas

Webpay Plus Mall

Una transacción Mall Normal corresponde a una solicitud de autorización financiera de un conjunto de pagos con tarjetas de crédito o débito, en donde quién realiza el pago ingresa al sitio del comercio, selecciona productos o servicios, y el ingreso asociado a los datos de la tarjeta de crédito o débito lo realiza una única vez en forma segura en Webpay para el conjunto de pagos. Cada pago tendrá su propio resultado, autorizado o rechazado.

Desagregación de un pago Webpay Mall

El Mall Webpay agrupa múltiples tiendas, son estas últimas las que pueden generar transacciones. Tanto el mall como las tiendas asociadas son identificadas a través de un número denominado código de comercio.

Flujo Webpay Plus Mall

El flujo de Webpay Plus Mall es en general el mismo que el de Webpay Plus Normal tanto de cara al tarjeta habiente como de cara al integrador.

Las diferencias son:

  • Se debe usar un código de comercio configurado para modalidad Mall en Transbank, el cual debe ser indicado al iniciar la transacción.
  • Se pueden indicar múltiples transacciones, cada una asociada a un código de comercio de tienda (que debe estar configurada en Transbank como perteneciente al mall).
  • Se debe verificar por separado el resultado de cada una de esas transacciones individualmente, pues es posible que el emisor de la tarjeta autorice algunas y otras no.

Crear una transacción Webpay Plus Mall

Para crear una transacción basta llamar al método Transaction.create()

Transaction.create()

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

import cl.transbank.webpay.exception.CreateTransactionException;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.CreateMallTransactionDetails;
import cl.transbank.webpay.webpayplus.model.CreateWebpayPlusMallTransactionResponse;
import java.util.Random;
public class IntegrationExample {
    public static void main(String[] args) {
        String buyOrder = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        String sessionId = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        String returnUrl = "https://domai.cl/webpay-mall-return";
        double amountMallOne = 1000;
        String commerceCodeMallOne = "597055555536";
        String buyOrderMallOne = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        double amountMallTwo = 2000;
        String commerceCodeMallTwo = "597055555537";
        String buyOrderMallTwo = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        CreateMallTransactionDetails details = CreateMallTransactionDetails.build()
                .add(amountMallOne, commerceCodeMallOne, buyOrderMallOne)
                .add(amountMallTwo, commerceCodeMallTwo, buyOrderMallTwo);
        try {
            final CreateWebpayPlusMallTransactionResponse response = WebpayPlus.MallTransaction.create(buyOrder, sessionId, returnUrl, details);
            final String token = response.getToken();
            final String url = response.getUrl();
        } catch (CreateTransactionException e) {
            e.printStackTrace();
        }
    }
}
use Transbank\Webpay\WebpayPlus;
use Transbank\Webpay\WebpayPlus\Transaction;

WebpayPlus::configureMallForTesting();

$details = [
  {
      "amount": 10000,
      "commerce_code":597055555536,
      "buy_order": "ordenCompraDetalle1234"
  },
  {     
     "amount": 12000,
     "commerce_code": 597055555537,
     "buy_order": "ordenCompraDetalle4321"
  },
];

$response = Transaction::createMall($buy_order, $session_id, $return_url, $details);
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
POST /rswebpaytransaction/api/webpay/v1.0/transactions

Tbk-Api-Key-Id: Próximamente...
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
 "buy_order": "ordenCompra12345678",
 "session_id": "sesion1234557545",
 "return_url": "http://www.comercio.cl/webpay/retorno",
 "details": [
     {
         "amount": 10000,
         "commerce_code": 597055555536,
         "buy_order": "ordenCompraDetalle1234"
     },
     {     
        "amount": 12000,
        "commerce_code":  597055555537,
        "buy_order": "ordenCompraDetalle4321"
     },
 ]
}

Parámetros

Nombre
tipo
Descripción
buy_order
String
Es el código único de la orden de compra generada por el comercio mall.
session_id
String
Identificador de sesión, uso interno de comercio, este valor es devuelto al final de la transacción. Largo máximo: 61
return_url
String
URL del comercio, a la cual Webpay redireccionará posterior al proceso de autorización Largo máximo: 256.
details
Array
Lista de objetos, uno por cada tienda diferente del mall que participa en la transacción.
details [].amount
Decimal
Monto de la transacción de una tienda del mall. Máximo 2 decimales para USD. Largo máximo: 10.
details [].commerce_code
String
Código comercio asignado por Transbank para la tienda perteneciente al mall a la cual corresponde esta transacción. Largo: 12.
details [].buy_order
String
Orden de compra de la tienda del mall. 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]()>-.

Respuesta

Transbank\Webpay\WebpayPlus\TransactionCreateResponse Object
(
    [token] => e404373b9f44cd100a36badab380dd55d4cbc9ffdc99a273bca6bf4702b86ddd
    [url] => https://webpay3gint.transbank.cl/webpayserver/initTransaction
)
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
 "token": "e9d555262db0f989e49d724b4db0b0af367cc415cde41f500a776550fc5fddd3",
 "url": "https://webpay3gint.transbank.cl/webpayserver/initTransaction"
}
Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64.
url
String
URL de formulario de pago Webpay. Largo máximo: 256.

Confirmar una transacción Webpay Plus Mall

Para confirmar una transacción y obtener el resultado, se debe usar el método Transaction.commit()

Transaction.commit()

Permite confirmar una tranascción y obtener el resultado de la transacción una vez que Webpay ha resueltosu autorización financiera.

import cl.transbank.webpay.exception.CommitTransactionException;
import cl.transbank.webpay.model.CardDetail;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.CommitWebpayPlusMallTransactionResponse;
import cl.transbank.webpay.webpayplus.model.CommitWebpayPlusMallTransactionResponse.Detail;
import java.util.List;
public class IntegrationExample {
    public static void main(String[] args) {
        String token = "ef6bf196cae9d38744974e4da61e004135ea2d8774a063d33d2c58ea5730a0d2";
        try {
            final CommitWebpayPlusMallTransactionResponse response = WebpayPlus.MallTransaction.commit(token);
            final String accountingDate = response.getAccountingDate();
            final String buyOrder = response.getBuyOrder();
            final CardDetail cardDetail = response.getCardDetail();
            final String cardNumber = cardDetail != null ? cardDetail.getCardNumber() : null;
            final String sessionId = response.getSessionId();
            final String transactionDate = response.getTransactionDate();
            final String vci = response.getVci();
            final List<Detail> details = response.getDetails();
            for (Detail detail : details) {
                final double amount = detail.getAmount();
                final String authorizationCode = detail.getAuthorizationCode();
                final String buyOrderMall = detail.getBuyOrder();
                final String commerceCode = detail.getCommerceCode();
                final byte installmentsNumber = detail.getInstallmentsNumber();
                final String paymentTypeCode = detail.getPaymentTypeCode();
                final byte responseCode = detail.getResponseCode();
                final String status = detail.getStatus();
            } 
        } catch (CommitTransactionException e) {
            e.printStackTrace();
        }
    }
}
use Transbank\Webpay\WebpayPlus;
use Transbank\Webpay\WebpayPlus\Transaction;

WebpayPlus::configureMallForTesting();
$response = Transaction::commitMall($token);
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
PUT /rswebpaytransaction/api/webpay/v1.0/transactions/{token}
Tbk-Api-Key-Id: Próximamente...
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)

Respuesta

object(Transbank\Webpay\WebpayPlus\TransactionCommitMallResponse)#260 (7) 
{ 
    ["vci"]=> string(3) "TSY"
    ["details"]=> array(2) 
        { [0]=> array(8) { 
            ["amount"]=> int(1000)
            ["status"]=> string(10) "AUTHORIZED"
            ["authorization_code"]=> string(4) "1213"
            ["payment_type_code"]=> string(2) "VN"
            ["response_code"]=> int(0)
            ["installments_number"]=> int(0)
            ["commerce_code"]=> string(12) "597055555537"
            ["buy_order"]=> string(12) "123buyorder1" 
           },
          [1]=> array(8) {
            ["amount"]=> int(2000)
            ["status"]=> string(10) "AUTHORIZED"
            ["authorization_code"]=> string(4) "1213"
            ["payment_type_code"]=> string(2) "VN"
            ["response_code"]=> int(0)
            ["installments_number"]=> int(0)
            ["commerce_code"]=> string(12) "597055555536"
            ["buy_order"]=> string(12) "123buyorder2" 
           }
         }
    ["buyOrder"]=> string(6) "222333"
    ["sessionId"]=> string(17) "123session_parent"
    ["cardNumber"]=> string(4) "6623"
    ["accountingDate"]=> string(4) "0718"
    ["transactionDate"]=> string(24) "2019-07-18T19:17:06.032Z" 
}
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
  "buy_order": "415034240",
  "card_detail": {
    "card_number": "6623"
  },
  "accounting_date": "0321",
  "transaction_date": "2019-03-21T15:43:48.523Z",
  "details": [
    {
      "amount": 10000,
      "status": "AUTHORIZED",
      "authorization_code": "1213",
      "payment_type_code": "VN",
      "response_code": 0,
      "installments_number": 0,
      "commerce_code": "Próximamente...",
      "buy_order": "505479072",
      "status": "AUTHORIZED"
  }]
}
Nombre
tipo
Descripción
buy_order
String
Orden de compra del mall. Largo máximo: 26
session_id
String
Identificador de sesión, el mismo enviado originalmente por el comercio en Transaction.create(). Largo máximo: 61.
card_detail
carddetails
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente.
card_detail.card_number
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.
accouting_date
String
Fecha de la autorización. Largo: 4, formato MMDD
transaction_date
String
Fecha y hora de la autorización. Largo: 6, formato: MMDDHHmm
vci
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), NP (No Participa, probablemente por ser una tarjeta extranjera que no participa en el programa 3DSecure), ACS2 (Autenticación fallida extranjera). Puede ser vacío si la transacción no se autenticó. Largo máximo: 3. Este campo es información adicional suplementaria al responseCode pero el comercio no debe validar este campo. Porque constantemente se agregan nuevos mecanismos de autenticación que se traducen en nuevos valores para este campo que no están necesariamente documentados. (En el caso de tarjetas internacionales que no proveen 3D-Secure, la decisión del comercio de aceptarlas o no se realiza a nivel de configuración del comercio en Transbank y debe ser conversada con el ejecutivo del comercio)
details
Array
Lista con resultado de cada una de las transacciones enviados en Transaction.create().
details [].authorization_code
String
Código de autorización de la transacción Largo máximo: 6
details [].payment_type_code
String
Tipo de pago de la transacción.
VD = Venta Débito.
VN = Venta Normal.
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés
VP = Venta Prepago.
details [].response_code
String
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
details [].amount
Formato número entero para transacciones en peso y decimal para transacciones en dólares.
Monto de la transacción. Largo máximo: 10
details [].installments_amount
Number
Monto de cada cuota. Largo máximo: 17
details [].installments_number
Number
Cantidad de cuotas. Largo máximo: 2
details [].commerce_code
String
Código comercio de la tienda. Largo: 12
details [].buy_order
String
Orden de compra de la tienda. Largo máximo: 26
details [].status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 26
balance
Number
Monto restante para un detalle anulado. Largo máximo: 17

Obtener estado de una transacción Webpay Plus Mall

Esta operación permite obtener el estado de la transacción en cualquier momento. En condiciones normales es probable que no se requiera ejecutar, pero en caso de ocurrir un error inesperado permite conocer el estado y tomar las acciones que correspondan.

Transaction.status()

Obtiene resultado de transacción a partir de un token.

import cl.transbank.webpay.exception.StatusTransactionException;
import cl.transbank.webpay.model.CardDetail;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.StatusWebpayPlusMallTransactionResponse;
import cl.transbank.webpay.webpayplus.model.StatusWebpayPlusMallTransactionResponse.Detail;
import java.util.List;
public class IntegrationExample {
    public static void main(String[] args) {
        String token = "ef6bf196cae9d38744974e4da61e004135ea2d8774a063d33d2c58ea5730a0d2";
        try {
            final StatusWebpayPlusMallTransactionResponse response = WebpayPlus.MallTransaction.status(token);
            final String accountingDate = response.getAccountingDate();
            final String buyOrder = response.getBuyOrder();
            final CardDetail cardDetail = response.getCardDetail();
            final String cardNumber = cardDetail != null ? cardDetail.getCardNumber() : null;
            final String sessionId = response.getSessionId();
            final String transactionDate = response.getTransactionDate();
            final String vci = response.getVci();

            final List<Detail> details = response.getDetails();
            for (Detail detail : details) {
                final double amount = detail.getAmount();
                final String authorizationCode = detail.getAuthorizationCode();
                final String buyOrderMall = detail.getBuyOrder();
                final String commerceCode = detail.getCommerceCode();
                final byte installmentsNumber = detail.getInstallmentsNumber();
                final String paymentTypeCode = detail.getPaymentTypeCode();
                final String status = detail.getStatus();
            }
        } catch (StatusTransactionException e) {
            e.printStackTrace();
        }
    }
}
use Transbank\Webpay\WebpayPlus;
use Transbank\Webpay\WebpayPlus\Transaction;

WebpayPlus::configureMallForTesting();
$response = Transaction::getMallStatus($token);
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
GET /rswebpaytransaction/api/webpay/v1.0/transactions/{token}
Tbk-Api-Key-Id: Próximamente...
Tbk-Api-Key-Secret: Próximamente...
Content-Type: application/json

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)

Respuesta

object(Transbank\Webpay\WebpayPlus\TransactionMallStatusResponse)#260 (7) 
{ 
    ["buyOrder"]=> string(6) "222333"
    ["sessionId"]=> string(17) "123session_parent"
    ["cardNumber"]=> string(4) "6623"
    ["expirationDate"]=> NULL
    ["accountingDate"]=> string(4) "0718"
    ["transactionDate"]=> string(24) "2019-07-18T19:17:06.032Z"
    ["details"]=> array(2) {
        [0]=> array(8) 
        {
            ["amount"]=> int(1000)
            ["status"]=> string(10) "AUTHORIZED"
            ["authorization_code"]=> string(4) "1213"
            ["payment_type_code"]=> string(2) "VN"
            ["response_code"]=> int(0)
            ["installments_number"]=> int(0)
            ["commerce_code"]=> string(12) "597055555537"
            ["buy_order"]=> string(12) "123buyorder1" 
        }
        [1]=> array(8) 
        {
            ["amount"]=> int(2000)
            ["status"]=> string(10) "AUTHORIZED"
            ["authorization_code"]=> string(4) "1213"
            ["payment_type_code"]=> string(2) "VN"
            ["response_code"]=> int(0)
            ["installments_number"]=> int(0)
            ["commerce_code"]=> string(12) "597055555536"
            ["buy_order"]=> string(12) "123buyorder2" 
        } 
    }
}
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json
{
  "buy_order": "415034240",
  "card_detail": {
    "card_number": "6623"
  },
  "accounting_date": "0321",
  "transaction_date": "2019-03-21T15:43:48.523Z",
  "vci": "TSY",
  "details": [
    {
      "amount": 10000,
      "status": "AUTHORIZED",
      "authorization_code": "1213",
      "payment_type_code": "VN",
      "response_code": 0,
      "installments_number": 0,
      "commerce_code": "Próximamente...",
      "buy_order": "505479072",
      "status": "AUTHORIZED"
  }]
}
Nombre
tipo
Descripción
buy_order
String
Orden de compra del mall. Largo máximo: 26
session_id
String
Identificador de sesión, el mismo enviado originalmente por el comercio en Transaction.create(). Largo máximo: 61.
card_detail
carddetails
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente.
card_detail.card_number
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.
accouting_date
String
Fecha de la autorización. Largo: 4, formato MMDD
transaction_date
String
Fecha y hora de la autorización. Largo: 6, formato: MMDDHHmm
vci
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), NP (No Participa, probablemente por ser una tarjeta extranjera que no participa en el programa 3DSecure), ACS2 (Autenticación fallida extranjera). Puede ser vacío si la transacción no se autenticó. Largo máximo: 3. Este campo es información adicional suplementaria al responseCode pero el comercio no debe validar este campo. Porque constantemente se agregan nuevos mecanismos de autenticación que se traducen en nuevos valores para este campo que no están necesariamente documentados. (En el caso de tarjetas internacionales que no proveen 3D-Secure, la decisión del comercio de aceptarlas o no se realiza a nivel de configuración del comercio en Transbank y debe ser conversada con el ejecutivo del comercio)
details
Array
Lista con resultado de cada una de las transacciones enviados en Transaction.create().
details [].authorization_code
String
Código de autorización de la transacción Largo máximo: 6
details [].payment_type_code
String
Tipo de pago de la transacción.
VD = Venta Débito.
VN = Venta Normal.
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés
VP = Venta Prepago.
details [].response_code
String
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
details [].amount
Formato número entero para transacciones en peso y decimal para transacciones en dólares.
Monto de la transacción. Largo máximo: 10
details [].installments_number
Number
Cantidad de cuotas. Largo máximo: 2
details [].installments_amount
Number
Monto de cada cuota. Largo máximo: 17
details [].commerce_code
String
Código comercio de la tienda. Largo: 12
details [].buy_order
String
Orden de compra de la tienda. Largo máximo: 26
details [].status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 26
balance
Number
Monto restante para un detalle anulado. Largo máximo: 17

Reversar o Anular un pago Webpay Plus Mall

Este método permite a todo comercio habilitado reversar o anular una transacción que fue generada en Webpay Plus Mall. El método permite generar el reembolso del total o parte del monto de una transacción. Dependiendo de la siguiente lógica de negocio la invocación a esta operación generará una reversa o una anulación:

  • Si el monto enviado es menor al monto total entonces se ejecutará una anulación parcial.
  • Si el monto enviado es igual al total, entonces se evaluará una anulación o reversa. Será reversa si el tiempo para ejecutarla no ha terminado, de lo contrario se ejecutará una anulación.

La anulación puede realizarse máximo 90 días después de la fecha de la transacción original.

Puedes leer más sobre la anulación en la información del producto Webpay para conocer más detalles y restricciones.

Para anular una transacción se debe invocar al método Transaction.refund().

Transaction.refund()

Permite solicitar a Webpay la anulación de una transacción realizada previamente y que se encuentra vigente.

Los SDKs permiten indicar opcionalmente el código de comercio de la transacción a anular, para soportar la anulación en comercios Webpay Plus Mall. En comercios Webpay Plus, no es necesario especificar el código de comercio pues se usa el indicado en la configuración.

import cl.transbank.webpay.exception.RefundTransactionException;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.RefundWebpayPlusMallTransactionResponse;
public class IntegrationExample {
    public static void main(String[] args) {
        String token = "ef6bf196cae9d38744974e4da61e004135ea2d8774a063d33d2c58ea5730a0d2";
        String buyOrder = "some_valid_buy_order";
        String commerceCode = "597055555536";
        double amount = 1000;
        try {
            final RefundWebpayPlusMallTransactionResponse response = WebpayPlus.MallTransaction.refund(token, buyOrder, commerceCode, amount);
            final String authorizationCode = response.getAuthorizationCode();
            final String authorizationDate = response.getAuthorizationDate();
            final double balance = response.getBalance();
            final double nullifiedAmount = response.getNullifiedAmount();
            final byte responseCode = response.getResponseCode();
            final String type = response.getType();
        } catch (RefundTransactionException e) {
            e.printStackTrace();
        }
    }
}
use Transbank\Webpay\WebpayPlus;
use Transbank\Webpay\WebpayPlus\Transaction;

WebpayPlus::configureMallForTesting();
$response = Transaction::refundMall($token, $buy_order, $commerce_code, $amount);
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
POST /rswebpaytransaction/api/webpay/v1.0/transactions/{token}/refunds
Tbk-Api-Key-Id: Próximamente...
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "commerce_code": "Próximamente...",
  "buy_order": "ordenCompra12345678",
  "amount": 1000
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
buy_order
String
Orden de compra de la transacción que se requiere anular. Largo máximo: 26.
amount
Formato número entero para transacciones en peso. Sólo en caso de dólar acepta dos decimales.
Monto que se desea anular o reversar de la transacción. Largo máximo: 17.
commerce_code
Number
Código de comercio de la tienda mall que realizó la transacción. Largo: 12.

Respuesta

// Este SDK aún no se encuentra disponible
object(Transbank\Webpay\WebpayPlus\TransactionRefundResponse)#262 (6)
{ 
   ["type"]=> string(8) "REVERSED" 
   ["authorizationCode"]=> NULL
   ["authorizationDate"]=> NULL
   ["nullifiedAmount"]=> NULL
   ["balance"]=> NULL
   ["responseCode"]=> NULL 
}
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json
{
  "type": "NULLIFY",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "nullified_amount": 1000.00,
  "balance": 0.00,
  "response_code": 0
}
Nombre
tipo
Descripción
type
String
Tipo de reembolso (REVERSE. NULLIFY). Largo máximo: 10
authorization_code
String
Código de autorización de la anulación. Largo máximo: 6
authorization_date
String
Fecha y hora de la autorización.
balance
Decimal
Saldo actualizado de la transacción (considera la venta menos el monto anulado). Largo máximo: 17
nullified_amount
Decimal
Monto anulado. Largo máximo: 17
response_code
Number
Código de resultado de la reversa/anulación. Si es exitoso es 0, de lo contrario la reversa/anulación no fue realizada. Largo máximo: 2

En caso de error pueden aparecer los siguientes códigos de error comunes para el método Transaction.refund():

Código Descripción
304 Validación de campos de entrada nulos
245 Código de comercio no existe
22 El comercio no se encuentra activo
316 El comercio indicado no corresponde al certificado o no es hijo del comercio MALL en caso de transacciones MALL
308 Operación no permitida
274 Transacción no encontrada
16 La transacción no permite anulación
292 La transacción no está autorizada
284 Periodo de anulación excedido
310 Transacción anulada previamente
311 Monto a anular excede el saldo disponible para anular
312 Error genérico para anulaciones
315 Error del autorizador
53 La transacción no permite anulación parcial de transacciones con cuotas

OneClick Mall

Flujo de inscripción y pago

El flujo de OneClick Mall es en general el mismo que el de Webpay OneClick Normal tanto de cara al tarjeta habiente como de cara al integrador.

Las diferencias son:

  • El usuario debe estar registrado en la página del comercio "mall" agrupador, pero las transacciones son a nombre de las "tiendas" del mall.
  • Se pueden indicar múltiples transacciones a autorizar en una misma operación.
  • Se debe verificar por separado el resultado de cada una de esas transacciones individualmente, pues es posible que el emisor de la tarjeta autorice algunas y otras no.

Crear una inscripción OneClick Mall

Para iniciar la inscripción debe usarse el método Inscription.start()

Inscription.start()

Permite gatillar el inicio del proceso de inscripción.

use Transbank\Webpay\Oneclick;
use Transbank\Webpay\Oneclick\MallInscription;

Oneclick::configureOneclickMallForTesting();

$response = MallInscription::start($userName, $email, $responseUrl);
using Transbank.Webpay.Oneclick;

Inscription.Start(userName, email, returnUrl);
Transbank::Webpay::Oneclick::MallInscription::start(user_name: user_name,
                                                    email: email,
                                                    response_url: response_url)
from transbank.oneclick.mall_inscription import MallInscription

MallInscription.start(
        user_name=user_name,
        email=email,
        response_url=response_url)
POST /rswebpaytransaction/api/oneclick/v1.0/inscriptions

Tbk-Api-Key-Id: 597055555541 
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
 "username": "juanperez",
 "email": "[email protected]",
 "response_url": "http://www.comercio.cl/return_inscription"
}

Parámetros

Nombre
tipo
Descripción
username
String
Identificador del usuario registrado en el comercio. Largo máximo: 40.
email
String
Email del usuario registrado en el comercio. Largo máximo: 100.
response_url
String
URL del comercio a la cual Webpay redireccionará posterior al proceso de inscripción. Largo máximo: 255.

Respuesta

import cl.transbank.webpay.exception.StartInscriptionException;
import cl.transbank.webpay.oneclick.OneclickMall;
import cl.transbank.webpay.oneclick.model.StartOneclickMallInscriptionResponse;

public class IntegrationExample {
    public static void main(String[] args) {
        String userName = "goncafa";
        String email = "[email protected]";
        String responseUrl = "https://domain.com/oneclick-mall-return";

        try {
            final OneclickMallInscriptionStartResponse response = OneclickMall.Inscription.start(userName, email, responseUrl);
            final String token = response.getToken();
            final String urlWebpay = response.getUrlWebpay();
        } catch (InscriptionStartException | IOException e) {
            e.printStackTrace();
        }
    }
}
object(Transbank\Webpay\Oneclick\InscriptionStartResponse)#268 (2) 
{ 
    ["token"]=> string(64) "e97d4ebbb2d36a535691ab171a6e40000cac1c2ae74bd6d620361e3581e1cc78"
    ["urlWebpay"]=> string(74) "https://webpay3gint.transbank.cl/webpayserver/bp_multicode_inscription.cgi"
}
{
  Token: "e81380c1cbd6e56371ecf18306ff4d4c12a21aeb92408ced80f15565e4eb0f73",
  Url: "https://webpay3gint.transbank.cl/webpayserver/bp_multicode_inscription.cgi"
}
#<Transbank::Webpay::Oneclick::MallInscriptionStartResponse:0x00007f91000c0808
    @token="eea483923a5b81dcb4ae4295c589d83cd0abd5ea5040d85aa397bcf44b7a1f89",
    @url_webpay="https://webpay3gint.transbank.cl/webpayserver/bp_multicode_inscription.cgi">
{
  token: "e0937cf4a1007837068805edb58a45339d3ea09598ddd6c4c2cb999bebfb450b", url_webpay: "https://webpay3gint.transbank.cl/webpayserver/bp_multicode_inscription.cgi"
}
200 OK
Content-Type: application/json

{
  "token": "e128a9c24c0a3cbc09223973327b97c8c474f6b74be509196cce4caf162a016a",
  "url_webpay": "https://webpay3g.transbank.cl/webpayserver/bp_inscription.cgi"
}
Nombre
tipo
Descripción
token
String
Identificador, único, del proceso de inscripción. Largo: 64.
url_webpay
String
URL de Webpay para iniciar la inscripción. Largo: 255.

Confirmar una inscripción OneClick Mall

Una vez terminado el flujo de inscripción en Transbank el usuario es enviado a la URL de fin de inscripción que definió el comercio (responseURL). En ese instante el comercio debe llamar a Inscription.finish().

Inscription.finish()

Permite finalizar el proceso de inscripción obteniendo el usuario tbk.

use Transbank\Webpay\Oneclick;
use Transbank\Webpay\Oneclick\MallInscription;

Oneclick::configureOneclickMallForTesting();
$response = MallInscription::finish($token);
using Transbank.Webpay.Oneclick;

Inscription.Finish(token);
  Transbank::Webpay::Oneclick::MallInscription::finish(token: token)
from transbank.oneclick.mall_inscription import MallInscription

MallInscription.finish(token=token)
PUT /rswebpaytransaction/api/oneclick/v1.0/inscriptions/{token}

Tbk-Api-Key-Id: 597055555541 
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

Parámetros

Nombre
tipo
Descripción
token
String
Identificador del proceso de inscripción. Es entregado por Webpay en la respuesta del método Inscription.start(). (See envía en la URL, no en el body)

Respuesta

import cl.transbank.webpay.exception.FinishInscriptionException;
import cl.transbank.webpay.oneclick.OneclickMall;
import cl.transbank.webpay.oneclick.model.FinishOneclickMallInscriptionResponse;

public class IntegrationExample {
    public static void main(String[] args) {
        String token = "e95492790d1199edd91804eba46f94e92647b2afe76a98c99f7121ad5758f630";

        try {
            final OneclickMallInscriptionFinishResponse response = OneclickMall.Inscription.finish(token);

            final String authorizationCode = response.getAuthorizationCode();
            final String cardType = response.getCardType();
            final String cardNumber = response.getCardNumber();
            final byte responseCode = response.getResponseCode();
            final String tbkUser = response.getTbkUser();
        } catch (InscriptionFinishException | IOException e) {
            e.printStackTrace();
        }
    }
}
object(Transbank\Webpay\Oneclick\InscriptionFinishResponse)#268 (5)
{
    ["responseCode"]=> int(0)
    ["tbkUser"]=> string(36) "5ba90ccf-7990-46ea-8f38-9a04560d5386"
    ["authorizationCode"]=> string(4) "1213"
    ["cardType"]=> string(4) "Visa"
    ["cardNumber"]=> string(16) "XXXXXXXXXXXX6623"
}
{
  ResponseCode: 0,
  TransbankUser: "189a89d0-b914-49f6-bef7-0c998fc7c163",
  AuthorizationCode: "1213",
  CardType: "Visa",
  CardNumber: "XXXXXXXXXXXX6623"
}
#<Transbank::Webpay::Oneclick::MallInscriptionFinishResponse:0x00007f90f56d7288
    @response_code=0,
    @tbk_user="5cef0f60-8da3-4912-bd48-758533145e22",
    @authorization_code="1213",
    @card_type="Visa",
    @card_number="XXXXXXXXXXXX6623">
{
  response_code: 0,
  tbk_user: "5b74093d-abf8-448c-9dd8-f6cf7681ac39",
  authorization_code: 1213,
  card_type: "Visa",
  card_number: "XXXXXXXXXXXX6623"
}
200 OK
Content-Type: application/json

{
  "response_code": 0,
  "tbk_user": "b6bd6ba3-e718-4107-9386-d2b099a8dd42",
  "authorization_code": "123456",
  "card_type": "Visa",
  "card_number": "XXXXXXXXXXXX6623"
}
Nombre
tipo
Descripción
response_code
Number
Código de respuesta de la autorización.
Largo: 2.
Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
tbk_user
String
Identificador único de la inscripción del cliente en OneClick, que debe ser usado para realizar pagos o borrar la inscripción.
Largo: 40.
authorization_code
String
Código que identifica la autorización de la inscripción.
Largo: 6.
card_type
cardType
Indica el tipo de tarjeta inscrita por el cliente (Visa, AmericanExpress, MasterCard, Diners, Magna).
Largo: 10.
card_number
String
Últimos 4 dígitos de la tarjeta inscrito:
Largo: 4.

Eliminar una inscripción con Oneclick Mall

Una vez finalizado el proceso de inscripción es posible eliminarla de ser necesario. Para esto debes usar el método llamado Inscription.remove().

Inscription.remove()

Permite eliminar un usuario enrolado a Oneclick Mall.

use Transbank\Webpay\Oneclick;
use Transbank\Webpay\Oneclick\MallInscription;

Oneclick::configureOneclickMallForTesting();

$response = MallInscription::delete($tbkUser, $userName, $options);
using Transbank.Webpay.Oneclick;

Inscription.Delete(userName, tbkUser);
Transbank::Webpay::Oneclick::MallInscription::delete(user_name: user_name,
                                                     tbk_user: tbk_user)
from transbank.oneclick.mall_inscription import MallInscription

MallInscription.delete(tbk_user, user_name)
DELETE /rswebpaytransaction/api/oneclick/v1.0/inscriptions

Tbk-Api-Key-Id: 597055555541 
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json


{
  "tbk_user": "b6bd6ba3-e718-4107-9386-d2b099a8dd42",
  "username": "juanperez",
}

Parámetros

Nombre
tipo
Descripción
tbk_user
String
Identificador único de la inscripción del cliente (devuelto por Inscription.finish()). Largo: 40.
username
String
Identificador del usuario en los sistemas del comercio (el mismo indicado en Inscription.start()). Largo máximo: 40.

Respuesta

import cl.transbank.webpay.exception.DeleteInscriptionException;
import cl.transbank.webpay.oneclick.OneclickMall;

public class IntegrationExample {
    public static void main(String[] args) {
        String username = "goncafa";
        String tbkUser = "a_valid_tbk_user";

        try {
            OneclickMall.Inscription.delete(username, tbkUser);
        } catch (InscriptionDeleteException | IOException e) {
            // si no hay excepción quiere decir que el proceso fue exitoso
            e.printStackTrace();
        }
    }
}
object(Transbank\Webpay\Oneclick\InscriptionDeleteResponse)#264 (2) 
{
    ["status"]=> string(2) "OK"
    ["code"]=> int(204)
}
// Este SDK aún no se encuentra disponible
#<Transbank::Webpay::Oneclick::MallInscriptionDeleteResponse:0x00007f90f5e3fa98
    @code=204,
    @status="OK">
# Este SDK aún no se encuentra disponible
204 OK
Content-Type: application/json

Autorizar un pago con OneClick Mall

Una vez realizada la inscripción, el comercio puede usar el tbkUser recibido para realizar transacciones. Para eso debes usar el método Transaction.authorize().

Transaction.authorize()

Permite autorizar un pago.

use Transbank\Webpay\Oneclick\MallTransaction;
use Transbank\Webpay\Oneclick;

Oneclick::configureOneclickMallForTesting();

$details = [
    [
        "commerce_code" => $childCommerceCode,
        "buy_order" => $childBuyOrder,
        "amount" => $amount,
        "installments_number" => $installmentsNumber
    ]
];


$response = MallTransaction::authorize($userName, $tbkUser, $parentBuyOrder, $details);
using Transbank.Webpay.Oneclick;
using Transbank.Webpay.Common;

var result = MallTransaction.Authorize(userName, tbkUser, buyOrder, details);
Transbank::Webpay::Oneclick::MallTransaction::authorize(username: username,
                                                       tbk_user: tbk_user,
                                                       parent_buy_order: buy_order,
                                                       details: details)
from transbank.oneclick.mall_transaction import MallTransaction

details = MallTransactionAuthorizeDetails(commerce_code, buy_order_child, installments_number, amount) \
        .add(commerce_code2, buy_order_child2, installments_number2, amount2)
MallTransaction.authorize(user_name=user_name, tbk_user=tbk_user, buy_order=buy_order, details=details)
POST /rswebpaytransaction/api/oneclick/v1.0/transactions

Tbk-Api-Key-Id: 597055555541 
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "username": "juanperez",
  "tbk_user": "b6bd6ba3-e718-4107-9386-d2b099a8dd42",
  "buy_order": "ordenCompra123456789",
  "details": [
    {
      "commerce_code": "597055555542",
      "buy_order": "ordenCompra123445",
      "amount": 1000,
      "installments_number": 5
  }]
}

Parámetros

Nombre
tipo
Descripción
username
String
Identificador del usuario en los sistemas del comercio (el mismo indicado en Inscription.start()). Largo máximo: 40.
tbk_user
String
Identificador único de la inscripción del cliente (devuelto por Inscription.finish()). Largo: 40.
buy_order
Number
Identificador único de la compra generado por el comercio. Largo máximo: 26.
details
Array
Lista de objetos, uno por cada tienda diferente del mall que participa en la transacción.
details [].commerce_code
String
Código comercio asignado por Transbank para la tienda perteneciente al mall a la cual corresponde esta transacción. Largo: 12.
details [].buy_order
String
Identificador único de la compra generado por el comercio hijo (tienda). Largo máximo: 26.
details [].amount
Decimal
Monto de la transacción de pago. Largo máximo: 17.
details [].installments_number
Number
Cantidad de cuotas de la transacción de pago. Largo 2. No obligatorio.

Respuesta

import cl.transbank.webpay.exception.AuthorizeTransactionException;
import cl.transbank.webpay.model.CardDetail;
import cl.transbank.webpay.oneclick.OneclickMall;
import cl.transbank.webpay.oneclick.model.AuthorizeOneclickMallTransactionResponse;
import cl.transbank.webpay.oneclick.model.AuthorizeOneclickMallTransactionResponse.Detail;
import cl.transbank.webpay.oneclick.model.CreateMallTransactionDetails;

import java.util.List;
import java.util.Random;

public class IntegrationExample {
    public static void main(String[] args) {
        String username = "goncafa";
        String tbkUser = "a_valid_tbk_user";
        String buyOrder = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));

        double amountMallOne = 1000;
        String commerceCodeMallOne = "597055555548";
        String buyOrderMallOne = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        byte installmentsNumberMallOne = 3;

        double amountMallTwo = 2000;
        String commerceCodeMallTwo = "597055555549";
        String buyOrderMallTwo = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        byte installmentsNumberMallTwo = 12;

        CreateMallTransactionDetails details = CreateMallTransactionDetails.build()
                .add(amountMallOne, commerceCodeMallOne, buyOrderMallOne, installmentsNumberMallOne)
                .add(amountMallTwo, commerceCodeMallTwo, buyOrderMallTwo, installmentsNumberMallTwo);

        try {
            final OneclickMallTransactionAuthorizeResponse response = OneclickMall.Transaction.authorize(username, tbkUser, buyOrder, details);

            final String accountingDate = response.getAccountingDate();
            final String buyOrderResp = response.getBuyOrder();
            final String transactionDate = response.getTransactionDate();

            final CardDetail cardDetail = response.getCardDetail();
            final String cardNumber = cardDetail != null ? cardDetail.getCardNumber() : null;

            final List<Detail> detailsResp = response.getDetails();
            for (Detail detail : detailsResp) {
                final double amount = detail.getAmount();
                final String authorizationCode = detail.getAuthorizationCode();
                final String detailBuyOrder = detail.getBuyOrder();
                final String commerceCode = detail.getCommerceCode();
                final byte installmentsNumber = detail.getInstallmentsNumber();
                final String paymentTypeCode = detail.getPaymentTypeCode();
                final String status = detail.getStatus();
            }
        } catch (TransactionAuthorizeException | IOException e) {
            e.printStackTrace();
        }
    }
}
object(Transbank\Webpay\Oneclick\AuthorizeMallTransactionResponse)#271 (7) 
{ 
    ["buyOrder"]=> string(8) "12345632"
    ["sessionId"]=> NULL
    ["cardNumber"]=> string(4) "6623"
    ["expirationDate"]=> NULL
    ["accountingDate"]=> string(4) "0719"
    ["transactionDate"]=> string(24) "2019-07-19T12:12:15.022Z"
    ["details"]=> array(1)
        { 
            [0]=> array(8) 
                {
                 ["amount"]=> int(1000)
                 ["status"]=> string(10) "AUTHORIZED"
                 ["authorization_code"]=> string(4) "1213"
                 ["payment_type_code"]=> string(2) "VN"
                 ["response_code"]=> int(0)
                 ["installments_number"]=> int(0)
                 ["commerce_code"]=> string(12) "597055555542"
                 ["buy_order"]=> string(8) "abcdef76" 
                }
        }
}
{
  BuyOrder: "CHHBITJZNI",
  SessionId: "",
  CardNumber: "",
  ExpirationDate: "1/1/0001 12:00:00 AM",
  AccountingDate: "1219",
  TransactionDate: "12/20/2019 12:57:59 AM",
  Details: [
    {
      InstallmentsAmount= 0,
      AuthorizationCode= 1213,
      PaymentTypeCode= "VN",
      ResponseCode= 0,
      Status= "AUTHORIZED",
      CommerceCode= 597055555542,
      BuyOrder= "8ZGBA3A7KV",
      Amount= 1000,
    }
  ]
}
#<Transbank::Webpay::Oneclick::MallTransactionAuthorizeResponse:0x00007f910001e968 
    @buy_order="123451567432788",
    @session_id=nil, 
    @card_detail={"card_number"=>"6623"},
    @expiration_date=nil, 
    @accounting_date="0902",
    @transaction_date="2019-09-02T14:59:58.934Z",
    @details=[
        {"amount"=>1000, "status"=>"AUTHORIZED", "authorization_code"=>"1213",
         "payment_type_code"=>"VN", "response_code"=>0, "installments_number"=>0,
         "commerce_code"=>"597055555542", "buy_order"=>"abcdef1567432788"
        }
    ]>
{
  transaction_date: "2019-12-24T15:36:45.704Z",
  accounting_date: 1224,
  card_detail: {'card_number': '6623'},
  buy_order: 31401629, 
  details: [
    {
      'amount': 1000, 'status': 'AUTHORIZED', 'authorization_code': '1213',
      'payment_type_code': 'VN', 'response_code': 0, 'installments_number': 0,
      'commerce_code': '597055555542', 'buy_order': '22979937'
    }, {
      'amount': 1000, 'status': 'AUTHORIZED', 'authorization_code': '1213',
      'payment_type_code': 'VN', 'response_code': 0, 'installments_number': 0,
      'commerce_code': '597055555543', 'buy_order': '35668976'
    }
  ]
}
200 OK
Content-Type: application/json

{
  "buy_order": "415034240",
  "card_detail": {
    "card_number": "6623"
  },
  "accounting_date": "0321",
  "transaction_date": "2019-03-21T15:43:48.523Z",
  "details": [
    {
      "amount": 500,
      "status": "AUTHORIZED",
      "authorization_code": "1213",
      "payment_type_code": "VN",
      "response_code": 0,
      "installments_number": 0,
      "commerce_code": "Próximamente...",
      "buy_order": "505479072"
  }]
}
Nombre
tipo
Descripción
buy_order
String
Orden de compra generada por el comercio padre.
card_detail
cardDetail
Objeto que contiene información de la tarjeta utilizado por el tarjetahabiente.
card_detail.card_number
String
Los últimos 4 dígitos de la tarjeta usada en la transacción.
accounting_date
String
Fecha contable de la autorización del pago.
transaction_date
DateTime
Fecha completa (timestamp) de la autorización del pago. ISO 8601
details
Array
Lista con el resultado de cada transacción de las tiendas hijas.
details [].amount
Decimal
Monto de la transacción de pago.
details [].status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED).
details [].authorization_code
String
Código de autorización de la transacción de pago.
details [].payment_type_code
String
Tipo de pago de la transaccion.
VD = Venta Débito.
VN = Venta Normal.
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés
details [].response_code
Number
Código del resultado del pago, donde: 0 (cero) es aprobado.
-1, -2, -3, -4, -5, -6, -7, -8: Rechazo
-97: Límites Oneclick, máximo monto diario de pago excedido.
-98: Límites Oneclick, máximo monto de pago excedido
-99: Límites Oneclick, máxima cantidad de pagos diarios excedido.
details [].installments_number
Number
Cantidad de cuotas de la transacción de pago.
details [].commerce_code
Number
Código de comercio del comercio hijo (tienda).
details [].buy_order
String
Orden de compra generada por el comercio hijo para la transacción de pago.

Consultar un pago realizado con OneClick Mall

Esta operación permite obtener el estado de la transacción en cualquier momento. En condiciones normales es probable que no se requiera ejecutar, pero en caso de ocurrir un error inesperado permite conocer el estado y tomar las acciones que correspondan.

Transaction.status()

Permite consultar el estado de pago realizado a través de Oneclick. Retorna el resultado de la autorización.

use Transbank\Webpay\Oneclick\MallTransaction;
use Transbank\Webpay\Oneclick;

Oneclick::configureOneclickMallForTesting();

$response = MallTransaction::getStatus($buyOrder);
using Transbank.Webpay.Oneclick;
using Transbank.Webpay.Common;

var result = MallTransaction.Status(buyOrder);
Transbank::Webpay::Oneclick::MallTransaction::status(buy_order: buy_order)
from transbank.oneclick.mall_transaction import MallTransaction

MallTransaction.status(buy_order)
GET /rswebpaytransaction/api/oneclick/v1.0/transactions/{buyOrder}

Tbk-Api-Key-Id: 597055555541 
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

Parámetros

Nombre
tipo
Descripción
buy_order
String
Orden de compra de la transacción a consultar (se envía en la URL, no en el body).

Respuesta

import cl.transbank.webpay.exception.StatusTransactionException;
import cl.transbank.webpay.model.CardDetail;
import cl.transbank.webpay.oneclick.OneclickMall;
import cl.transbank.webpay.oneclick.model.StatusOneclickMallTransactionResponse;
import cl.transbank.webpay.oneclick.model.StatusOneclickMallTransactionResponse.Detail;

import java.util.List;

public class IntegrationExample {
    public static void main(String[] args) {
        String buyOrder = "a_valid_buy_order";

        try {
            final OneclickMallTransactionStatusResponse response = OneclickMall.Transaction.status(buyOrder);

            final String accountingDate = response.getAccountingDate();
            final String buyOrderResp = response.getBuyOrder();
            final String transactionDate = response.getTransactionDate();

            final CardDetail cardDetail = response.getCardDetail();
            final String cardNumber = cardDetail != null ? cardDetail.getCardNumber() : null;

            final List<Detail> detailsResp = response.getDetails();
            for (Detail detail : detailsResp) {
                final double amount = detail.getAmount();
                final String authorizationCode = detail.getAuthorizationCode();
                final String detailBuyOrder = detail.getBuyOrder();
                final String commerceCode = detail.getCommerceCode();
                final byte installmentsNumber = detail.getInstallmentsNumber();
                final String paymentTypeCode = detail.getPaymentTypeCode();
                final String status = detail.getStatus();
            }
        } catch (TransactionStatusException | IOException e) {
            e.printStackTrace();
        }
    }
}
object(Transbank\Webpay\Oneclick\MallTransactionStatusResponse)#271 (7) 
{
    ["buyOrder"]=> string(8) "12345632"
    ["sessionId"]=> NULL ["cardNumber"]=> string(4) "6623"
    ["expirationDate"]=> NULL
    ["accountingDate"]=> string(4) "0719"
    ["transactionDate"]=> string(24) "2019-07-19T12:12:15.022Z"
    ["details"]=> array(1) 
        { [0]=> array(8) 
            {
                ["amount"]=> int(1000)
                ["status"]=> string(10) "AUTHORIZED"
                ["authorization_code"]=> string(4) "1213"
                ["payment_type_code"]=> string(2) "VN"
                ["response_code"]=> int(0)
                ["installments_number"]=> int(0)
                ["commerce_code"]=> string(12) "597055555542"
                ["buy_order"]=> string(8) "abcdef76" 
            }
        }
 }
{
    AccountingDate: "1219",
    BuyOrder: "VWOV78KBTQ",
    CardDetail: {
    CardNumber: 6623
  },
    TransactionDate: "2019-12-19T17:40:07.150Z",
  Details:[
    {
      InstallmentsAmount= 0,
      AuthorizationCode= 1213,
      PaymentTypeCode= "VN",
      ResponseCode= 0,
      Status= "AUTHORIZED",
      CommerceCode= 597055555542,
      BuyOrder= "8ZGBA3A7KV",
      Amount= 1000,
    }
  ]
}
#<Transbank::Webpay::Oneclick::MallTransactionStatusResponse:0x00007f90f5c55868
    @buy_order="123451567432788",
    @session_id=nil,
    @card_detail={"card_number"=>"6623"}, 
    @expiration_date=nil,
    @accounting_date="0902",
    @transaction_date="2019-09-02T14:59:58.934Z",
    @details=[
       {"amount"=>1000, "status"=>"AUTHORIZED", "authorization_code"=>"1213",
       "payment_type_code"=>"VN", "response_code"=>0, 
       "installments_number"=>0, "commerce_code"=>"597055555542",
       "buy_order"=>"abcdef1567432788"
    }
]>
{
  buy_order: 31401629, 
  card_detail: {'card_number': '6623'}, 
  accounting_date: 1224, 
  transaction_date: "2019-12-24T15:36:45.704Z", 
  details: [
    {
      'amount': 1000, 'status': 'REVERSED', 'authorization_code': '1213',
      'payment_type_code': 'VN', 'response_code': 0, 'installments_number': 0,
      'commerce_code': '597055555542', 'buy_order': '22979937'
    }, {
      'amount': 1000, 'status': 'AUTHORIZED', 'authorization_code': '1213',
      'payment_type_code': 'VN', 'response_code': 0, 'installments_number': 0,
      'commerce_code': '597055555543', 'buy_order': '35668976'
    }
  ]
}
200 OK
Content-Type: application/json

{
  "buy_order": "415034240",
  "card_detail": {
    "card_number": "6623"
  },
  "accounting_date": "0321",
  "transaction_date": "2019-03-21T15:43:48.523Z",
  "details": [
    {
      "amount": 500,
      "status": "AUTHORIZED",
      "authorization_code": "1213",
      "payment_type_code": "VN",
      "response_code": 0,
      "installments_number": 0,
      "commerce_code": "Próximamente...",
      "buy_order": "505479072"
  }]
}
Nombre
tipo
Descripción
buy_order
String
Orden de compra generada por el comercio padre.
card_detail
cardDetail
Objeto que contiene información de la tarjeta utilizado por el tarjetahabiente.
card_detail.card_number
String
Los últimos 4 dígitos de la tarjeta usada en la transacción.
accounting_date
String
Fecha contable de la autorización del pago.
transaction_date
DateTime
Fecha completa (timestamp) de la autorización del pago.
details
Array
Lista con el resultado de cada transacción de las tiendas hijas.
details [].amount
Decimal
Monto de la sub-transacción de pago.
details [].status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED).
details [].authorization_code
String
Código de autorización de la sub-transacción de pago.
details [].payment_type_code
String
Tipo (VC, NC, SI, etc.) de la sub-transacción de pago.
details [].response_code
Number
Código de retorno del proceso de pago, donde:
0 (cero) es aprobado.
-1, -2, -3, -4, -5, -6, -7, -8: Rechazo
-97: Límites Oneclick, máximo monto diario de pago excedido.
-98: Límites Oneclick, máximo monto de pago excedido
-99: Límites Oneclick, máxima cantidad de pagos diarios excedido.
details [].installments_number
Number
Cantidad de cuotas de la sub-transacción de pago.
details [].commerce_code
Number
Código de comercio del comercio hijo (tienda).
details [].buy_order
String
Orden de compra generada por el comercio hijo para la sub-transacción de pago.
status
Text
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 64
balance
Decimal
Monto restante de la sub-transacción de pago original: monto inicial – monto anulado. Largo máximo: 17

Reversar o Anular un pago OneClick Mall

Para OneClick Mall hay dos operaciones diferentes para dejar sin efecto transacciones autorizadas: La reversa y la anulación.

La reversa se aplica para problemas operacionales (lado comercio) o de comunicación entre comercio y Transbank que impidan recibir a tiempo la respuesta de una autorización. En tal caso el comercio debe intentar reversar la transacción de autorización para evitar un posible descuadre entre comercio y Transbank. La reversa funciona sobre la operación completa del mall, lo que significa que todas las transacciones realizadas en la operación mall serán reversadas.

La anulación, en cambio, actúa individualmente sobre las transacciones de las tiendas de un mall. Por ende, la anulación es la operación correcta a utilizar para fines financieros, de manera de anular un cargo ya realizado. Permite generar el reembolso del total o parte del monto de una transacción completa. Dependiendo de la siguiente lógica de negocio la invocación a esta operación generará una reversa o una anulación:

Si el monto enviado es menor al monto total entonces se ejecutará una anulación parcial.

Si el monto enviado es igual al total, entonces se evaluará una anulación o reversa. Será reversa si el tiempo para ejecutarla no ha terminado, de lo contrario se ejecutará una anulación.

Transaction.refund()

Permite reversar o anular una transacción de venta autorizada con anterioridad. Este método retorna como respuesta un identificador único de la transacción de reversa/anulación.

use Transbank\Webpay\Oneclick\MallTransaction;
use Transbank\Webpay\Oneclick;

Oneclick::configureOneclickMallForTesting();

$response = MallTransaction::refund($buyOrder, $childCommerceCode, $childBuyOrder, $amount);
using Transbank.Webpay.Oneclick;

MallTransaction.Refund(buyOrder, childCommerceCode,childBuyOrder,amount);
 Transbank::Webpay::Oneclick::MallTransaction::refund(buy_order: buy_order,
                                                      child_commerce_code: child_commerce_code,
                                                      child_buy_order: child_buy_order,
                                                      amount: amount)
from transbank.oneclick.mall_transaction import MallTransaction

MallTransaction.refund(buy_order, child_commerce_code, child_buy_order, amount)
POST /rswebpaytransaction/api/oneclick/v1.0/transactions/{buyOrder}/refunds

Tbk-Api-Key-Id: 597055555541 
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "commerce_code": "597055555542",
  "detail_buy_order": "ordenCompra12345",
  "amount": 1000
}

Parámetros

Nombre
tipo
Descripción
buy_order
String
Orden de compra de la transacción a reversar o anular. Se envía en la URL, no en el body. Largo máximo: 26.
commerce_code
String
Código de comercio hijo. Largo máximo: 12.
detail_buy_order
String
Orden de compra hija de la transacción a reversar o anular. Largo máximo: 26.
amount
Formato número entero para transacciones en peso. Sólo en caso de dólar acepta dos decimales.
Monto que se desea anular o reversar de la transacción. Largo máximo: 17

Respuesta

import cl.transbank.webpay.exception.RefundTransactionException;
import cl.transbank.webpay.oneclick.OneclickMall;
import cl.transbank.webpay.oneclick.model.RefundOneclickMallTransactionResponse;

public class IntegrationExample {
    public static void main(String[] args) {
        String buyOrder = "a_valid_buy_order";
        String childCommerceCode = "597055555548";
        String childBuyOrder = "a_valid_child_buy_order";
        double amount = 1000;

        try {
            final OneclickMallTransactionRefundResponse response = OneclickMall.Transaction.refund(buyOrder, childCommerceCode, childBuyOrder, amount);

            final String authorizationCode = response.getAuthorizationCode();
            final String authorizationDate = response.getAuthorizationDate();
            final double balance = response.getBalance();
            final double nullifiedAmount = response.getNullifiedAmount();
            final byte responseCode = response.getResponseCode();
            final String type = response.getType();
        } catch (TransactionRefundException | IOException e) {
            e.printStackTrace();
        }
    }
}
object(Transbank\Webpay\Oneclick\MallRefundTransactionResponse)#273 (6) 
{
    ["type"]=> string(8) "REVERSED"
    ["authorizationCode"]=> NULL
    ["authorizationDate"]=> NULL
    ["nullifiedAmount"]=> NULL
    ["balance"]=> NULL
    ["responseCode"]=> NULL
}
{
  Type: "REVERSED",
  Balance: 0,
  AuthorizationCode: "",
  ResponseCode: 0,
  AuthorizationDate: "",
  NullifiedAmount: 0
}
#<Transbank::Webpay::Oneclick::MallTransactionRefundResponse:0x00007f90ec037aa8
    @type="REVERSED",
    @authorization_code=nil,
    @authorization_date=nil, 
    @nullified_amount=nil,
    @balance=nil,
    @response_code=nil>
{
  type: "REVERSED", balance: None, authorization_code: None,
  response_code: None, authorization_date: None, nullified_amount: None
}
200 OK
Content-Type: application/json

{
  "type": "NULLIFY",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "nullified_amount": 1000.00,
  "balance": 0.00,
  "response_code": 0
}
Nombre
tipo
Descripción
type
String
Tipo de reembolso (REVERSE o NULLIFY). Largo máximo: 10
authorization_code
Boolean
Código de autorización. Largo máximo: 6
authorization_date
ISO8601
Fecha de la autorización de la transacción.
nullified_amount
Decimal
Monto anulado. Largo máximo: 17
balance
Decimal
Monto restante de la transacción de pago original: monto inicial – monto anulado. Largo máximo: 17
response_code
Number
Código del resultado del pago, donde: 0 (cero) es aprobado. Largo máximo: 2
buy_order
String
Orden de compra generada por el comercio hijo para la transacción de pago. Largo máximo: 26.

Captura Diferida OneClick Mall

Una transacción OneClick Mall permite que el tarjetahabiente registre su tarjeta de la misma forma en que ocurre con una transacción OneClick, asociando dicha inscripción a un comercio padre. Ahora, una vez realizada la inscripción, el comercio padre tiene permitido autorizar transacciones sin captura para los comercios “hijo” registrados que tengan habilitado captura diferida. Además posterior a la autorización tiene permitido capturar dicho monto reservado. La autorización se encarga de validar si es posible realizar el cargo a la cuenta asociada a la tarjeta de crédito realizando en el mismo acto la reserva de monto de la transacción. La captura hace efectiva la reserva hecha previamente o cargo en la cuenta de crédito asociada a la tarjeta del titular. Estas modalidades, por separado, solo son válidas para tarjetas de crédito.

Para realizar esa captura explícita debe usarse el método capture()

capture()

Este método permite a los comercios OneClick Mall habilitados, poder realizar capturas diferidas de una transacción previamente autorizada. El método contempla una única captura por cada autorización. Para ello se deberá indicar los datos asociados a la transacción de venta y el monto requerido para capturar, el cual debe ser menor o igual al monto originalmente autorizado. Para capturar una transacción, ésta debe haber sido creada por un código de comercio configurado para captura diferida. De esta forma la transacción estará autorizada pero requerirá una captura explícita posterior para confirmar la transacción.

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
PUT /rswebpaytransaction/api/oneclick/mall/v1_0/transactions/capture
Tbk-Api-Key-Id: 597055555547
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json
{
    "commerce_code": 597055555548,
    "buy_order": "OCDT12345678",
    "capture_amount": 50,
    "authorization_code": "1213"
}

Parámetros

Nombre
tipo
Descripción
commerce_code
Number
(Opcional, solo usar en caso Mall) Tienda hija que realizó la transacción. Largo: 6.
buy_order
String
Orden de compra de la transacción que se requiere capturar. Largo máximo: 26.
capture_amount
Decimal
Monto que se desea capturar. Largo máximo: 17.
authorization_code
String
Código de autorización de la transacción que se requiere capturar Largo máximo: 6.

Respuesta

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json
{
    "authorization_code": "152759",
    "authorization_date": "2020-04-03T01:49:50.181Z",
    "captured_amount": 50,
    "response_code": 0
}
Nombre
tipo
Descripción
authorization_code
String
Código de autorización de la captura diferida. Largo máximo: 6
authorization_date
String
Fecha y hora de la autorización.
captured_amount
Decimal
Monto capturado. Largo máximo: 6
response_code
Number
Código de resultado de la captura. Si es exitoso es 0,de lo contrario la captura no fue realizada. Largo máximo: 2

Transacción Completa

Una transacción completa permite al comercio presentar al tarjetahabiente un formulario propio para almacenar los datos de la tarjeta, fecha de vencimiento y cvv (no necesario para comercios con la opción sin cvv habilitada) .

Crear una Transacción Completa

Para crear una transacción completa basta llamar al método Transaction.create()

Transaction.create()

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

import cl.transbank.transaccioncompleta.FullTransaction;
import cl.transbank.transaccioncompleta.model.*;
import cl.transbank.webpay.exception.*;
//...
FullTransaction.Transaction.create(
                            buyOrder,
                            sessionId,
                            amount,
                            cardNumber,
                            cardExpirationDate,
                            cvv);
use Transbank\TransaccionCompleta\Transaction;
//...
Transaction::create(
            $buy_order,
            $session_id,
            $amount,
            $cvv,
            $card_number,
            $card_expiration_date
        );
using Transbank.Webpay.TransaccionCompleta;
//...
FullTransaction.Create(
                buyOrder: buy_order,
                sessionId: session_id,
                amount: amount,
                cvv: cvv,
                cardNumber: card_number,
                cardExpirationDate: card_expiration_date);
Transbank::TransaccionCompleta::Transaction::create(
                                                    buy_order: buy_order,
                                                    session_id: session_id,
                                                    amount: amount,
                                                    card_number: card_number,
                                                    cvv: cvv,
                                                    card_expiration_date: card_expiration_date
                                                   )
from transbank.transaccion_completa.transaction import Transaction
#...
Transaction.create(
    buy_order=buy_order, session_id=session_id, amount=amount,
    card_number=card_number, cvv=cvv, card_expiration_date=card_expiration_date
)
POST /rswebpaytransaction/api/webpay/v1.0/transactions

Tbk-Api-Key-Id: 597055555530
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "buy_order": "ordenCompra12345678",
  "session_id": "sesion1234564",
  "amount": 10000,
  "cvv": 123,
  "card_number": "4239000000000000",
  "card_expiration_date": "22/10"
}

Parámetros

Nombre
tipo
Descripción
buy_order
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]()>-
session_id
String
Identificador de sesión, uso interno de comercio, este valor es devuelto al final de la transacción. Largo máximo: 61
amount
Decimal
Monto de la transacción. Máximo 2 decimales para USD. Largo máximo: 17
cvv
String
(Opcional) Código que se utiliza como método de seguridad en transacciones en las que la tarjeta no está físicamente presente. Largo máximo: 4. No se debe enviar para comercios con la opción sin cvv habilitada.
card_number
String
Número de tarjeta. Largo máximo: 16
card_expiration_date
String
Fecha de expiración de la tarjeta con la que se realiza la transacción. Largo máximo: 5

Respuesta

{
  Token: "e435cdc08cb6fdf98a67a636d79b955a0f5a872eb6d89c76364c58fac31c32d1"
}
object(Transbank\TransaccionCompleta\TransactionCreateResponse)#301 (1)
{
  ["token"]=>
  string(64) "e2dd3dd969eef829d99f05f240f82a6e98ef6b1635d1bf3f3daa02ee5509dad1"
}
{
  Token: "e435cdc08cb6fdf98a67a636d79b955a0f5a872eb6d89c76364c58fac31c32d1"
}
#<Transbank::TransaccionCompleta::TransactionCreateResponse:0x00007f90f814d198
    @token="e039d0590f8c6468f1de4e236796ddffc98e8a343c4c2820f993423209b50737">
{
  token: "edb0458a3c487ceed362950385a0839bf137c026ab77070bf6bf2be5df6a1766"
}
200 OK
Content-Type: application/json

{
  "token": "e074d38c628122c63e5c0986368ece22974d6fee1440617d85873b7b4efa48a3",
}
Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64.

Modalidad sin cvv

Para modalidad del producto Transacción completa sin CVV, este campo no debe ser enviado.

200 OK
Content-Type: application/json
{
  "buy_order": "ordenCompra12345678",
  "session_id": "sesion1234564",
  "amount": 10000,
  "card_number": "4239000000000000",
  "card_expiration_date": "22/10"
}

Consulta de cuotas

Para consultar el valor de las cuotas que pagará el tarjeta habiente en una transacción completa, es necesario llamar al método Transaction.installments()

Transaction.installments()

Operación que permite obtener el monto de la cuota a partir del número de cuotas. El id de la consulta que selecciona el tarjetahabiente debe ser informado en la invocación de la confirmación.

import cl.transbank.transaccioncompleta.FullTransaction;
import cl.transbank.transaccioncompleta.model.*;
import cl.transbank.webpay.exception.*;
//...
FullTransactionInstallmentResponse response = FullTransaction.Transaction.installment(token, installmentsNumber);
use Transbank\TransaccionCompleta\Transaction;
//...
$installments = Transaction::installments($token_ws, $installments_number);
using Transbank.Webpay.TransaccionCompleta;
//...
FullTransaction.Installments(
                token,
                installments_number);
 Transbank::TransaccionCompleta::Transaction::installments(token: token,
                                                           installments_number: installments_number)
from transbank.transaccion_completa.transaction import Transaction
#...
Transaction.installments(token=token, installments_number=installments_number)
POST /rswebpaytransaction/api/webpay/v1.0/transactions/{token}/installments

Tbk-Api-Key-Id: 597055555530
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "installments_number": 10
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
installments_number
Number
Cantidad de cuotas. Largo máximo: 2

Respuesta

{
  InstallmentsAmount: 1000,
  IdQueryInstallments: 20783487,
  DeferredPeriods: []
}
object(Transbank\TransaccionCompleta\TransactionInstallmentsResponse)#302 (3)
{
  ["installmentsAmount"]=>
  int(334)
  ["idQueryInstallments"]=>
  int(17717003)
  ["deferredPeriods"]=>
  array(0) {
  }
}
{
  InstallmentsAmount: 1000,
  IdQueryInstallments: 20783487,
  DeferredPeriods: []
}
<Transbank::TransaccionCompleta::TransactionInstallmentsResponse:0x00007f91000bd108
    @installments_amount=334,
    @id_query_installments=17717003,
    @deferred_periods=[]>
{
  installments_amount: 334.0, id_query_installments: 20842559, deferred_periods: []
}

Si el comercio no tiene configurado periodos diferidos, la respuesta de deferred_periods será []:

200 OK
Content-Type: application/json

{
  "installments_amount": 3334,
  "id_query_installments": 11,
  "deferred_periods": [
    {
      "amount": 1000,
      "period": 1
    }
  ]
}
Nombre
tipo
Descripción
installments_amount
String
Monto de cada cuota. Largo: 17.
id_query_installments
String
Identificador de las cuotas. Largo: 19.
deferred_periods
Array
Arreglo con periodos diferidos.
deferred_periods [].amount
String
Monto. Largo: 17.
deferred_periods [].period
String
Índice de periodo. Largo: 2.

Confirmación de la transacción

Una vez iniciada la transacción y consultado el monto de las cuotas, puedes confirmar y obtener el resultado de una transacción completa usando el metodo Transaction.commit().

Transaction.commit()

Operación que permite confirmar una transacción. Retorna el estado de la transacción.

import cl.transbank.transaccioncompleta.FullTransaction;
import cl.transbank.transaccioncompleta.model.*;
import cl.transbank.webpay.exception.*;
//...
FullTransaction.Transaction.commit(
                            token,
                            idQueryInstallments,
                            deferredPeriodIndex,
                            gracePeriod);
use Transbank\TransaccionCompleta\Transaction;
//...
Transaction::commit(
            $token_ws,
            $id_query_installments,
            $deferred_period_index,
            $grace_period)
using Transbank.Webpay.TransaccionCompleta;
//...
FullTransaction.Commit(
                  token,
                  idQueryInstallments,
                  deferredPeriodsIndex,
                  gracePeriods);
Transbank::TransaccionCompleta::Transaction::commit(token: token,
                                                    id_query_installments: id_query_installments,
                                                    deferred_period_index: deferred_period_index,
                                                    grace_period: grace_period)
from transbank.transaccion_completa.transaction import Transaction
#...
Transaction.commit( token=token,
                    id_query_installments=id_query_installments,
                    deferred_period_index=deferred_period_index,
                    grace_period=grace_period )
PUT /rswebpaytransaction/api/webpay/v1.0/transactions/{token}

Tbk-Api-Key-Id: 597055555530
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "id_query_installments": 15,
  "deferred_period_index": 1,
  "grace_period": false
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
id_query_installments
Number
(Opcional) Identificador de cuota. Largo máximo: 19. Solo enviar si el pago es en cuotas
deferred_period_index
Number
(Opcional) Cantidad de periodo diferido. Largo máximo: 2. Solo enviar si el pago es en cuotas
grace_period
Boolean
(Opcional) Indicador de periodo de gracia. Solo enviar si el pago es en cuotas

Respuesta

{
  AccountingDate: "1219",
  Amount: 10000,
  AuthorizationCode: "1213",
  BuyOrder: "543769748",
  CardDetail: {,
    CardNumber: 6623
  }
  InstallmentsAmount: 1000,
  InstallmentsNumber: 0,
  PaymentTypeCode: "NC",
  ResponseCode: 0,
  SessionId: "105360",
  Status: "AUTHORIZED",
  TransactionDate: "2019-12-19T19:46:19.352Z"
}
object(Transbank\TransaccionCompleta\TransactionCommitResponse)#303 (13)
{
  ["amount"]=> int(1000) 
  ["status"]=> string(10) "AUTHORIZED"
  ["buyOrder"]=> string(6) "123456"
  ["sessionId"]=> string(13) "session123456"
  ["cardDetail"]=> array(1) {
    ["card_number"]=> string(4) "6623"
  }
  ["accountingDate"]=> string(4) "1219"
  ["transactionDate"]=> string(24) "2019-12-19T14:52:54.699Z"
  ["authorizationCode"]=> string(4) "1213"
  ["paymentTypeCode"]=> string(2) "VN"
  ["responseCode"]=> int(0)
  ["installmentsNumber"]=> int(0)
  ["installmentsAmount"]=> NULL
}
{
  AccountingDate: "1219",
  Amount: 10000,
  AuthorizationCode: "1213",
  BuyOrder: "543769748",
  CardDetail: {,
    CardNumber: 6623
  }
  InstallmentsAmount: 1000,
  InstallmentsNumber: 0,
  PaymentTypeCode: "NC",
  ResponseCode: 0,
  SessionId: "105360",
  Status: "AUTHORIZED",
  TransactionDate: "2019-12-19T19:46:19.352Z"
}
<Transbank::TransaccionCompleta::TransactionCommitResponse:0x00007f90f80152f8
    @amount=1000,
    @status="AUTHORIZED",
    @buy_order="buyorder1567451528",
    @session_id="session1567451528",
    @card_number=nil,
    @accounting_date="0902",
    @transaction_date="2019-09-02T20:20:39.377Z",
    @authorization_code="1213",
    @payment_type_code="VN",
    @response_code=0,
    @installments_number=0,
    @installments_amount=nil,
    @balance=nil>
{
  amount: 1000.0,
  status: "AUTHORIZED",
  buy_order: "buyorder1577202376",
  session_id: "session1577202376",
  card_detail: {
    'card_number': '6623'
    },
  accounting_date: 1224,
  transaction_date: "2019-12-24T15:46:22.392Z",
  authorization_code: 1213,
  payment_type_code: "VN",
  response_code: 0.0,
  installments_number: 0.0,
  installments_amount: None,
  balance:None
}
200 OK
Content-Type: application/json

{
  "amount": 10000,
  "status": "AUTHORIZED",
  "buy_order": "ordenCompra12345678",
  "session_id": "sesion1234557545",
  "card_detail": {
    "card_number": "1234"
  },
  "accounting_date": "0320",
  "transaction_date": "2019-03-20T20:18:20Z",
  "authorization_code": "877550",
  "payment_type_code": "VN",
  "response_code": 0,
  "installments_number": 0,
  "installmentsAmount": 0
}
Nombre
tipo
Descripción
amount
Number
Monto de la transacción. Sólo en caso de dolar acepta dos decimales. Largo máximo: 17
status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 64
buy_order
String
Número de orden de compra. Largo máximo: 26
session_id
String
ID de sesión de la compra. Largo máximo: 61
card_detail
cardDetail
Objeto que contiene información de la tarjeta utilizado por el tarjetahabiente.
card_number
String
Los últimos 4 dígitos de la tarjeta usada en la transacción, solo si el comercio tiene configurado el poder recibir el número de tarjeta. Largo máximo: 19
accounting_date
String
Fecha contable de la transacción en formato MMYY.
transaction_date
ISO8601
Fecha de la transacción.
authorization_code
String
Código de autorización de la transacción de pago. Largo máximo: 6
payment_type_code
String
Indica el tipo de tarjeta utilizada. Largo máximo: 2
VD = Venta Débito. (Próximamente)
VN = Venta Normal.
VP = Venta Prepago.
(Próximamente)
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés
response_code
Number
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
installments_amount
Number
Monto de la cuota. Se envía solo si tiene valor cuota.
Largo máximo: 17
installments_number
Number
Número de cuotas de la transacción.
Largo máximo: 2
prepaid_balance
Number
Saldo de la tarjeta de prepago. Se envía solo si se informa saldo.
Largo máximo: 17

Consultar estado de una transacción completa

Esta operación permite obtener el estado de la transacción en cualquier momento. En condiciones normales es probable que no se requiera ejecutar, pero en caso de ocurrir un error inesperado permite conocer el estado y tomar las acciones que correspondan.

Transaction.status()

Obtiene resultado de transacción a partir de un token.

import cl.transbank.transaccioncompleta.FullTransaction;
import cl.transbank.transaccioncompleta.model.*;
import cl.transbank.webpay.exception.*;
//...
FullTransaction.Transaction.status(token);
use Transbank\TransaccionCompleta\Transaction;
//...
Transaction::getStatus($token_ws);
using Transbank.Webpay.TransaccionCompleta;
//...
FullTransaction.Status(token);
Transbank::TransaccionCompleta::Transaction::status(token: token)
from transbank.transaccion_completa.transaction import Transaction
//...
Transaction.status(token=token)
GET /rswebpaytransaction/api/webpay/v1.0/transactions/{token}
Tbk-Api-Key-Id: 597055555530
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)

Respuesta

{
  AccountingDate: "1219",
  Amount: 10000,
  AuthorizationCode: "1213",
  BuyOrder: "327648047",
  CardDetail: (null),
  InstallmentsAmount: 1000,
  InstallmentsNumber: 10,
  PaymentTypeCode: "NC",
  ResponseCode: 0,
  SessionId: "750819",
  Status: "AUTHORIZED",
  TransactionDate: "2019-12-19T19:50:34.411Z"
}
object(Transbank\TransaccionCompleta\TransactionStatusResponse)#303 (13) 
{
  ["amount"]=> int(1000)
  ["status"]=> string(10) "AUTHORIZED"
  ["buyOrder"]=> string(6) "123456"
  ["sessionId"]=> string(13) "session123456"
  ["cardDetail"]=> array(1) {
    ["card_number"]=> string(4) "6623"
  }
  ["accountingDate"]=> string(4) "1219"
  ["transactionDate"]=> string(24) "2019-12-19T14:55:52.190Z"
  ["authorizationCode"]=> string(4) "1213"
  ["paymentTypeCode"]=> string(2) "VN"
  ["responseCode"]=> int(0)
  ["installmentsNumber"]=> int(0)
  ["installmentsAmount"]=> NULL
}
{
  AccountingDate: "1219",
  Amount: 10000,
  AuthorizationCode: "1213",
  BuyOrder: "327648047",
  CardDetail: (null),
  InstallmentsAmount: 1000,
  InstallmentsNumber: 10,
  PaymentTypeCode: "NC",
  ResponseCode: 0,
  SessionId: "750819",
  Status: "AUTHORIZED",
  TransactionDate: "2019-12-19T19:50:34.411Z"
}
<Transbank::TransaccionCompleta::TransactionStatusResponse:0x00007f90f5c395f0
    @amount=1000,
    @status="AUTHORIZED",
    @buy_order="buyorder1567451528",
    @session_id="session1567451528",
    @card_number=nil,
    @accounting_date="0902",
    @transaction_date="2019-09-02T20:20:39.377Z",
    @authorization_code="1213",
    @payment_type_code="VN",
    @response_code=0, 
    @installments_number=0,
    @installments_amount=nil,
    @balance=nil>
{
  amount: 1000.0,
  status: "AUTHORIZED",
  buy_order: "buyorder1577202376",
  session_id: "session1577202376",
  card_detail: {'card_number': '6623'},
  accounting_date: 1224,
  transaction_date: "2019-12-24T15:46:22.392Z",
  authorization_code: 1213,
  payment_type_code: "VN",
  response_code: 0.0,
  installments_number: 0.0,
  installments_amount: None,
  balance:None
}
200 OK
Content-Type: application/json

{
  "amount": 10000,
  "status": "AUTHORIZED",
  "buy_order": "ordenCompra12345678",
  "session_id": "sesion1234557545",
  "card_detail": {
    "card_number": "1234"
  },
  "accounting_date": "0320",
  "transaction_date": "2019-03-20T20:18:20Z",
  "authorization_code": "877550",
  "payment_type_code": "VN",
  "response_code": 0,
  "installments_number": 0
}
Nombre
tipo
Descripción
amount
Number
Monto de la transacción. Sólo en caso de dolar acepta dos decimales. Largo máximo: 17
status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 64
buy_order
String
Número de orden de compra. Largo máximo: 26
session_id
String
ID de sesión de la compra. Largo máximo: 61
card_detail
cardDetail
Objeto que contiene información de la tarjeta utilizado por el tarjetahabiente.
card_detail.card_number
String
Los últimos 4 dígitos de la tarjeta usada en la transacción. Largo máximo: 19
accounting_date
String
Fecha contable de la transacción.
transaction_date
ISO8601
Fecha de la transacción.
authorization_code
String
Código de autorización de la transacción de pago. Largo máximo: 6
payment_type_code
String
Indica el tipo de tarjeta utilizada. Largo máximo: 2
VD = Venta Débito. (Próximamente)
VN = Venta Normal.
VP = Venta Prepago.
(Próximamente)
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés
response_code
Number
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
installments_number
Number
Número de cuotas de la transacción. Largo máximo: 2
installments_amount
Number
Monto de la cuota. Se envía solo si tiene valor cuota.
Largo máximo 17
balance
Number
Monto restante. Largo máximo: 17. Este campo solo viene cuando la transacción fue anulada
prepaid_balance
Number
Saldo de la tarjeta de prepago. Se envía solo si se informa saldo.
Largo máximo: 17

Reversar o Anular un pago Transacción Completa

Este método permite a todo comercio habilitado reversar o anular una transacción completa. El método permite generar el reembolso del total o parte del monto de una transacción dependiendo de la siguiente lógica de negocio la invocación a esta operación generará una reversa o una anulación:

  • Si el monto enviado es menor al monto total entonces se ejecutará una anulación parcial.
  • Si el monto enviado es igual al total, entonces se evaluará una anulación o reversa. Será reversa si el tiempo para ejecutarla no ha terminado, de lo contrario se ejecutará una anulación.

La anulación puede realizarse máximo 90 días después de la fecha de la transacción original.

Puedes leer más sobre la anulación en la información del producto Webpay para conocer más detalles y restricciones.

Para anular una transacción se debe invocar al método Transaction.refund().

Permite generar el reembolso del total o parte del monto de una transacción completa. Dependiendo de la siguiente lógica de negocio la invocación a esta operación generará una reversa o una anulación:

  • Si se especifica un valor en el campo “amount” se ejecutará siempre una anulación.
  • Si se supera el tiempo máximo para ejecutar una reversa se ejecutará una anulación.
  • Si no se ha dado ninguno de los casos anteriores se ejecutará una reversa.

Transaction.refund()

Permite solicitar a Webpay la anulación de una transacción realizada previamente y que se encuentre vigente.

import cl.transbank.transaccioncompleta.FullTransaction;
import cl.transbank.transaccioncompleta.model.*;
import cl.transbank.webpay.exception.*;
//...
FullTransaction.Transaction.refund(token, amount);
use Transbank\TransaccionCompleta\Transaction;
//...
Transaction::refund($token_ws, $amount);
using Transbank.Webpay.TransaccionCompleta;
//...
FullTransaction.Refund(token, amount);
Transbank::TransaccionCompleta::Transaction::refund(token: token, amount: amount)
from transbank.transaccion_completa.transaction import Transaction
#...
Transaction.refund(token=token, amount=amount)
POST /rswebpaytransaction/api/webpay/v1.0/transactions/{token}/refund
Tbk-Api-Key-Id: 597055555530
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
 "amount": 1000
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
amount
Formato número entero para transacciones en peso. Sólo en caso de dólar acepta dos decimales.
Monto que se desea anular o reversar de la transacción. Largo máximo: 17.

Respuesta

{
  AuthorizationCode: (null),
  AuthorizationDate: (null),
  Balance: 0,
  NullifiedAmount: 0,
  ResponseCode: 0,
  Type: "REVERSED"
}
object(Transbank\TransaccionCompleta\TransactionRefundResponse)#305 (6) 
{
  ["type"]=> string(8) "REVERSED"
  ["authorizationCode"]=> NULL
  ["authorizationDate"]=> NULL
  ["nullifiedAmount"]=> NULL
  ["balance"]=> NULL
  ["responseCode"]=> NULL
}
{
  AuthorizationCode: (null),
  AuthorizationDate: (null),
  Balance: 0,
  NullifiedAmount: 0,
  ResponseCode: 0,
  Type: "REVERSED"
}
<Transbank::TransaccionCompleta::TransactionRefundResponse:0x00007f90f55f6468 
    @type="REVERSED",
    @authorization_code=nil,
    @authorization_date=nil,
    @nullified_amount=nil,
    @balance=nil,
    @response_code=nil>
{
  type: "REVERSED", authorization_code: None, authorization_date: None, nullified_amount: None, balance: None, response_code: None
}
200 OK
Content-Type: application/json
{
  "type": "NULLIFY",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "nullified_amount": 1000.00,
  "balance": 0.00,
  "response_code": 0
}
Nombre
tipo
Descripción
type
String
Tipo de reembolso (REVERSE. NULLIFY). Largo máximo: 10
authorization_code
String
Código de autorización de la anulación. Largo máximo: 6. Solo viene en caso de anulación.
authorization_date
String
Fecha y hora de la autorización. Solo viene en caso de anulación.
nullified_amount
Decimal
Monto anulado. Largo máximo: 17. Solo viene en caso de anulación.
balance
Decimal
Saldo actualizado de la transacción (considera la venta menos el monto anulado). Largo máximo: 17. Solo viene en caso de anulación.
response_code
Number
Código de resultado de la anulación. Si es exitoso es 0, de lo contrario la anulación no fue realizada. Largo máximo: 2. Solo viene en caso de anulación.

Transacción Mall Completa

Una transacción Mall Completa corresponde a una solicitud de transacciones completas de un conjunto de pagos con tarjetas de crédito, en donde quién realiza el pago ingresa al sitio del comercio, selecciona productos o servicios, y el ingreso asociado a los datos de la tarjeta de crédito lo realiza una única vez en forma segura en Webpay para el conjunto de pagos. Cada pago tendrá su propio resultado, autorizado o rechazado.

Desagregación de un pago Webpay Mall

El Mall Webpay agrupa múltiples tiendas, son estas últimas las que pueden generar transacciones. Tanto el mall como las tiendas asociadas son identificadas a través de un número denominado código de comercio.

Flujo Transacción Mall Completa

El flujo de Transacción Mall Completa es en general el mismo que el de Transacción Completa tanto de cara al tarjeta habiente como de cara al integrador.

Las diferencias son:

  • Se debe usar un código de comercio configurado para modalidad Mall en Transbank, el cual debe ser indicado al iniciar la transacción.
  • Se pueden indicar múltiples transacciones, cada una asociada a un código de comercio de tienda (que debe estar configurada en Transbank como perteneciente al mall).
  • Se debe verificar por separado el resultado de cada una de esas transacciones individualmente, pues es posible que el emisor de la tarjeta autorice algunas y otras no.

Crear una Transacción Mall Completa

Para crear una Transacción Mall Completa basta llamar al método Transaction.create()

Transaction.create()

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

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
POST /rswebpaytransaction/api/webpay/v1.0/transactions

Tbk-Api-Key-Id: 597055555551
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "buy_order": "ordenCompra12345678",
  "session_id": "sesion1234564",
  "card_number": "4239000000000000",
  "card_expiration_date": "22/10",
  "details": [
    {
      "amount": 10000,
      "commerce_code": "597055555552",
      "buy_order": "123456789"
    },
    {
      "amount": 10000,
      "commerce_code": "597055555553",
      "buy_order": "123456790"
    }
  ]
}

Parámetros

Nombre
tipo
Descripción
buy_order
String
Es el código único de la orden de compra generada por el comercio mall. Largo máximo: 26
session_id
String
Identificador de sesión, uso interno de comercio, este valor es devuelto al final de la transacción. Largo máximo: 61
card_number
String
Número de la tarjeta con la que se debe hacer la transacción. Largo máximo: 19
card_expiration_date
String
Fecha de expiración de la tarjeta con la que se realiza la transacción. Largo máximo: 5
details
Array
Lista de objetos, uno por cada tienda diferente del mall que participa en la transacción.
details [].amount
Decimal
Monto de la transacción de una tienda del mall. Máximo 2 decimales para USD. Largo máximo: 17.
details [].commerce_code
String
Código comercio asignado por Transbank para la tienda perteneciente al mall a la cual corresponde esta transacción. Largo: 12.
details [].buy_order
String
Orden de compra de la tienda del mall. 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]()>-. Largo máximo: 26

Respuesta

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
  "token": "e074d38c628122c63e5c0986368ece22974d6fee1440617d85873b7b4efa48a3",
}
Nombre
tipo
Descripción
token
String
Token identificador de la transacción. Largo: 64.

Consulta de cuotas

Para consultar el valor de las cuotas que pagará el tarjeta habiente en cada transacción dentro transacción mall completa, es necesario llamar al método Transaction.installments()

Transaction.installments()

Operación que permite obtener el monto de la cuota a partir del número de cuotas. El id de la consulta que selecciona el tarjetahabiente debe ser informado en la invocación de la confirmación.

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
POST /rswebpaytransaction/api/webpay/v1.0/transactions/{token}/installments

Tbk-Api-Key-Id: 597055555551
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "commerce_code": 597055555552,
  "buy_order": "123456789",
  "installments_number": 10
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
commerce_code
String
Código comercio asignado por Transbank para la tienda perteneciente al mall a la cual corresponde esta transacción. Largo: 12
buy_order
String
Orden de compra de la tienda del mall. Largo máximo: 26
installments_number
Number
Cantidad de cuotas. Largo máximo: 2

Respuesta

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
  "installments_amount": 3334,
  "id_query_installments": 11,
  "deferred_periods": [
    {
      "amount": 1000,
      "period": 1
    }
  ]
}
Nombre
tipo
Descripción
installments_amount
String
Monto de cada cuota. Largo: 17.
id_query_installments
String
Identificador de las cuotas. Largo: 19.
deferred_periods
Array
Arreglo con periodos diferidos.
deferred_periods [].amount
String
Monto. Largo: 17.
deferred_periods [].period
String
Índice de periodo. Largo: 2.

Confirmación de la transacción

Una vez iniciada la transacción y consultado el monto de las cuotas por cada subtransacción, puedes confirmar y obtener el resultado de una transacción completa usando el metodo Transaction.commit().

Transaction.commit()

Operación que permite confirmar una transacción. Retorna el estado de la transacción.

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
PUT /rswebpaytransaction/api/webpay/v1.0/transactions/{token}

Tbk-Api-Key-Id: 597055555551
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "details": [
    {
      "commerce_code": 597055555552,
      "buy_order": "ordenCompra1234",
      "id_query_installments": 12,
      "deferred_period_index": 1,
      "grace_period": false
    }
  ]
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
details
details
Listado con las transacciones mall.
commerce_code
String
Código comercio asignado por Transbank para la tienda perteneciente al mall a la cual corresponde esta transacción. Largo máximo: 12
buy_order
String
Orden de compra de la tienda del mall. Largo máximo: 26
id_query_installments
Number
(Opcional) Identificador de cuota. Largo máximo: 19. Solo enviar si el pago es en cuotas
deferred_period_index
Number
(Opcional) Cantidad de periodo diferido. Largo máximo: 2. Solo enviar si el pago es en cuotas
grace_period
Boolean
(Opcional) Indicador de periodo de gracia. Solo enviar si el pago es en cuotas

Respuesta

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
  "buy_order": "415034240",
  "card_detail": {
    "card_number": "6623"
  },
  "accounting_date": "0321",
  "transaction_date": "2019-03-21T15:43:48.523Z",
  "details": [
    {
      "amount": 500,
      "status": "AUTHORIZED",
      "authorization_code": "1213",
      "payment_type_code": "VN",
      "response_code": 0,
      "installments_number": 0,
      "commerce_code": "597055555552",
      "buy_order": "505479072"
    }
  ]
}
Nombre
tipo
Descripción
buy_order
String
Orden de compra del mall. Largo máximo: 26
card_detail
carddetails
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente.
card_detail.card_number
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: 19.
accounting_date
String
Fecha de la autorización. Largo: 4, formato MMYY
transaction_date
String
Fecha y hora de la autorización. formato: ISO8601
details
Array
Lista con resultado de cada una de las transacciones enviadas.
details [].amount
Number
Monto de la transacción. Largo máximo: 17
Acepta decimales en caso de ser operación en dolares
details [].status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 64
details [].authorization_code
String
Código de autorización de la transacción Largo máximo: 2
details [].payment_type_code
String
Tipo de pago de la transacción.
VN = Venta Normal.
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés.
VD = Venta Débito. (Próximamente)
VP = Venta Prepago. (Próximamente)
details [].responseCode
Number
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
details [].installments_number
Number
Cantidad de cuotas. Largo máximo: 2
details [].installments_amount
Number
Monto de cada cuota. Largo máximo: 17
details [].commerce_code
String
Código comercio de la tienda. Largo: 12
details [].buy_order
String
Orden de compra de la tienda. Largo máximo: 26
prepaid_balance
Number
Saldo de la tarjeta de prepago. Se envía solo si se informa saldo.
Largo máximo 17

Consultar estado de una transacción mall completa

Esta operación permite obtener el estado de la transacción mall completa en cualquier momento. En condiciones normales es probable que no se requiera ejecutar, pero en caso de ocurrir un error inesperado permite conocer el estado y tomar las acciones que correspondan.

Transaction.status()

Obtiene resultado de transacción a partir de un token.

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
GET /rswebpaytransaction/api/webpay/v1.0/transactions/{token}
Tbk-Api-Key-Id: 597055555551
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)

Respuesta

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json

{
  "buy_order": "415034240",
  "card_detail": {
    "card_number": "6623"
  },
  "accounting_date": "0321",
  "transaction_date": "2019-03-21T15:43:48.523Z",
  "details": [
    {
      "amount": 500,
      "status": "AUTHORIZED",
      "authorization_code": "1213",
      "payment_type_code": "VN",
      "response_code": 0,
      "installments_number": 0,
      "commerce_code": "597055555552",
      "buy_order": "505479072"
    }
  ]
}
Nombre
tipo
Descripción
buy_order
String
Orden de compra del mall. Largo máximo: 26
card_detail
carddetails
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente.
card_detail.card_number
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: 19.
accouting_date
String
Fecha de la autorización. Largo: 4, formato MMDD
transaction_date
String
Fecha y hora de la autorización. Largo: 6, formato: ISO8601
details
Array
Lista con resultado de cada una de las transacciones enviadas.
details [].amount
Number
Monto de la transacción. Largo máximo: 17
Acepta decimales en caso de ser operación en dolares
details [].status
String
Estado de la transacción (INITIALIZED, AUTHORIZED, REVERSED, FAILED, NULLIFIED, PARTIALLY_NULLIFIED, CAPTURED). Largo máximo: 64
details [].authorization_code
String
Código de autorización de la transacción Largo máximo: 6
details [].payment_type_code
String
Tipo de pago de la transacción.
VN = Venta Normal.
VC = Venta en cuotas.
SI = 3 cuotas sin interés.
S2 = 2 cuotas sin interés.
NC = N Cuotas sin interés.
VD = Venta Débito. (Próximamente)
VP = Venta Prepago. (Próximamente)
details [].responseCode
Number
Código de respuesta de la autorización. Valores posibles:
0 = Transacción aprobada
-1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción)
-2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada)
-3 = Error en transacción (Interno Transbank)
-4 = Rechazo emisor (Rechazada por parte del emisor)
-5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude)
details [].installments_number
Number
Cantidad de cuotas. Largo máximo: 2
details [].installments_amount
Number
Monto de cada cuota. Largo máximo: 17
details [].commerce_code
String
Código comercio de la tienda. Largo: 12
details [].buy_order
String
Orden de compra de la tienda. Largo máximo: 26
balance
Number
Monto restante para un detalle anulado. Largo máximo: 17
prepaid_balance
Number
Saldo de la tarjeta de prepago. Se envía solo si se informa saldo.
Largo máximo 17

Anulación Transacción Completa

Permite generar el reembolso del total o parte del monto de una transacción completa. Dependiendo de la siguiente lógica de negocio la invocación a esta operación generará una reversa o una anulación:

  • Si se especifica un valor en el campo “amount” se ejecutará siempre una anulación.
  • Si se supera el tiempo máximo para ejecutar una reversa se ejecutará una anulación.
  • Si no se ha dado ninguno de los casos anteriores se ejecutará una reversa.

Transaction.refund()

Permite solicitar a Webpay la anulación de una transacción realizada previamente y que se encuentre vigente.

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
POST /rswebpaytransaction/api/webpay/v1.0/transactions/{token}/refunds
Tbk-Api-Key-Id: 597055555551
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "buy_order": "415034240",
  "commerce_code": "597055555552",
  "amount": 1000
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
buy_order
String
Orden de compra de la transacción que se requiere capturar. Largo máximo: 26.
commerce_code
Number
Tienda hija que realizó la transacción. Largo: 12.
amount
Formato número entero para transacciones en peso. Sólo en caso de dólar acepta dos decimales.
Monto que se desea anular o reversar de la transacción. Largo máximo: 17

Respuesta

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json
{
  "type": "NULLIFY",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "nullified_amount": 1000.00,
  "balance": 0.00,
  "response_code": 0
}
Nombre
tipo
Descripción
type
String
Tipo de reembolso (REVERSE o NULLIFY). Si es REVERSE no se devolverán datos de la transacción. Largo máximo: 10
authorization_code
String
Código de autorización de la anulación. Largo máximo: 6. Solo viene en caso de anulación.
authorization_date
String
Fecha y hora de la autorización. Solo viene en caso de anulación.
nullified_amount
Decimal
Monto anulado. Largo máximo: 17. Solo viene en caso de anulación.
balance
Decimal
Saldo actualizado de la transacción (considera la venta menos el monto anulado). Largo máximo: 17. Solo viene en caso de anulación.
response_code
Number
Código del resultado del pago. Si es exitoso es 0, de lo contrario el pago no fue realizado. Largo máximo: 2. Solo viene en caso de anulación.

Captura Diferida

Los comercios que están configurados para operar con captura diferida deben ejecutar el método de captura para realizar el cargo el cargo al tarjetahabiente.

Válido para :

  • Webpay Plus Captura Diferida
  • Transacción Completa Captura Diferida

Ejecutar captura diferida

Este método permite a todo comercio habilitado realizar capturas de una transacción autorizada sin captura generada en Webpay Plus o Transacción Completa. El método contempla una única captura por cada autorización. Para ello se deberá indicar los datos asociados a la transacción de venta con autorización sin captura y el monto requerido para capturar el cual debe ser menor o igual al monto originalmente autorizado.

Para capturar una transacción, ésta debe haber sido creada (según lo visto anteriormente para Webpay Plus o Webpay Plus Mall) por un código de comercio configurado para captura diferida. De esa forma la transacción estará autorizada pero requerirá una captura explícita posterior para confirmar la transacción.

Puedes leer más sobre la captura en la información del producto Webpay para conocer más detalles y restricciones.

Para realizar esa captura explícita debe usarse el método Transaction.capture()

Transaction.capture()

Permite solicitar a Webpay la captura diferida de una transacción con autorización y sin captura simultánea.

Los SDKs permiten indicar opcionalmente el código de comercio de la transacción a capturar, para soportar la captura en comercios Webpay Plus Mall o Transacción Completa Mall. En comercios sin modalidad Mall no es necesario especificar el código de comercio, ya que se usa el indicado en la configuración.

import cl.transbank.webpay.exception.CaptureTransactionException;
import cl.transbank.webpay.webpayplus.WebpayPlus;
import cl.transbank.webpay.webpayplus.model.CaptureWebpayPlusTransactionResponse;
import java.util.Random;
public class IntegrationExample {
    public static void main(String[] args) {
        String token = "ef6bf196cae9d38744974e4da61e004135ea2d8774a063d33d2c58ea5730a0d2";
        String buyOrder = String.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        String authorizationCode = "some_valid_authorization_code";
        double amount = 1000;
        try {
            final CaptureWebpayPlusTransactionResponse response = WebpayPlus.DeferredTransaction.capture(token, buyOrder, authorizationCode, amount);
            final String authorizationCodeResp = response.getAuthorizationCode();
            final String authorizationDate = response.getAuthorizationDate();
            final double capturedAmount = response.getCapturedAmount();
            final byte responseCode = response.getResponseCode();
        } catch (CaptureTransactionException e) {
            e.printStackTrace();
        }
    }
}
// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
PUT /rswebpaytransaction/api/webpay/v1.0/transactions/{token}/capture
Tbk-Api-Key-Id: 597055555531 
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "commerce_code": "597055555531", 
  "buy_order": "415034240",
  "authorization_code": "12345",
  "capture_amount": 1000
}

Parámetros

Nombre
tipo
Descripción
token
String
Token de la transacción. Largo: 64. (Se envía en la URL, no en el body)
commerce_code
Number
(Opcional, solo usar en caso Mall) Tienda hija que realizó la transacción. Largo: 12.
buy_order
String
Orden de compra de la transacción que se requiere capturar. Largo máximo: 26.
authorization_code
String
Código de autorización de la transacción que se requiere capturar Largo máximo: 6.
capture_amount
Decimal
Monto que se desea capturar. Largo máximo: 17.

Respuesta

// Este SDK aún no se encuentra disponible
// Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
# Este SDK aún no se encuentra disponible
200 OK
Content-Type: application/json
{
  "token": "e074d38c628122c63e5c0986368ece22974d6fee1440617d85873b7b4efa48a3",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "captured_amount": 1000,
  "response_code": 0
}
Nombre
tipo
Descripción
token
String
Token de la transacción. Largo máximo: 64
authorization_code
String
Código de autorización de la captura diferida. Largo máximo: 6
authorization_date
String
Fecha y hora de la autorización.
captured_amount
Decimal
Monto capturado. Largo máximo: 6
response_code
Number
Código de resultado de la captura. Si es exitoso es 0,de lo contrario la captura no fue realizada. Largo máximo: 2

En caso de error pueden aparecer los siguientes códigos exclusivos del método Transaction.capture():

Código Descripción
304 Validación de campos de entrada nulos
245 Código de comercio no existe
22 El comercio no se encuentra activo
316 El comercio indicado no corresponde al certificado o no es hijo del comercio Mall en caso de transacciones MALL
308 Operación no permitida
274 Transacción no encontrada
16 La transacción no es de captura diferida
292 La transacción no está autorizada
284 Periodo de captura excedido
310 Transacción reversada previamente
309 Transacción capturada previamente
311 Monto a capturar excede el monto autorizado
315 Error del autorizador

Códigos y mensajes de error

Al realizar cualquier solicitud al API REST, además de los datos de respuesta, se incluirá uno de los siguientes códigos de estado de respuesta HTTP dependiendo del resultado obtenido:

Solicitud exitosa

Cuando la operación solcitada es ejecutada correctamente, se pueden recibir estos status HTTP:

Código de estado HTTP Descripción
200 La operación se ha ejecutado exitosamente
204 La operación DELETE se ha ejecutado exitosamente

Códigos de error

Todos los errores reportados por la API REST de Webpay despliegan un mensaje JSON con una descripción del error.

{
  "error_message": "token is required"
}
Código de estado HTTP Descripción
400 El mensaje JSON es inválido. Puedes ser que no corresponda a un mensaje bien estructurado o que contenga un campo no esperado.
401 No autorizado. API Key y/o API Secret inválidos
404 La transacción no ha sido encontrada.
405 Método no permitido.
406 No fue posible procesar la respuesta en el formato que el cliente indica.
415 Tipo de mensaje no permitido.
422 El requerimiento no ha podido ser procesado ya sea por validaciones de datos o por lógica de negocios.
500 Ha ocurrido un error inesperado.

Puesta en Producción

  1. Una vez que el comercio determine que ha finalizado su integración, se debe realizar un proceso de validación.

  2. Una vez que Transbank confirme que la planilla de integración se encuentra correcta (no aplica para plugins), se enviara al comercio la confirmación y se generara su secreto compartido, el cual en conjunto con el codigo de comercio, permiten operar en producción.

  3. Cuando recivas el correo, será necesario cambiar la configuración del e-commerce para funcionar en producción

  4. Con la configuración del ambiente de producción ya lista, será necesario realizar una compra de $10 para validar el correcto funcionamiento.

Proceso de validación

Durante la validación de la integración se pretende verificar que el comercio transacciona de manera segura y sin problemas, por lo que se solicitarán una serie de pruebas y su posterior envío de evidencias para validar la integración. Esta validación es requisito necesario para dejar al comercio en producción y no se permitirá que un comercio utilice productivamente el servicio sin poseer una validación.

Transbank solo validará las integraciones de aquellos comercios que tengan un código de comercio productivo. Para obtenerlo, sigue las instrucciones para hacerte cliente en el portal http://www.transbank.cl o contacta a tu ejecutivo comercial.

En esta etapa, el comercio envía las evidencias a [email protected] empleando el formulario correspondiente al producto integrado indicando claramente las órdenes de compra, fecha y hora de las transacciones. Para integraciones Webpay que utilicen algún plugin oficial existe un formulario especial.

Descargar el formulario de envidencias

Soporte validará que los casos de prueba sean consistentes con los registrados en los sistemas de Webpay y, de estar todo correcto, se le notificará al comercio la conformidad para pasar a producción, recibiendo las instrucciones para ello. De no estar consistentes las pruebas, se le hará alcances al comercio respecto de su integración, para que realices las correcciones correspondientes y vuelvas a enviar las evidencias una vez terminadas dichas correcciones.

En el proceso de contratación reciviste tu codigo de comercio, y junto con el secreto compartido que se te entrego luego de la certificacion puedes completar tus credenciales, las cuales Debes custodiar y evitar que caigan en manos de terceros ya que permiten hacer transacciones en nombre de tu comercio.

  • Codigo de comercio (API Key)
  • Secreto Compartido (Shared Secret))

Luego que el proceso de validación de tu ingegración está terminado, debes realizar la configuración para que tu sitio se encuentre en producción.

Configuración para producción utilizando los SDK

Si estas utilizando algún SDK ofifcial de Transbank, entonces debes seguir los siguientes pasos.

  1. Remover la configuración para el ambiente de integración.

Antes de crear la nueva configuración para el ambiente de producción será necesario eliminar la actual comfiguración para el ambiente de pruebas.

  1. Asignar el código de comercio productivo, entregado por Transbank al momento de contratar el producto.
OneclickMall.setCommerceCode(config.getOneclickMallCommerceCode());
  1. Configuración del secreto compartido.
OneclickMall.setApiKey(config.getOneclickMallApiKey());
  1. Selección del ambiente productivo.
OneclickMall.setIntegrationType(IntegrationType.LIVE);