API Referencia
undefined

Transacción Completa


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 (código de comercio) y Tbk-Api-Key-Secret (llave secreta).

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

Tarjetas y usuarios de prueba

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: Código de comercio
// Tbk-Api-Key-Secret: Llave secreta
// Content-Type: application/json
// Tbk-Api-Key-Id: Código de comercio
// Tbk-Api-Key-Secret: Llave secreta
// Content-Type: application/json
// Tbk-Api-Key-Id: Código de comercio
// Tbk-Api-Key-Secret: Llave secreta
// Content-Type: application/json
# Tbk-Api-Key-Id: Código de comercio
# Tbk-Api-Key-Secret: Llave secreta
# Content-Type: application/json
# Tbk-Api-Key-Id: Código de comercio
# Tbk-Api-Key-Secret: Llave secreta
# Content-Type: application/json
Tbk-Api-Key-Id: Código de comercio
Tbk-Api-Key-Secret: Llave secreta
Content-Type: application/json
// Tbk-Api-Key-Id: Código de comercio
// Tbk-Api-Key-Secret: Llave secreta
// 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.

Códigos de comercio

En la documentación puedes revisar todos los códigos de comercio del ambiente de integración

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.

Transacción Completa

Crear una Transacción Completa

Puedes revisar más detalles de esta operación en su documentación

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.

final FullTransactionCreateResponse response =  FullTransaction.Transaction.create(
  buyOrder,                         // ordenCompra12345678
  sessionId,                        // sesion1234564
  amount,                           // 10000
  cardNumber,                       // 123
  cardExpirationDate,               // 4239000000000000
  cvv                               // 22/10
);
use Transbank\TransaccionCompleta\Transaction;

$transaction = new Transaction();
$response = $transaction->create(
  $buy_order,                       // ordenCompra12345678
  $session_id,                      // sesion1234564
  $amount,                          // 10000
  $cvv,                             // 123
  $card_number,                     // 4239000000000000
  $card_expiration_date             // 22/10
);
FullTransaction.Create(
  buyOrder: buy_order,                        // ordenCompra12345678
  sessionId: session_id,                      // sesion1234564
  amount: amount,                             // 10000
  cvv: cvv,                                   // 123
  cardNumber: card_number,                    // 4239000000000000
  cardExpirationDate: card_expiration_date    // 22/10
);
Transbank::TransaccionCompleta::Transaction::create(
  buy_order: 'ordenCompra12345678',
  session_id: 'sesion1234564',
  amount: 10000,
  card_number: 4239000000000000,
  cvv: 123,
  card_expiration_date: '22/10'
)
from transbank.transaccion_completa.transaction import Transaction
#...
Transaction.create(
    buy_order = 'ordenCompra12345678',
    session_id = 'sesion1234564',
    amount = 10000,
    card_number = 4239000000000000,
    cvv = 123,
    card_expiration_date = '22/10'
)
POST /rswebpaytransaction/api/webpay/v1.2/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"
}
const response = await TransaccionCompleta.transaction.create(buyOrder, sessionId, amount, cvv, cardNumber, cardExpirationDate);

Parámetros Transaction.create

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 Transaction.create

response.getToken();
$response->getToken();
response.Token;
response.token
response.token
200 OK
Content-Type: application/json

{
  "token": "e074d38c628122c63e5c0986368ece22974d6fee1440617d85873b7b4efa48a3",
}
response.token
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.

final FullTransactionInstallmentsResponse response =  FullTransaction.Transaction.installment(token, installments_number);
use Transbank\TransaccionCompleta\Transaction;

$token = "token obtenido como respuesta de la creacion de transaccion";
$installmentsNumber = 10; // numero de cuotas;

$transaction = new Transaction();
$response = $transaction->installments(
    $token,
    $installmentsNumber
);
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.2/transactions/{token}/installments

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

{
  "installments_number": 10
}
const response = await TransaccionCompleta.Transaction.installments(token, installmentsNumber);

Parámetros Transaction.installments

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 Transaction.installments

