API Referencia
undefined

Oneclick


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

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

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

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:

Oneclick Mall

Revisa la documentación de Oneclick Mall para tener más información sobre como funciona el producto y tener más detalles sobre como realizar tu integración.

Crear una inscripción

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

Permite comenzar con el proceso de inscripción.

OneclickMallInscriptionStartResponse response = OneclickMall.Inscription.start(userName, email, responseUrl);
use Transbank\Webpay\Oneclick;

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

var response = Inscription.Start(userName, email, returnUrl);
response = Transbank::Webpay::Oneclick::MallInscription::start(
  user_name: user_name,
  email: email,
  response_url: response_url
)
MallInscription.start(
        user_name=user_name,
        email=email,
        response_url=response_url)
const Oneclick = require("transbank-sdk").Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

const response = await Oneclick.MallInscription.start(
  userName, email, responseUrl
);
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]l.com",
 "response_url": "http://www.comercio.cl/return_inscription"
}

Parámetros Crear una inscripción

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 Crear una inscripción

response.getToken();
response.getUrlWebpay();
$response->getToken();
$response->getUrlWebpay();
response.Token;
response.UrlWebpay
response.token
response.url_webpay
response.token
response.url_webpay
response.token
response.url_webpay
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

Permite finalizar el proceso de inscripción obteniendo el usuario tbk. Más información en la documentación.

final OneclickMallInscriptionFinishResponse response = OneclickMall.Inscription.finish(token);
use Transbank\Webpay\Oneclick;

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

var response = Inscription.Finish(token);
response = Transbank::Webpay::Oneclick::MallInscription::finish(token: token)
response = MallInscription.finish(token=token)
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

const response = await Oneclick.MallInscription.finish(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 Confirmar una inscripción

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 Confirmar una inscripción

response.getAuthorizationCode();
response.getCardType();
response.getCardNumber();
response.getResponseCode();
response.getTbkUser();
$response->getAuthorizationCode();
$response->getCardType();
$response->getCardNumber();
$response->getResponseCode();
$response->getTbkUser();
response.ResponseCode;
response.TransbankUser;
response.AuthorizationCode;
response.CardType;
response.CardNumber;
response.response_code
response.transbank_user
response.authorization_code
response.card_type
response.card_number
response.response_code
response.transbank_user
response.authorization_code
response.card_type
response.card_number
response.response_code
response.transbank_user
response.authorization_code
response.card_type
response.card_number
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, Redcompra).
Largo: 10.
card_number
String
Últimos 4 dígitos de la tarjeta inscrito:
Largo: 4.

Eliminar una inscripción

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

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.

Oneclick.MallInscription.delete(tbkUser, userName)
use Transbank\Webpay\Oneclick;

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

Inscription.Delete(userName, tbkUser);
MallInscription::delete(user_name: user_name, tbk_user: tbk_user)
MallInscription.delete(tbk_user, user_name)
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

const response = await Oneclick.MallInscription.delete(tbkUser, userName);
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 Eliminar una inscripción

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 Eliminar una inscripción

Esta petición no posee cuerpo de respuesta, solo entrega un 204 cuando se realiza correctamente

// 204 OK
// 204 OK
// 204 OK
# 204 OK
# 204 OK
// 204 OK
204 OK
Content-Type: application/json

Autorizar una transacción

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

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.

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

final OneclickMallTransactionAuthorizeResponse response = OneclickMall.Transaction.authorize(username, tbkUser, buyOrder, transactionDetails);
use Transbank\Webpay\Oneclick;

$details = [
    [
        "commerce_code" => "597055555542",
        "buy_order" => "ordenCompra123445",
        "amount" => 1000,
        "installments_number" => 5
    ]
];


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

List<PaymentRequest> details = new List<PaymentRequest>();
details.Add(new PaymentRequest(
  childCommerceCodeOne, buyOrderMallOne, amountMallOne, installmentsNumber
));
details.Add(new PaymentRequest(
  childCommerceCodeTwo, buyOrderMallTwo, amountMallTwo, installmentsNumber
));

var result = MallTransaction.Authorize(userName, tbkUser, buyOrder, details);
details = [
  {
    commerce_code: amountMallOne,
    buy_order: buyOrderMallOne,
    amount: amountMallOne,
    installments_number: installmentsNumberMallOne
  },
  {
    commerce_code: amountMallTwo,
    buy_order: buyOrderMallTwo,
    amount: amountMallTwo,
    installments_number: installmentsNumberMallTwo
  }
]

