API Referencia
undefined

Transacción Completa

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

Transacción Completa

Crear una transacción

Esta operación te permite iniciar o crear una transacción, Transbank procesa el requerimiento y entrega como resultado de la operación el token de la transacción.



FullTransaction tx = new FullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
FullTransactionCreateResponse response = tx.create(buyOrder, sessionId, amount, cvv, cardNumber, cardExpirationDate);



$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new Transaction($option);
$response = $transaction->create(
$buy_order,
$session_id,
$amount,
$cvv,
$card_number,
$card_expiration_date
);


  
var tx = new FullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Create(
              buyOrder: buy_order,
              sessionId: session_id,
              amount: amount,
              cvv: cvv,
              cardNumber: card_number,
              cardExpirationDate: card_expiration_date);        
                 


@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@transaction = Transbank::Webpay::TransaccionCompleta::Transaction.new(@options)
@resp = @transaction.create(buy_order: @buy_order, session_id: @session_id, amount: @amount, cvv: @cvv, card_number: @card_number, card_expiration_date: @card_expiration_date)



tx = Transaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.create(
  buy_order: buy_order, session_id: session_id, amount: amount, cvv: cvv,
  card_number: card_number, card_expiration_date: card_expiration_date
)



const tx = new TransaccionCompleta.Transaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const response = await tx.create(
  buyOrder,
  sessionId,
  amount,
  cvv,
  cardNumber,
  cardExpirationDate
); 

Respuesta Transaction.create

response.getToken();
$response->getToken();

response.Token;
response.token
## Versión 3.x del SDK
response['token']

## Versión 2.x del SDK
response.token
response.token

Consulta de cuotas

Antes de confirmar una transaccion es necesario confirmar la cantidad de cuotas y entregar el valor de estas.



FullTransaction tx = new FullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final FullTransactionInstallmentResponse response = tx.installments(token, installmentsNumber);



$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new Transaction($option);
$response = $transaction->installments(
  $token,
  $installmentsNumber
);



var tx = new FullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Installments(
                token,
                installments_number);


  
@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@transaction = Transbank::Webpay::TransaccionCompleta::Transaction.new(@options)
@resp = @transaction.installments(token: @token, installments_number: @installments_number )



tx = Transaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.installments(token=token, installments_number=installments_number)



const tx = new TransaccionCompleta.Transaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const response = await tx.installments(token, installmentsNumber);

Respuesta consulta de cuotas

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
## Versión 3.x del SDK
response['installments_amount']
response['id_query_installments']
response['deferred_periods']

## Versión 2.x del SDK
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á []:

Confirmar una transacción

Una vez obtenido la respuesta de la consulta de cuotas, con los datos de esta se puede realizar la confirmación de la transaccion utilizando el metodo commit



FullTransaction tx = new FullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final FullTransactionCommitResponse response = tx.commit(token, idQueryInstallments, deferredPeriodIndex, gracePeriod);



$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new Transaction($option);
$response = $transaction->commit(
    $token,
    $idQueryInstallments,
    $deferredPeriodIndex,
    $gracePeriod
);


var tx = new FullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Commit(token, idQueryInstallments, deferredPeriodsIndex, gracePeriods);



@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@transaction = Transbank::Webpay::TransaccionCompleta::Transaction.new(@options)
@resp = @transaction.commit(
  token: @token,
  id_query_installments: @id_query_installments,
  deferred_period_index: @deferred_period_index,
  grace_period: @grace_period
)



tx = Transaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.commit(token=token,
                id_query_installments=id_query_installments,
                deferred_period_index=deferred_period_index,
                grace_period=grace_period)



const tx = new TransaccionCompleta.Transaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const response = await tx.commit(
  token,
  idQueryInstallments,
  deferredPeriodIndex,
  gracePeriod
);

Respuesta confirmación

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
## Versión 3.x del SDK
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']

## Versión 2.x del SDK
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

Obtener estado de una transacción

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.

Este método puede ser invocado los 7 días siguientes luego de realizada la transacción. Después de esto no será posible.



FullTransaction tx = new FullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final FullTransactionStatusResponse response = tx.status(token);