response.getInstallmentsAmount();
response.getIdQueryInstallments();
DeferredPeriod deferredPeriod = response.getDeferredPeriods()[0];
deferredPeriod.getAmount();
deferredPeriod.getPeriod();
$response->getInstallmentsAmount();
$response->getIdQueryInstallments();
$response->getDeferredPeriods();
response.InstallmentsAmount;
respone.IdQueryInstallments;
response.DeferredPeriods;
response.installments_amount
response.id_query_installments
response.deferred_periods
response.installments_amount
response.id_query_installments
response.deferred_periods
response.installments_amount
response.id_query_installments
response.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;

final FullTransactionCommitResponse response = FullTransaction.Transaction.commit(
  token, idQueryInstallments, deferredPeriodIndex, gracePeriod
);
use Transbank\TransaccionCompleta\Transaction;
//...
$transaction = new 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.2/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
}
const response = await TransaccionCompleta.Transaction.commit(
    token, idQueryInstallments, deferredPeriodIndex, gracePeriod);

Parámetros Transaction.commit

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 Transaction.commit

response.getAccountingDate();
response.getAmount();
response.getAuthorizationCode();
response.getBuyOrder();
CardDetail cardDetail = response.getCardDetail();
cardDetail.getCardNumber();
response.getInstallmentsAmount();
response.getInstallmentsNumber();
response.getPaymentCodeType();
response.getResponseCode();
response.getSessionId();
response.getTransactionDate();
$response->getAccountingDate();
$response->getAmount();
$response->getAuthorizationCode();
$response->getBuyOrder();
$cardDetail = $response->getCardDetail();
$cardDetail->getCardNumber();
$response->getInstallmentsAmount();
$response->getInstallmentsNumber();
$response->getPaymentCodeType();
$response->getResponseCode();
$response->getSessionId();
$response->getTransactionDate();
response.AccountingDate;
response.Amount;
response.AuthorizationCoda;
response.BuyOrder;
var cardDetail = response.CardDetail;
cardDetail.CardNumber;
response.InstallmentsAmount;
response.InstallmentsNumber;
response.PaymentTypeCode;
response.ResponseCode;
response.SessionId;
response.Status;
response.TransactionDate;
response.amount
response.status
response.buy_order
response.session_id
response.card_number
response.accounting_date
response.transaction_date
response.authorization_code
response.payment_type_code
response.response_code
response.installments_number
response.installments_amount
response.balance
response.amount
response.status
response.buy_order
response.session_id
response.card_number
response.accounting_date
response.transaction_date
response.authorization_code
response.payment_type_code
response.response_code
response.installments_number
response.installments_amount
response.balance
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
}
response.amount
response.status
response.buy_order
response.session_id
response.card_number
response.accounting_date
response.transaction_date
response.authorization_code
response.payment_type_code
response.response_code
response.installments_number
response.installments_amount
response.balance
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
Puedes revisar los códigos de respuesta de rechazo en el siguiente link
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;

final FullTransactionStatusResponse response = FullTransaction.Transaction.status(token);
use Transbank\TransaccionCompleta\Transaction;

$transaction = new Transaction();
$transaction->status($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.2/transactions/{token}
Tbk-Api-Key-Id: 597055555530
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json
const response = await TransaccionCompleta.Transaction.status(token);

Parámetros Transaction.status

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

Respuesta Transaction.status

response.getAccountingDate();
response.getAmount();
response.getAuthorizationCode();
response.getBuyOrder();
CardDetail cardDetail = response.getCardDetail();
cardDetail.getCardNumber();
response.getInstallmentsAmount();
response.getInstallmentsNumber();
response.getPaymentCodeType();
response.getResponseCode();
response.getSessionId();
response.getTransactionDate();
$response->getAccountingDate();
$response->getAmount();
$response->getAuthorizationCode();
$response->getBuyOrder();
$cardDetail = $response->getCardDetail();
$cardDetail->getCardNumber();
$response->getInstallmentsAmount();
$response->getInstallmentsNumber();
$response->getPaymentCodeType();
$response->getResponseCode();
$response->getSessionId();
$response->getTransactionDate();
response.AccountingDate;
response.Amount;
response.AuthorizationCoda;
response.BuyOrder;
var cardDetail = response.CardDetail;
cardDetail.CardNumber;
response.InstallmentsAmount;
response.InstallmentsNumber;
response.PaymentTypeCode;
response.ResponseCode;
response.SessionId;
response.Status;
response.TransactionDate;
response.amount
response.status
response.buy_order
response.session_id
response.card_number
response.accounting_date
response.transaction_date
response.authorization_code
response.payment_type_code
response.response_code
response.installments_number
response.installments_amount
response.balance
response.amount
response.status
response.buy_order
response.session_id
response.card_number
response.accounting_date
response.transaction_date
response.authorization_code
response.payment_type_code
response.response_code
response.installments_number
response.installments_amount
response.balance
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
}
response.amount
response.status
response.buy_order
response.session_id
response.card_number
response.accounting_date
response.transaction_date
response.authorization_code
response.payment_type_code
response.response_code
response.installments_number
response.installments_amount
response.balance
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
Puedes revisar los códigos de respuesta de rechazo en el siguiente link
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;