Transbank::Webpay::Oneclick::MallTransaction::authorize(username: username,
                                                       tbk_user: tbk_user,
                                                       parent_buy_order: buy_order,
                                                       details: details)
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
)
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
const TransactionDetail = require('transbank-sdk').TransactionDetail; // CommonJS
import { Oneclick, TransactionDetail } from 'transbank-sdk'; // ES6 Modules

const details = [
  new TransactionDetail(amount, commerceCode, childBuyOrder),
  new TransactionDetail(amount2, commerceCode2, childBuyOrder2)
];

const response = await Oneclick.MallTransaction.authorize(
  userName, tbkUser, buyOrder, 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 Autorizar un pago

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 Autorizar un pago

response.getAccountingDate();
response.getBuyOrder();
response.getTransactionDate();
final CardDetail cardDetail = response.getCardDetail();
cardDetail.getCardNumber();
final List<Detail> detailsResp = response.getDetails();
for (Detail detail : detailsResp) {
    detail.getAmount();
    detail.getAuthorizationCode();
    detail.getBuyOrder();
    detail.getCommerceCode();
    detail.getInstallmentsNumber();
    detail.getPaymentTypeCode();
    detail.getStatus();
}
$response->getAccountingDate();
$response->getBuyOrder();
$card_detail = response->getCardDetail();
$card_detail->getCardNumber();
$response->getTransactionDate();
$response->getVci();
$details = response->getDetails();
foreach($details as $detail){
    detail->getAmount();
    detail->getAuthorizationCode();
    detail->getBuyOrder();
    detail->getCommerceCode();
    detail->getInstallmentsNumber();
    detail->getPaymentTypeCode();
    detail->getResponseCode();
    detail->getStatus();
}
response.AccountingDate;
response.BuyOrder;
var cardDetail = response.CardDetail;
cardDetail.CardNumber;
response.SessionId;
response.TransactionDate;
response.Vci;
var details = response.Details;
foreach (var detail in details) {
    detail.Amount;
    detail.AuthorizationCode;
    detail.BuyOrder;
    detail.CommerceCode;
    detail.InstallmentsNumber;
    detail.PaymentTypeCode;
    detail.ResponseCode;
    detail.Status;
}
response.accounting_date
response.buy_order
card_detail = response.card_detail
card_detail.card_number
response.session_id
response.transaction_date
response.vci
details = response.details
details.each do |detail|
  detail.amount
  detail.authorization_code
  detail.buy_order
  detail.commerce_code
  detail.installments_number
  detail.payment_type_code
  detail.response_code
  detail.status
end
response.accounting_date
response.buy_order
card_detail = response.card_detail
card_detail.card_number
response.session_id
response.transaction_date
response.vci
details = response.details
for detail in details:
  detail.amount
  detail.authorization_code
  detail.buy_order
  detail.commerce_code
  detail.installments_number
  detail.payment_type_code
  detail.response_code
  detail.status
response.accounting_date
response.buy_order
cardDetail = response.card_detail
cardDetail.card_number
response.session_id
response.transaction_date
response.vci
details = response.details
for(let detail of details) {
  detail.amount
  detail.authorization_code
  detail.buy_order
  detail.commerce_code
  detail.installments_number
  detail.payment_type_code
  detail.response_code
  detail.status
}
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": "597055555542",
      "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.
VP = Venta prepago
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. 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)
-96: tbk_user no existente
-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.

Obtener estado de una transacción

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

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

final OneclickMallTransactionStatusResponse response =
  OneclickMall.Transaction.status(buyOrder);
use Transbank\Webpay\Oneclick;

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

var result = MallTransaction.Status(buyOrder);
response = Transbank::Webpay::Oneclick::MallTransaction::status(buy_order: buy_order)
var response = MallTransaction.status(buy_order)
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

const response = await Oneclick.MallTransaction.status(token);
GET /rswebpaytransaction/api/oneclick/v1.0/transactions/{buyOrder}

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

Parámetros Consultar un pago realizado

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 Consultar un pago realizado

