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) yTbk-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
Una vez que el comercio determine que ha finalizado su integración, se debe realizar un proceso de validación.
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.
Cuando recibas el correo, será necesario cambiar la configuración del e-commerce para funcionar en producción
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.
- 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';
- 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';
- 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');