final FullTransactionRefundResponse response = FullTransaction.Transaction.refund(token,amount);
use Transbank\TransaccionCompleta\Transaction;

$transaction = new Transaction();
$transaction->refund($token, $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.2/transactions/{token}/refunds
Tbk-Api-Key-Id: 597055555530
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
 "amount": 1000
}
const response = await TransaccionCompleta.Transaction.refund(token, amount);

Parámetros Transaction.refund

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 Transaction.refund

En el caso de que la transacción corresponda a una Reversa solo se retorna el parámetro type (REVERSED).

response.getType();
response.getAuthorizationCode();
response.getAuthorizationDate();
response.getNullifiedAmount();
response.getBalance();
response.getResponse();
$response->getType();
$response->getAuthorizationCode();
$response->getAuthorizationDate();
$response->getNullifiedAmount();
$response->getBalance();
$response->getResponse();
response.AuthorizationCode;
response.AuthorizationDate;
response.Balance;
response.NullifiedAmount;
response.ResponseCode;
response.Type;
response.type
response.authorization_code
response.authorization_date
response.nullified_amount
response.balance
response.response_code
response.type
response.authorization_code
response.authorization_date
response.nullified_amount
response.balance
response.response_code
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
}
response.type
response.authorization_code
response.authorization_date
response.nullified_amount
response.balance
response.response_code
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.

Captura Diferida

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

Válido para :

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

Ejecutar captura diferida Transaccion Completa

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.

PUT /rswebpaytransaction/api/webpay/v1.2/transactions/{token}/capture
Tbk-Api-Key-Id: 597055555531
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json

{
  "buy_order": "415034240",
  "authorization_code": "12345",
  "capture_amount": 1000
}
Transbank::TransaccionCompleta::Transaction.capture(
  token: token,
  buy_order: buy_order,
  authorization_code: authorization_code,
  capture_amount: capture_amount
)
const response = TransaccionCompleta.DeferredTransaction.capture(
  token, buyOrder, authorizationCode, amount
);
use Transbank\TransaccionCompleta\Transaction;

$transaction = new Transaction();
$transaction->capture($token, $buyOrder, $authorizationCode, $captureAmount);
import cl.transbank.transaccioncompleta.FullTransaction;

final FullTransactionCaptureResponse response = FullTransaction.Transaction.capture(token, buyOrder, authorizationCode, captureAmount);
from transbank.transaccion_completa.transaction import Transaction

Transaction.capture(token, buy_order, authorization_code, capture_amount)

Parámetros Transaction.capture

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.
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 Transaction.capture

200 OK
Content-Type: application/json
{
  "token": "e074d38c628122c63e5c0986368ece22974d6fee1440617d85873b7b4efa48a3",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "captured_amount": 1000,
  "response_code": 0
}
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
$response->getToken();
$response->getAuthorizationCode();
$response->getAuthorizationDate();
$response->getCapturedAmount();
$response->getResponseCode();
response.token
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
response.token
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
response.getToken();
response.getAuthorizationCode();
response.getAuthorizationDate();
response.getCapturedAmount();
response.getResponseCode();
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

Transacción Completa Mall

Puedes revisar más detalles de esta operación en su documentación

Crear una Transacción Completa Mall

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

Transaction.create() Completa Mall

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

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

final MallFullTransactionCreateResponse response = MallFullTransaction.Transaction.create(
  buyOrder,                           // ordenCompra12345678
  sessionId,                          // sesion1234564
  cardNumber,                         // 4239000000000000
  cardExpirationDate,                 // 22/10
  transactionDetails
);
use Transbank\TransaccionCompleta\MallTransaction;
use Transbank\TransaccionCompleta\TransaccionCompleta;