response.getAccountingDate();
response.getBuyOrder();
response.getTransactionDate();
final CardDetail cardDetail = response.getCardDetail();
cardDetail.getCardNumber();
final List<Detail> detailsResp = response.getDetails();
for (Detail detail : detailsResp) {
    detail.getAmount();
    detail.getAuthorizationCode();
    detail.getBuyOrder();
    detail.getCommerceCode();
    detail.getInstallmentsNumber();
    detail.getPaymentTypeCode();
    detail.getStatus();
}
$response->getAccountingDate();
$response->getBuyOrder();
$card_detail = $response->getCardDetail();
$card_detail->getCardNumber();
$response->getTransactionDate();
$response->getVci();
$details = $response->getDetails();
foreach($details as $detail){
    detail->getAmount();
    detail->getAuthorizationCode();
    detail->getBuyOrder();
    detail->getCommerceCode();
    detail->getInstallmentsNumber();
    detail->getPaymentTypeCode();
    detail->getResponseCode();
    detail->getStatus();
}
response.AccountingDate;
response.BuyOrder;
var cardDetail = response.CardDetail;
cardDetail.CardNumber;
response.SessionId;
response.TransactionDate;
response.Vci;
var details = response.Details;
foreach (var detail in details) {
    detail.Amount;
    detail.AuthorizationCode;
    detail.BuyOrder;
    detail.CommerceCode;
    detail.InstallmentsNumber;
    detail.PaymentTypeCode;
    detail.ResponseCode;
    detail.Status;
}
response.accounting_date
response.buy_order
card_detail = response.card_detail
card_detail.card_number
response.session_id
response.transaction_date
response.vci
details = response.details
details.each do |detail|
  detail.amount
  detail.authorization_code
  detail.buy_order
  detail.commerce_code
  detail.installments_number
  detail.payment_type_code
  detail.response_code
  detail.status
end
response.accounting_date
response.buy_order
card_detail = response.card_detail
card_detail.card_number
response.session_id
response.transaction_date
response.vci
details = response.details
for detail in details:
  detail.amount
  detail.authorization_code
  detail.buy_order
  detail.commerce_code
  detail.installments_number
  detail.payment_type_code
  detail.response_code
  detail.status
response.accounting_date
response.buy_order
cardDetail = response.card_detail
cardDetail.card_number
response.session_id
response.transaction_date
response.vci
details = response.details
for(detail on details) {
  detail.amount
  detail.authorization_code
  detail.buy_order
  detail.commerce_code
  detail.installments_number
  detail.payment_type_code
  detail.response_code
  detail.status
}
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": "597055555542",
      "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 de pago de la transaccion.
VD = Venta Débito.
VP = Venta prepago
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 de retorno del proceso de pago, donde:
0 (cero) es aprobado. 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)
-96: tbk_user no existente
-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 una transacción

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

final OneclickMallTransactionRefundResponse response =
  OneclickMall.Transaction.refund(buyOrder, childCommerceCode, childBuyOrder, amount);
use Transbank\Webpay\Oneclick;

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

var response = MallTransaction.Refund(buyOrder, childCommerceCode,childBuyOrder,amount);
response = Transbank::Webpay::Oneclick::MallTransaction::refund(
  buy_order: buy_order,
  child_commerce_code: child_commerce_code,
  child_buy_order: child_buy_order,
  amount: amount
)
var response = MallTransaction.refund(buy_order, child_commerce_code, child_buy_order, amount)
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