$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new Transaction($option);
$response = $transaction->status($token_ws);



var tx = new FullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Status(token);



@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@transaction = Transbank::Webpay::TransaccionCompleta::Transaction.new(@options)
@resp = @transaction.status(token: @token)


  
tx = Transaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.status(token=token)



const tx = new TransaccionCompleta.Transaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const response = await tx.status(token);


Respuesta estado

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
## Versión 3.x del SDK
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']

## Versión 2.x del SDK
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

Reversar o anular una transacción

Esta operación permite a todo comercio habilitado, reversar o anular una transacción que fue generada en Transacción Completa.

Puedes realizar un reembolso invocando al método refund(), dependiendo de algunas condiciones correspondera a una Reversa o Anulación.

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



FullTransaction tx = new FullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final FullTransactionRefundResponse response = tx.refund(token, amount);



$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new Transaction($option);
$response = $transaction->refund($token, $amount);



var tx = new FullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Refund(token, amount);



@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@transaction = Transbank::Webpay::TransaccionCompleta::Transaction.new(@options)
@resp = @transaction.refund(token: @token, amount: @amount)



tx = Transaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.refund(token=token, amount=amount) 


  
const tx = new TransaccionCompleta.Transaction(
new Options(
IntegrationCommerceCodes.TRANSACCION_COMPLETA,
IntegrationApiKeys.WEBPAY,
Environment.Integration
)
);
const response = await tx.refund(token, amount);

Respuesta reembolso

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
## Versión 3.x del SDK
response['type']
response['authorization_code']
response['authorization_date']
response['nullified_amount']
response['balance']
response['response_code']

## Versión 2.x del SDK
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

Captura diferida Transacción completa

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

Para capturar una transacción, ésta debe haber sido creada por un código de comercio configurado para captura diferida. De esa forma la transacción estará autorizada pero requerirá una captura explícita posterior para confirmar la transacción.

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



FullTransaction tx = new FullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final FullTransactionCaptureResponse response = tx.capture(token, buyOrder, authorizationCode, captureAmount);



$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new Transaction($option);
$response = $transaction->capture($token, $buyOrder, $authorizationCode, $captureAmount);



var tx = new FullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Capture(token, buyOrder, authorizationCode, captureAmount);
  


@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@transaction = Transbank::Webpay::TransaccionCompleta::Transaction.new(@options)
@resp = @transaction.capture(
  token: @token,
  buy_order: @buy_order,
  authorization_code: @authorization_code,
  capture_amount: @capture_amount
)


tx = Transaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.capture(token, buy_order, authorization_code, capture_amount) 



const tx = new TransaccionCompleta.Transaction(
new Options(
IntegrationCommerceCodes.TRANSACCION_COMPLETA,
IntegrationApiKeys.WEBPAY,
Environment.Integration
)
);
const response = await tx.capture(token, buyOrder, authorizationCode, amount);

Transacción Completa Mall

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

Desagregación de un pago Mall

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

Flujo

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

Las diferencias son:

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

Crear una transacción mall

Esta operación te permite iniciar o crear varias transacciones de una sola vez, Transbank procesa el requerimiento y entrega como resultado de la operación el token de la transacción.


  
MallFullTransaction tx = new MallFullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
MallTransactionCreateDetails transactionDetails = MallTransactionCreateDetails.build()
  .add(amountMallOne, commerceCodeStoreOne, buyOrderMallOne, installmentsNumberMallOne)
  .add(amountMallTwo, commerceCodeStoreTwo, buyOrderMallTwo, installmentsNumberMallTwo);
MallFullTransactionCreateResponse response = tx.create(buyOrder, sessionId, cardNumber, cardExpirationDate, transactionDetails);



$transaction_details = [
[
    'amount' => 10000,
    'commerce_code' => "commerceCodeStoreOne",
    'buy_order' => '123456789'
],
[
    'amount' => 12000,
    'commerce_code' => "commerceCodeStoreTwo",
    'buy_order' => '123456790'
],
];
$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new MallTransaction($option);
$response = $transaction->create(
$buyOrder,
$sessionId,
$cardNumber,
$cardExpirationDate,
$transaction_details,
$cvv);