$transaction_details = [
    [
        'amount' => 10000,
        'commerce_code' => TransaccionCompleta::DEFAULT_MALL_CHILD_COMMERCE_CODE_1,
        'buy_order' => '123456789'
    ],
    [
        'amount' => 12000,
        'commerce_code' => TransaccionCompleta::DEFAULT_MALL_CHILD_COMMERCE_CODE_2,
        'buy_order' => '123456790'
    ],
];
$cardNumber = '4051885600446623';
$cardExpirationDate = '22/12';
$cvv = '123';

$transaction = new MallTransaction();
$response = $transaction->create(
    'buyOrder1',                         // ordenCompra12345678
    'sessionId' ,                        // sesion1234564
    $cardNumber,                       // 4239000000000000
    $cardExpirationDate,              // 22/10
    $transaction_details,
    $cvv);

print_r($response);
using Transbank.Webpay.TransaccionCompletaMall;

var transactionDetails = new List<CreateDetails>();
transactionDetails.Add(new CreateDetails(
    amountMallOne,
    commerceCodeMallOne,
    buyOrderMallOne
));
transactionDetails.Add(new CreateDetails(
    amountMallTwo,
    comerceCodeMallTwo,
    buyOrderMallTwo
));

var response = MallFullTransaction.Create(
  buyOrder,
  sessionId,
  cardNumber,
  cardExpirationDate,
  transactionDetails
);
details = [
  {
    amount: 10000,
    commerce_code: 597055555552,
    buy_order: '123456789'
  },
  {
    amount: 12000,
    commerce_code: 597055555553,
    buy_order: '123456790'
  }
]
response = Transbank::TransaccionCompleta::MallTransaction::create(
  buy_order: 'ordenCompra12345678',
  session_id: 'sesion1234564',
  card_number: 4239000000000000,
  card_expiration_date: '22/10',
  details: details
)
details = [
  {
      'commerce_code': 597055555552,
      'buy_order': '123456789',
      'amount': 10000
  },
  {
      'commerce_code': 597055555553,
      'buy_order': '123456790',
      'amount': 12000
  }
]

response = Transaction.create(
  buy_order=buy_order,
  session_id=session_id,
  card_number=card_number, card_expiration_date=card_expiration_date, details=details
)
POST /rswebpaytransaction/api/webpay/v1.2/transactions

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

{
  "buy_order": "ordenCompra12345678",
  "session_id": "sesion1234564",
  "card_number": "4239000000000000",
  "cvv": 123,
  "card_expiration_date": "22/10",
  "details": [
    {
      "amount": 10000,
      "commerce_code": "597055555552",
      "buy_order": "123456789"
    },
    {
      "amount": 10000,
      "commerce_code": "597055555553",
      "buy_order": "123456790"
    }
  ]
}
const details = [
  new TransactionDetail(amount, commerceCode, childBuyOrder),
  new TransactionDetail(amount2, commerceCode2, childBuyOrder2)
];

const response = await TransaccionCompleta.MallTransaction.create(        
  parentBuyOrder,        
  sessionId,        
  cvv,        
  cardNumber,        
  cardExpirationDate,        
  details
);

Parámetros Transaction.create Completa Mall

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
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_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 Transaction.create Completa Mall

response.getToken();
$response->getToken();
response.Token;
response.token
response.token
200 OK
Content-Type: application/json

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

Consulta de cuotas Completa Mall

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

Transaction.installments() Completa Mall

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.

MallFullTransactionInstallmentsDetails installmentsDetails = MallFullTransactionInstallmentsDetails.build().add(commerceCode, buyOrder, installmentsNumber);
final MallFullTransactionInstallmentsResponse response = MallFullTransaction.Transaction.installment(token, installmentsDetails);
use Transbank\TransaccionCompleta;
use Transbank\TransaccionCompleta\MallTransaction;

$transaction = new MallTransaction();

$installments_details = [
    [
        'commerce_code' => TransaccionCompleta::DEFAULT_MALL_CHILD_COMMERCE_CODE_1,
        'buy_order' => '123456789',
        'installments_number' => 2
    ],
    [
        'commerce_code' => TransaccionCompleta::DEFAULT_MALL_CHILD_COMMERCE_CODE_2,
        'buy_order' => '123456790',
        'installments_number' => 2
    ],
];