const response = await Oneclick.MallTransaction.refund(buyOrder, childCommerceCode, childBuyOrder, 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 Reversar o Anular

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 Reversar o Anular

response.getAuthorizationCode();
response.getAuthorizationDate();
response.getBalance();
response.getNullifiedAmount();
response.getResponseCode();
response.getType();
response->getAuthorizationCode;
response->getAuthorizationDate;
response->getBalance;
response->getNullifiedAmount;
response->getResponseCode;
response->getType;
response.AuthorizationCode;
response.AuthorizationDate;
response.Balance;
response.NullifiedAmount;
response.ResponseCode;
response.Type;
response.authorization_code
response.authorization_date
response.balance
response.nullified_amount
response.response_code
response.type
response.authorization_code
response.authorization_date
response.balance
response.nullified_amount
response.response_code
response.type
response.authorization_code
response.authorization_date
response.balance
response.nullified_amount
response.response_code
response.type
200 OK
Content-Type: application/json

{
  "type": "NULLIFIED",
  "authorization_code": "123456",
  "authorization_date": "2019-03-20T20:18:20Z",
  "nullified_amount": 1000.00,
  "balance": 0.00,
  "response_code": 0
}

En caso de une reversa no devuelve más información
{
  "type": "REVERSED",
}
Nombre
tipo
Descripción
type
String
Tipo de reembolso, REVERSED o NULLIFIED, si es REVERSED no se devolverán datos de la transacción (authorization code, etc). Largo máximo: 10
authorization_code
Boolean
(Solo si es NULLIFIED) Código de autorización. Largo máximo: 6
authorization_date
ISO8601
(Solo si es NULLIFIED) Fecha de la autorización de la transacción.
nullified_amount
Decimal
(Solo si es NULLIFIED) Monto anulado. Largo máximo: 17
balance
Decimal
(Solo si es NULLIFIED) Monto restante de la transacción de pago original: monto inicial – monto anulado. Largo máximo: 17
response_code
Number
(Solo si es NULLIFIED) Código del resultado del pago, donde: 0 (cero) es aprobado. Largo máximo: 2
buy_order
String
(Solo si es NULLIFIED) Orden de compra generada por el comercio hijo para la transacción de pago. Largo máximo: 26.

Captura diferida de una transacción

Revisa más detalles sobre esta modalidad en la documentación

final OneclickMallTransactionCaptureResponse response = Oneclick.MallDeferredTransaction.capture(
  childCommerceCode, childBuyOrder, amount, authorizationCode
);
$response = MallTransaction::capture($commerce_code, $buy_order, $authorization_code, $amount);
// Esta funcion aun no se encuentra disponible en el SDK
response = Transbank::Webpay::Oneclick::MallDeferredTransaction::capture(
  child_commerce_code: @commerce_code, child_buy_order: @buy_order,
  amount: @capture_amount, authorization_code: @authorization_code
)
# Esta funcion aun no se encuentra disponible en el SDK
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

const response = Oneclick.MallTransaction.capture(
  childCommerceCode, childBuyOrder, amount, authorizationCode
);
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 Captura Diferida

Nombre
tipo
Descripción
commerce_code
Number
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 Captura Diferida

response.getAuthorizationCode();
response.getAuthorizationDate();
response.getCapturedAmount();
response.getResponseCode();
$response->getAuthorizationCode();
$response->getAuthorizationDate();
$response->getCapturedAmount();
$response->getResponseCode();
// Esta función aun no se encuentra disponible en el SDK
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
# Esta función aun no se encuentra disponible en el SDK
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
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

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 enviará al comercio la confirmación y se generará su secreto compartido, que en conjunto con el código de comercio, permiten operar en producción.

  3. Cuando recibas 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 un requisito para que el comercio pueda operar en el ambiente de producción (bancos y dinero real) 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] en formato PDF 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 recibiste tu código de comercio, y junto con el secreto compartido que se te entregó luego de la certificación puedes completar tus credenciales, las cuales debes custodiar y evitar que estén en manos de terceros ya que permiten hacer (o anular) transacciones en nombre de tu comercio.

  • Código de comercio (API Key)
  • Secreto compartido (Shared Secret)

Luego que el proceso de validación de tu integració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 oficial de Transbank, entonces debes seguir los siguientes pasos.

  1. Asignar el código de comercio productivo, entregado por Transbank al momento de contratar el producto.
// Para Oneclick
OneclickMall.setCommerceCode('TU_CODIGO_DE_COMERCIO');
// Esta función aun no se encuentra disponible en el SDK
// Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
200 OK
Content-Type: application/json
{
    "authorization_code": "152759",
    "authorization_date": "2020-04-03T01:49:50.181Z",
    "captured_amount": 50,
    "response_code": 0
}
// Esta función aun no se encuentra disponible en el SDK
// Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

Oneclick.commerceCode = 'TU_CODIGO_DE_COMERCIO';
  1. Configuración del secreto compartido.
// Para Oneclick
OneclickMall.setApiKey('TU_API_KEY');
// Esta función aun no se encuentra disponible en el SDK
// Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

Oneclick.apiKey = 'TU_API_KEY';
  1. Selección del ambiente productivo.
// Para Oneclick
OneclickMall.setIntegrationType(IntegrationType.LIVE);
// Esta función aun no se encuentra disponible en el SDK
// Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
const Environment = require('transbank-sdk').Environment // CommonJS
import { Oneclick, Environment } from 'transbank-sdk'; // ES6 Modules

Oneclick.environment = Environment.Production;

Alternativamente algunos SDK ofrecen un método para configurar directamente a producción

// Esta función aun no se encuentra disponible en el SDK
// Esta función aun no se encuentra disponible en el SDK
// Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
# Esta función aun no se encuentra disponible en el SDK
const Oneclick = require('transbank-sdk').Oneclick; // CommonJS
import { Oneclick } from 'transbank-sdk'; // ES6 Modules

Oneclick.configureForProduction('TU_CODIGO_DE_COMERCIO', 'TU_API_KEY');