var tx = new MallFullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var details = new List();
details.Add(new CreateDetails(amountMallOne, commerceCodeStoreOne, buyOrderMallOne));
details.Add(new CreateDetails(amountMallTwo, commerceCodeStoreTwo, buyOrderMallTwo));
var response = tx.Create(
    buyOrder: buy_order,
    sessionId: session_id,
    cardNumber: card_number,
    cardExpirationDate: card_expiration_date,
    details,
    cvv: cvv
);

  
@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@tx = Transbank::Webpay::TransaccionCompleta::Transaction.new(@options)
@resp = @tx.create(buy_order: @buy_order, session_id: @session_id, card_number: @card_number, card_expiration_date: @card_expiration_date, @details, cvv: @cvv)


  
tx = MallTransaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
details = [
  {
      'commerce_code': 'commerce_store_1',
      'buy_order': '123456789',
      'amount': 10000
  },
  {
      'commerce_code': 'commerce_store_1',
      'buy_order': '123456790',
      'amount': 12000
  }
]
resp = tx.create(
  buy_order=buy_order,
  session_id=session_id,
  card_number=card_number,
  card_expiration_date=card_expiration_date,
  details=details,
  cvv=None
)


const tx = new TransaccionCompleta.MallTransaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const details = [
  new TransactionDetail(amount, commerceCodeStoreOne, childBuyOrder),
  new TransactionDetail(amount2, commerceCodeStoreTwo, childBuyOrder2),
];
const response = await tx.create(
  parentBuyOrder,
  sessionId,
  cardNumber,
  cardExpirationDate,
  details,
  cvv
);  

Respuesta creación

response.getToken();
$response->getToken();
response.Token;
response.token
## Versión 3.x del SDK
response['token']

## Versión 2.x del SDK
response.token
response.token

Consulta de cuotas 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()

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.



MallFullTransaction tx = new MallFullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
MallFullTransactionInstallmentsDetails installmentsDetails =
  MallFullTransactionInstallmentsDetails.build().add(commerceCodeStoreOne, buyOrder, installmentsNumber);
final MallFullTransactionInstallmentsResponse response = tx.installments(token, installmentsDetails);



$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new MallTransaction($option);
$installments_details = [
    [
        'commerce_code' => 'commerceCodeStoreOne',
        'buy_order' => '123456789',
        'installments_number' => 2
    ],
    [
        'commerce_code' => 'commerceCodeStoreTwo',
        'buy_order' => '123456790',
        'installments_number' => 2
    ],
];
$response = $transaction->installments($token, $installments_details);



var tx = new MallFullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var details = new List();
details.Add(new CreateDetails(amountMallOne, commerceCodeStoreOne, buyOrderMallOne));
details.Add(new CreateDetails(amountMallTwo, commerceCodeStoreTwo, buyOrderMallTwo));
var response = tx.Installments(
  token, details
);


  

@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@tx = Transbank::Webpay::TransaccionCompleta::Transaction.new(options)
@installment_details = [
  {
    commerce_code: 'commerce_store_1',
    buy_order: '123456789',
    installments_number: 2
  },
  {
    commerce_code: 'commerce_store_2',
    buy_order: '123456790',
    installments_number: 2
  },
]
@resp = @tx.installments(token, installment_details)


  
tx = MallTransaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
details = [
  {
    'commerce_code': 'commerce_store_1',
    'buy_order': '123456789',
    'installments_number': 2
  },
  {
    'commerce_code': 'commerce_store_2',
    'buy_order': '123456790',
    'installments_number': 2
  }
]
resp = tx.installments(token=token, details=details)



const tx = new TransaccionCompleta.MallTransaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const details = [
  new InstallmentDetail(
    commerceCodeStoreOne,
    childBuyOrder,
    installmentsNumber
  ),
  new InstallmentDetail(
    commerceCodeStoreTwo,
    childBuyOrder2,
    installmentsNumber2
  ),
];
const response = await tx.installments(token, details);

Confirmar una transacción 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().

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