$response = $transaction->installments($token, $installments_details);
print_r($response);
using Transbank.Webpay.TransaccionCompletaMall;

var installmentsDetails = new List<MallInstallmentsDetails>();
installmentsDetails.Add(new CreateDetails(
    commerceCodeMallOne,
    buyOrderMallOne,
    installmentsNumberMallOne
));
installmentsDetails.Add(new CreateDetails(
    comerceCodeMallTwo,
    buyOrderMallTwo,
    installmentsNumberMallTwo
));

var response = MallFullTransaction.Installments(
  token, installmentDetails
);
installment_details = [
  {
    commerce_code: 597055555552,
    buy_order: '123456789',
    installments_number: 2
  },
  {
    commerce_code: 597055555553,
    buy_order: '123456790',
    installments_number: 2
  },
]

response = Transbank::TransaccionCompleta::MallTransaction::installments(token, installment_details)
from transbank.transaccion_completa_mall.transaction import Transaction

details = [
  {
    'commerce_code': 597055555552,
    'buy_order': '123456789',
    'installments_number': 2
  },
  {
    'commerce_code': 597055555553,
    'buy_order': '123456790',
    'installments_number': 2
  }
]

response = Transaction.installments(token=token, details=details)
POST /rswebpaytransaction/api/webpay/v1.2/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
}
const details = [
  new InstallmentDetail(childCommerceCode, childBuyOrder, installmentsNumber),
  new InstallmentDetail(childCommerceCode2, childBuyOrder2, installmentsNumber2)
  ];        

const response = await TransaccionCompleta.MallTransaction.installments(        
  token,        
  details
);

Parámetros Transaction.installments Completa Mall

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 Transaction.installments Completa Mall

response.getInstallmentsAmount();
response.getIdQueryInstallments();
DeferredPeriod deferredPeriod = response.getDeferredPeriods()[0];
deferredPeriod.getAmount();
deferredPeriod.getPeriod();
$firstResponse = $response[0];
$firstResponse->getInstallmentsAmount();
$firstResponse->getIdQueryInstallments();
$deferredPeriods = $firstResponse->getDeferredPeriods();
if (isset($deferredPeriods[0])) {
    $deferredPeriod = $deferredPeriods[0];
    $deferredPeriod->getAmount();
    $deferredPeriod->getPeriod();
}
response.InstallmentsAmount;
response.IdQueryInstallments;
var deferredPeriod = response.DeferredPeriods[0];
deferredPeriod.Amount;
deferredPeriod.Period;
response.installments_amount
response.id_query_installments
deferred_period = response.deferred_periods[0]
deferred_period.amount
deferred_period.period
response.installments_amount
response.id_query_installments
deferred_period = response.deferred_periods[0]
deferred_period.amount
deferred_period.period
200 OK
Content-Type: application/json

{
  "installments_amount": 3334,
  "id_query_installments": 11,
  "deferred_periods": [
    {
      "amount": 1000,
      "period": 1
    }
  ]
}
response.installment_amount
response.id_query_installment
deferred_period = response.deferred_periods[0]
deferred_period.amount
deferred_period.period
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 Completa Mall

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() Completa Mall

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

MallTransactionCommitDetails details = MallTransactionCommitDetails.build().add(
  commerceCode,buyOrder,idQueryInstallments,deferredPeriodIndex,gracePeriod
);

final MallFullTransactionCommitResponse response = MallFullTransaction.Transaction.commit(token, details);
use Transbank\TransaccionCompleta;
use Transbank\TransaccionCompleta\MallTransaction;

$details = [
    [
        'commerce_code' => TransaccionCompleta::DEFAULT_MALL_CHILD_COMMERCE_CODE_1,
        'buy_order' => '123456789',
        'id_query_installments' => $firstInstallmentResponse->getIdQueryInstallments(),
        'deferred_period_index' => null,
        'grace_period' => false
    ],
    [
        'commerce_code' => TransaccionCompleta::DEFAULT_MALL_CHILD_COMMERCE_CODE_2,
        'buy_order' => '123456790',
        'id_query_installments' => $secondInstallmentResponse->getIdQueryInstallments(),
        'deferred_period_index' => null,
        'grace_period' => false
    ]
];

$transaction = new MallTransaction();
$response = $transaction->commit($token, $details);
print_r($response);
using Transbank.Webpay.TransaccionCompletaMall;

var transactionDetails = new List<MallCommitDetails>();
transactionDetails.Add(new MallCommitDetails(
    commerceCodeMallOne,
    buyOrderMallOne,
    idQueryInstallmentsOne,
    deferredPeriodIndexOne,
    gracePeriodOne
));
transactionDetails.Add(new MallCommitDetails(
    commerceCodeMallTwo,
    buyOrderMallTwo,
    idQueryInstallmentsTwo,
    deferredPeriodIndexTwo,
    gracePeriodTwo
));

var response = MallFullTransaction.Commit(
  token, transactionDetails
);
details = [
  {
    commerce_code: '597055555552',
    buy_order: 'ordenCompra1234',
    id_query_installments: 12,
    deferred_period_index: 1,
    grace_period: false
  },
  {
    commerce_code: '597055555553',
    buy_order: 'ordenCompra12345',
    id_query_installments: 12,
    deferred_period_index: 1,
    grace_period: false
  }
]

response = Transbank::TransaccionCompleta::MallTransaction::commit(
  token: token, details: details
)
details = [
  {
    "commerce_code": '597055555552',
    "buy_order": 'ordenCompra1234',
    "id_query_installments": 12,
    "deferred_period_index": 1,
    "grace_period": false
  },
  {
    "commerce_code": '597055555553',
    "buy_order": 'ordenCompra12345',
    "id_query_installments": 12,
    "deferred_period_index": 1,
    "grace_period": false
  }
]

response = Transaction.commit(
  token=token, details=details
)
PUT /rswebpaytransaction/api/webpay/v1.2/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
    }
  ]
}
let commitDetails = [
  new CommitDetail(commerceCode, childBuyOrder),
  new CommitDetail(commerceCode2, childBuyOrder2)
];        
const response = await TransaccionCompleta.MallTransaction.commit(        
  token,        
  commitDetails
);
print_r($response);
//Transbank\TransaccionCompleta\Responses\MallTransactionCommitResponse Object
//(
//    [buyOrder] => buyOrder1
//    [cardDetail] => Array
//        (
//            [card_number] => 6623
//        )
//
//    [accountingDate] => 0414
//    [transactionDate] =>
//    [details] => Array
//        (
//            [0] => Array
//                (
//                    [amount] => 10000
//                    [status] => AUTHORIZED
//                    [authorization_code] => 1213
//                    [payment_type_code] => S2
//                    [response_code] => 0
//                    [installments_amount] => 5000
//                    [installments_number] => 2
//                    [commerce_code] => 597055555574
//                    [buy_order] => 123456789
//                )
//
//            [1] => Array
//                (
//                    [amount] => 12000
//                    [status] => AUTHORIZED
//                    [authorization_code] => 1213
//                    [payment_type_code] => S2
//                    [response_code] => 0
//                    [installments_amount] => 5000
//                    [installments_number] => 2
//                    [commerce_code] => 597055555575
//                    [buy_order] => 123456790
//                )
//
//        )
//
//)

Parámetros Transaction.commit Completa Mall

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 Transaction.commit Completa Mall