MallFullTransaction tx = new MallFullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
MallTransactionCommitDetails details = MallTransactionCommitDetails.build().add(
  commerceCodeStoreOne,buyOrder,idQueryInstallments,deferredPeriodIndex,gracePeriod
);
final MallFullTransactionCommitResponse response = tx.commit(token, details);



$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new MallTransaction($option);
$details = [
    [
        'commerce_code' => 'commerceCodeStoreOne',
        'buy_order' => '123456789',
        'id_query_installments' => $firstInstallmentResponse->getIdQueryInstallments(),
        'deferred_period_index' => null,
        'grace_period' => false
    ],
    [
        'commerce_code' => 'commerceCodeStoreTwo',
        'buy_order' => '123456790',
        'id_query_installments' => $secondInstallmentResponse->getIdQueryInstallments(),
        'deferred_period_index' => null,
        'grace_period' => false
    ]
];
$response = $transaction->commit($token, $details);

  
var tx = new MallFullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var transactionDetails = new List();
transactionDetails.Add(new MallCommitDetails(
    commerceCodeStoreOne,
    buyOrderMallOne,
    idQueryInstallmentsOne,
    deferredPeriodIndexOne,
    gracePeriodOne
));
transactionDetails.Add(new MallCommitDetails(
    commerceCodeStoreTwo,
    buyOrderMallTwo,
    idQueryInstallmentsTwo,
    deferredPeriodIndexTwo,
    gracePeriodTwo
));
var response = tx.Commit(
  token, transactionDetails
);


  
@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@tx = Transbank::Webpay::TransaccionCompleta::Transaction.new(options)
@details = [
  {
    commerce_code: 'commerce_store_1',
    buy_order: 'ordenCompra1234',
    id_query_installments: 12,
    deferred_period_index: 1,
    grace_period: false
  },
  {
    commerce_code: 'commerce_store_2',
    buy_order: 'ordenCompra12345',
    id_query_installments: 12,
    deferred_period_index: 1,
    grace_period: false
  }
]
@resp = @tx.commit(token: token, details: details)


  
tx = MallTransaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
details = [
  {
    "commerce_code": 'commerce_store_1',
    "buy_order": 'ordenCompra1234',
    "id_query_installments": 12,
    "deferred_period_index": 1,
    "grace_period": false
  },
  {
    "commerce_code": 'commerce_store_2',
    "buy_order": 'ordenCompra12345',
    "id_query_installments": 12,
    "deferred_period_index": 1,
    "grace_period": false
  }
]
resp = tx.commit(
  token=token, details=details
)


  
const tx = new TransaccionCompleta.MallTransaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
let commitDetails = [
  new CommitDetail(commerceCodeStoreOne, childBuyOrder),
  new CommitDetail(commerceCodeStoreTwo, childBuyOrder2),
];
const response = await tx.commit(token, commitDetails);

Respuesta confirmación 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
## Versión 3.x del SDK
response['buy_order']
response['card_number']
response['accounting_date']
response['transaction_date']
response['details']

## Versión 2.x del SDK
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

Obtener estado de una transacción 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.

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


  
MallFullTransaction tx = new MallFullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final MallFullTransactionStatusResponse response = tx.status(tokenWs);


  
$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new MallTransaction($option);
$response = $transaction->status(token);



var tx = new MallFullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Status(token); 


  
@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@tx = Transbank::Webpay::TransaccionCompleta::Transaction.new(options)
@resp = @tx.status(token)


  
tx = MallTransaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.status(token)


  
const tx = new TransaccionCompleta.MallTransaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const response = await tx.status(token);

Respuesta consulta de estado

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
## Versión 3.x del SDK
response['buy_order']
response['card_number']
response['accounting_date']
response['transaction_date']
response['details']

## Versión 2.x del SDK
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

Reversar o anular una transacción mall

Esta operación permite a todo comercio habilitado, reversar o anular una transacción que fue generada en Transacción Completa.