response.getBuyOrder();
response.getCardNumber();
response.getAccountingDate();
response.getTransactionDate();
Detail detail = response.getDetails()[0];
detail.getAuthorizationCode();
detail.getPaymentCodeType();
detail.getResponseCode();
detail.getInstallmentsAmount();
detail.getInstallmentsNumber();
detail.getAmount();
detail.getCommerceCode();
detail.getBuyOrder();
detail.getStatus();
detail.getBalance();
$response->getBuyOrder();
$response->getCardNumber();
$response->getAccountingDate();
$response->getTransactionDate();
$detail = $response->getDetails()[0];
$detail->getAuthorizationCode();
$detail->getPaymentTypeCode();
$detail->getResponseCode();
$detail->getInstallmentsAmount();
$detail->getInstallmentsNumber();
$detail->getAmount();
$detail->getCommerceCode();
$detail->getBuyOrder();
$detail->getStatus();
response.BuyOrder;
response.CardNumber;
response.AccountingDate;
response.TransactionDate;
detail = response.Details[0];
detail.AuthorizationCode;
detail.PaymentCodeType;
detail.ResponseCode;
detail.InstallmentsAmount;
detail.InstallmentsNumber;
detail.Amount;
detail.CommerceCode;
detail.BuyOrder;
detail.Status;
detail.Balance;
response.buy_order
response.card_number
response.accounting_date
response.transaction_date
detail = response.details[0]
detail.authorization_code
detail.payment_code_type
detail.response_code
detail.installments_amount
detail.installments_number
detail.amount
detail.commerce_code
detail.buy_order
detail.status
detail.balance
response.buy_order
response.card_number
response.accounting_date
response.transaction_date
detail = response.details[0]
detail.authorization_code
detail.payment_code_type
detail.response_code
detail.installments_amount
detail.installments_number
detail.amount
detail.commerce_code
detail.buy_order
detail.status
detail.balance
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"
    }
  ]
}
response.buy_order
response.card_number
response.accounting_date
response.transaction_date
detail = response.details[0]
detail.authorization_code
detail.payment_code_type
detail.response_code
detail.installments_amount
detail.installments_number
detail.amount
detail.commerce_code
detail.buy_order
detail.status
detail.balance
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
Puedes revisar los códigos de respuesta de rechazo en el siguiente link
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 Completa Mall

Esta operación permite obtener el estado de la transacción Completa Mall 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() Completa Mall

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

MallFullTransaction.Transaction.status(token)
use Transbank\TransaccionCompleta\MallTransaction;

$response = (new MallTransaction)->status(token);
using Transbank.Webpay.TransaccionCompletaMall;

MallFullTransaction.Status(token);
Transbank::TransaccionCompleta::MallTransaction::status(token)
Transaction.status(token)
GET /rswebpaytransaction/api/webpay/v1.2/transactions/{token}
Tbk-Api-Key-Id: 597055555551
Tbk-Api-Key-Secret: 579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C
Content-Type: application/json
const response = await TransaccionCompleta.MallTransaction.status(token);

Parámetros Transaction.status Completa Mall

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

Respuesta Transaction.status Completa Mall

response.getBuyOrder();
response.getCardNumber();
response.getAccountingDate();
response.getTransactionDate();
Detail detail = response.getDetails()[0];
detail.getAuthorizationCode();
detail.getPaymentCodeType();
detail.getResponseCode();
detail.getInstallmentsAmount();
detail.getInstallmentsNumber();
detail.getAmount();
detail.getCommerceCode();
detail.getBuyOrder();
detail.getStatus();
detail.getBalance();
$response->getBuyOrder();
$response->getCardNumber();
$response->getAccountingDate();
$response->getTransactionDate();
$detail = $response->getDetails()[0];
$detail->getAuthorizationCode();
$detail->getPaymentTypeCode();
$detail->getResponseCode();
$detail->getInstallmentsAmount();
$detail->getInstallmentsNumber();
$detail->getAmount();
$detail->getCommerceCode();
$detail->getBuyOrder();
$detail->getStatus();
response.BuyOrder;
response.CardNumber;
response.AccountingDate;
response.TransactionDate;
detail = response.Details[0];
detail.AuthorizationCode;
detail.PaymentCodeType;
detail.ResponseCode;
detail.InstallmentsAmount;
detail.InstallmentsNumber;
detail.Amount;
detail.CommerceCode;
detail.BuyOrder;
detail.Status;
detail.Balance;
response.buy_order
response.card_number
response.accounting_date
response.transaction_date
detail = response.details[0]
detail.authorization_code
detail.payment_code_type
detail.response_code
detail.installments_amount
detail.installments_number
detail.amount
detail.commerce_code
detail.buy_order
detail.status
detail.balance
response.buy_order
response.card_number
response.accounting_date
response.transaction_date
detail = response.details[0]
detail.authorization_code
detail.payment_code_type
detail.response_code
detail.installments_amount
detail.installments_number
detail.amount
detail.commerce_code
detail.buy_order
detail.status
detail.balance
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"
    }
  ]
}
response.buy_order
response.card_number
response.accounting_date
response.transaction_date
detail = response.details[0]
detail.authorization_code
detail.payment_code_type
detail.response_code
detail.installments_amount
detail.installments_number
detail.amount
detail.commerce_code
detail.buy_order
detail.status
detail.balance
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
Puedes revisar los códigos de respuesta de rechazo en el siguiente link
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 Mall

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() Completa Mall

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

final MallFullTransactionRefundResponse response = MallFullTransaction.Transaction.refund(
  token, amount, commerceCode, buyOrder
);
use Transbank\TransaccionCompleta\MallTransaction;

(new MallTransaction)->refund(
  $token,
  $childBuyOrder,
  $childCommerceCode,
  $amount
);
using Transbank.Webpay.TransaccionCompletaMall;

MallRefundRequest(
  token,
  childBuyOrder,
  childCommerceCode,
  amount
);
Transbank::TransaccionCompleta::MallTransaction::refund(
  token: token,
  child_buy_order: child_buy_order,
  child_commerce_code: child_commerce_code,
  amount: amount
)
from transbank.transaccion_completa_mall.transaction import Transaction

Transaction.refund(
  token=token, amount=amount, child_commerce_code=child_commerce_code, child_buy_order=child_buy_order
)
POST /rswebpaytransaction/api/webpay/v1.2/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
}
const refundResponse = await TransaccionCompleta.MallTransaction.refund(        
  token,    
  buyOrder,        
  commerceCode,
  amount        
);

Parámetros Transaction.refund Completa Mall

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 Transaction.refund Completa Mall

En el caso de que la transacción corresponda a una Reversa solo se retorna el parámetro type (REVERSED).

response.getType();
response.getAuthorizationCode();
response.getAuthorizationDate();
response.getNullifiedAmount();
response.getBalance();
response.getResponseCode();
$response->getType();
$response->getAuthorizationCode();
$response->getAuthorizationDate();
$response->getNullifiedAmount();
$response->getBalance();
$response->getResponseCode();
response.Type;
response.AuthorizationCode;
response.AuthorizationDate;
response.NullifiedAmount;
response.Balance;
response.ResponseCode;
response.type
response.authorization_code
response.authorization_date
response.nullified_amount
response.balance
response.response_code
response.type
response.authorization_code
response.authorization_date
response.nullified_amount
response.balance
response.response_code
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
}
response.type
response.authorization_code
response.authorization_date
response.nullified_amount
response.balance
response.response_code
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 mall

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

Válido para :

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

Ejecutar captura diferida mall

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

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.

PUT /rswebpaytransaction/api/webpay/v1.2/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
}
Transbank::TransaccionCompleta::MallTransaction.capture(
  token: token,
  commerce_code: commerce_code,
  buy_order: buy_order,
  authorization_code: authorization_code,
  capture_amount: capture_amount
)
use Transbank\TransaccionCompleta\MallTransaction;

$transaction = new MallTransaction();
$transaction->capture($token, $commerceCode, $buyOrder, $authorizationCode, $captureAmount);
const response = TransaccionCompleta.MallDeferredTransaction.capture(
  token, commerceCode, buyOrder, authorizationCode, amount
);
from transbank.transaccion_completa_mall.transaction import Transaction

Transaction.capture(
  token, child_commerce_code, child_buy_order, authorization_code, capture_amount
)
final MallFullTransactionCaptureResponse response = MallFullTransaction.Transaction.capture(
  token, commerceCode, buyOrder, authorizationCode, captureAmount
);

Parámetros Transaction.capture

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 Transaction.capture

200 OK
Content-Type: application/json
{
  "token": "e074d38c628122c63e5c0986368ece22974d6fee1440617d85873b7b4efa48a3",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "captured_amount": 1000,
  "response_code": 0
}
$response->getToken();
$response->getAuthorizationCode();
$response->getAuthorizationDate();
$response->getCapturedAmount();
$response->getResponseCode();
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
response.getToken();
response.getAuthorizationCode();
response.getAuthorizationDate();
response.getCapturedAmount();
response.getResponseCode();
response.token
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
response.token
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
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

Puedes revisar el proceso necesario para operar en el ambiente de producción en la documentación

Configuración para producción utilizando los SDK

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

Revisa esta sección de la documentación para ver el código necesario para configurar tu propio código de comercio y Api Key Secret.