Puedes realizar un reembolso invocando al método refund(), dependiendo de algunas condiciones correspondera a una Reversa o Anulación.

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


  
MallFullTransaction tx = new MallFullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final MallFullTransactionRefundResponse response = tx.refund(token, buyOrder, commerceCodeStoreOne, amount);


  
$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new MallTransaction($option);
$response = $transaction->refund(
  $token,
  $childBuyOrder,
  $commerceCodeStoreOne,
  $amount
);


  
var tx = new MallFullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Refund(
  token,
  buyOrder,
  commerceCodeStoreOne,
  amount
);


  
@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@tx = Transbank::Webpay::TransaccionCompleta::Transaction.new(options)
@resp = @tx.refund(
  token: token,
  buy_order: child_buy_order,
  commerce_code_child: commerce_store_1,
  amount: amount
)


  
tx = MallTransaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.refund(token: token, child_buy_order: child_buy_order, child_commerce_code: commerce_store_1, amount: amount)


  
const tx = new TransaccionCompleta.MallTransaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const response = await tx.refund(token, buyOrder, commerceCodeStoreOne, amount);

Respuesta reembolso mall

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
## Versión 3.x del SDK
response['type']
response['authorization_code']
response['authorization_date']
response['nullified_amount']
response['balance']
response['response_code']

## Versión 2.x del SDK
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

Captura diferida de una transacción mall

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

Para capturar una transacción, ésta debe haber sido creada por un código de comercio configurado para captura diferida. De esa forma la transacción estará autorizada pero requerirá una captura explícita posterior para confirmar la transacción.

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


  
MallFullTransaction tx = new MallFullTransaction(new WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final MallFullTransactionCaptureResponse response = tx.capture(token, commerceCodeStoreOne, buyOrder, authorizationCode, captureAmount);


  
$option = new Options($apiKey, $commerceCode, Options::ENVIRONMENT_PRODUCTION);
$transaction = new MallTransaction($option);
$response = $transaction->capture($token, $commerceCodeStoreOne, $buyOrder, $authorizationCode, $captureAmount);


  
var tx = new MallFullTransaction(new Options(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
var response = tx.Capture(
  token,
  commerceCodeStoreOne,
  buyOrder,
  authorizationCode,
  captureAmount
);


  
@options = Transbank::Webpay::Options.new("commerceCode", "APIKey", :integration)
@tx = Transbank::Webpay::TransaccionCompleta::Transaction.new(options)
@resp = @tx.capture(
  token: token,
  commerce_code: commerce_store_1,
  buy_order: buy_order,
  authorization_code: authorization_code,
  amount: capture_amount
)


  
tx = MallTransaction(WebpayOptions(IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST))
resp = tx.capture(token, commerce_store_1, child_buy_order, authorization_code, capture_amount)


  
const tx = new TransaccionCompleta.MallTransaction(
  new Options(
    IntegrationCommerceCodes.TRANSACCION_COMPLETA_MALL,
    IntegrationApiKeys.WEBPAY,
    Environment.Integration
  )
);
const response = await tx.capture(
  token,
  commerceCodeStoreOne,
  childBuyOrder,
  authorizationCode,
  captureAmount
);

response.getResponseCode()
response.getCapturedAmount()
response.getAuthorizationDate()
response.getAuthorizationCode()
$response->getToken();
$response->getAuthorizationCode();
$response->getAuthorizationDate();
$response->getCapturedAmount();
$response->getResponseCode();
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
## Versión 3.x del SDK
response['authorization_code']
response['authorization_date']
response['captured_amount']
response['response_code']

## Versión 2.x del SDK
response.token
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code
response.authorization_code
response.authorization_date
response.captured_amount
response.response_code

Credenciales y Ambientes

Ambiente de integración

Puede encontrar más información al respecto en este link

Configuración SDK

Los SDK deben configurarse explícitamente para apuntar al ambiente que quieras utilizar (producción / integración). Para esto puedes crear los objetos de 2 maneras:

  • Utilizar los métodos definidos para ello (buildForIntegration o buildForProduction).
  • Utilizar un objeto Options que contenga la configuración y pasarlo en el constructor de cada objeto.

Puede encontrar más información al respecto en este link

Puesta en Producción

Puede encontrar más información al respecto en este link

Ejemplos de integración

Ponemos a tu disposición una serie de repositorios en nuestro Github para ayudarte a entender la integración de mejor forma. Puedes encontrar una lista de proyectos de ejemplo acá.