Webpay
Ambientes y Credenciales
Ambiente de Producción
Configuration configuration = new Configuration();
configuration.setEnvironment(Webpay.Environment.LIVE);
$configuration = new Configuration();
$configuration->setEnvironment("PRODUCCION");
var configuration = new Configuration();
configuration.Environment = "PRODUCCION";
Las URLs de endpoints de producción están alojados dentro de https://webpay3g.transbank.cl/.
Los SDKs traen pre-configurado los certificados de Transbank y validan automáticamente las respuestas. Sólo debes asegurarte de mantener tu SDK actualizado para evitar que los certificados preconfigurados expiren. O también puedes sobre-escribir manualmente el certificado de Webpay a usar para la validación:
configuration.setWebpayCert(
"-----BEGIN CERTIFICATE-----\n" +
"MIIEDzCCAvegAwIBAgIJAMaH4DFTKdnJMA0GCSqGSIb3DQEBCwUAMIGdMQswCQYD\n" +
"VQQGEwJDTDERMA8GA1UECAwIU2FudGlhZ28xETAPBgNVBAcMCFNhbnRpYWdvMRcw\n" +
...
"MX5lzVXafBH/sPd545fBH2J3xAY3jtP764G4M8JayOFzGB0=\n" +
"-----END CERTIFICATE-----\n");
$configuration->setWebpayCert(
"-----BEGIN CERTIFICATE-----\n" .
"MIIEDzCCAvegAwIBAgIJAMaH4DFTKdnJMA0GCSqGSIb3DQEBCwUAMIGdMQswCQYD\n" .
"VQQGEwJDTDERMA8GA1UECAwIU2FudGlhZ28xETAPBgNVBAcMCFNhbnRpYWdvMRcw\n" .
...
"MX5lzVXafBH/sPd545fBH2J3xAY3jtP764G4M8JayOFzGB0=\n" .
"-----END CERTIFICATE-----\n");
);
configuration.WebpayCertPath = @"C:\Certs\certificado-publico-transbank.crt"
Para validar las respuestas generadas por Transbank debes usar un certificado
público de Webpay. En el repositorio GitHub
transbank-webpay-credenciales
podrás encontrar el certificado
actualizado.
Ambiente de Integración
configuration.setEnvironment(Webpay.Environment.TEST);
$configuration->setEnvironment("INTEGRACION");
configuration.Environment = "INTEGRACION";
Las URLs de endpoints de integración están alojados dentro de https://webpay3gint.transbank.cl/.
Consulta la documentación para conocer las tarjetas de prueba que funcionan en el ambiente de integración.
Credenciales del Comercio
configuration.setCommerceCode("597020000540");
configuration.setPrivateKey(
"-----BEGIN RSA PRIVATE KEY-----\n" +
... +
"-----END RSA PRIVATE KEY-----\n"
);
configuration.setPublicCert(
"-----BEGIN CERTIFICATE-----\n" +
... +
"-----END CERTIFICATE-----\n"
);
$configuration->setCommerceCode("597020000540");
$configuration->setPrivateKey(
"-----BEGIN RSA PRIVATE KEY-----\n" .
... .
"-----END RSA PRIVATE KEY-----\n"
);
$configuration->setPublicCert(
"-----BEGIN CERTIFICATE-----\n" .
... .
"-----END CERTIFICATE-----\n"
);
configuration.CommerceCode = "597020000540";
configuration.PrivateCertPfxPath = @"C:/Path/to/private/Cert.pfx";
configuration.Password = "PfxPassword";
Todas las peticiones que hagas deben estar firmadas con tu llave privada y certificado enviado a Transbank. Dichas credenciales deben coincidir con el código de comercio usado en cada petición.
Consulta la documentación para generar una llave privada y un certificado usando openssl si no sabes aún como realizarlo.
En el repositorio GitHub
transbank-webpay-credenciales
podrás encontrar códigos de comercios y certificados actualizados para probar
en integración aunque aún no tengas tu propio código de
comercio.
Los SDKs ya incluyen esos códigos de comercio, certificados y llaves privadas 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:
Configuration configuration =
Configuration.forTestingWebpayPlusNormal();
Configuration configuration =
Configuration.forTestingWebpayPlusCapture();
Configuration configuration =
Configuration.forTestingWebpayPlusMall();
Configuration configuration =
Configuration.forTestingWebpayOneClickNormal();
$configuration = Configuration::forTestingWebpayPlusNormal();
$configuration = Configuration::forTestingWebpayPlusCapture();
$configuration = Configuration::forTestingWebpayPlusMall();
$configuration = Configuration::forTestingWebpayOneClickNormal();
var configuration = Configuration.ForTestingWebpayPlusNormal();
var configuration = Configuration.ForTestingWebpayPlusCapture();
var configuration = Configuration.ForTestingWebpayPlusMall();
var configuration = Configuration.ForTestingWebpayOneClickNormal();
Webpay Plus Normal
WebpayNormal transaction =
new Webpay(configuration).getNormalTransaction();
$transaction =
(new Webpay($configuration))->getNormalTransaction();
var transaction = new Webpay(configuration).NormalTransaction;
WSDL: /WSWebpayTransaction/cxf/WSWebpayService?wsdl
Una transacción de autorización normal (o transacción normal), corresponde a una solicitud de autorización financiera de un pago con tarjetas de crédito o débito, en donde quién realiza el pago ingresa al sitio del comercio, selecciona productos o servicio, y el ingreso asociado a los datos de la tarjeta de crédito o débito lo realiza en forma segura en Webpay.
Flujo en caso de éxito
De cara al tarjetahabiente, el flujo de páginas para la transacción es el siguiente:
Desde el punto de vista técnico, la secuencia es la siguiente:
- Una vez seleccionado los bienes o servicios, tarjetahabiente decide pagar a través de Webpay.
- El comercio inicia una transacción en Webpay, invocando el método
initTransaction()
. - Webpay procesa el requerimiento y entrega como resultado de la operación el token de la transacción y URL de redireccionamiento a la cual se deberá redirigir al tarjetahabiente.
- Comercio redirecciona al tarjetahabiente hacia Webpay, con el token de la
transacción a la URL indicada en punto 3. La redirección se realiza
enviando por método POST el token en variable
token_ws
. - El navegador Web del tarjetahabiente realiza una petición HTTPS a Webpay, en base al redireccionamiento generado por el comercio en el punto 4.
- Webpay responde al requerimiento desplegando el formulario de pago de Webpay. Desde este punto la comunicación es entre Webpay y el tarjetahabiente, sin interferir el comercio. El formulario de pago de Webpay despliega, entre otras cosas, el monto de la transacción, información del comercio como nombre y logotipo, las opciones de pago a través de crédito o débito.
- Tarjetahabiente ingresa los datos de la tarjeta, hace clic en pagar en formulario Webpay.
- Webpay procesa la solicitud de autorización (primero autenticación bancaria y luego la autorización de la transacción).
- Una vez resuelta la autorización, Webpay retorna el control al comercio,
realizando un redireccionamiento HTTPS hacia la página de transición
del comercio, en donde se envía por método POST el token de la transacción
en la variable
token_ws
. El comercio debe implementar la recepción de esta variable. - El navegador Web del tarjetahabiente realiza una petición HTTPS al sitio del comercio, en base a la redirección generada por Webpay en el punto 9.
- El sitio del comercio recibe la variable
token_ws
e invoca el segundo método Web,getTransactionResult()
(mientras se despliega la página de transición), para obtener el resultado de la autorización. Se recomienda que el resultado de la autorización sea persistida en los sistemas del comercio, ya que este método se puede invocar una única vez por transacción. - Comercio recibe el resultado de la invocación del método
getTransactionResult()
. Para que el comercio informe a Webpay que el resultado de la transacción se ha recibido sin problemas, el sistema del comercio debe consumir el tercer método
acknowledgeTransaction()
. Si esto fue ejecutado correctamente el producto puede ser liberado al cliente.Una vez recibido el resultado de la transacción e informado a Webpay su correcta recepción, el sitio del comercio debe redirigir al tarjetahabiente nuevamente a Webpay, con la finalidad de desplegar el comprobante de pago. Es importante realizar este punto para que el tarjetahabiente entienda que el proceso de pago fue exitoso, y que involucrará un cargo a su tarjeta bancaria. El redireccionamiento a Webpay se hace utilizando como destino la URL informada por el método
getTransactionResult()
enviando por método POST el token de la transacción en la variabletoken_ws
.- Webpay recibe un requerimiento con la variable
token_ws
- Webpay identifica la transacción y despliega el comprobante de pago al tarjetahabiente.
- Una vez visualizado el comprobante de pago por un periodo acotado de tiempo, el tarjetahabiente es redirigido de vuelta al sitio del comercio, por medio de redireccionamiento con el token en la variable token_ws enviada por método POST hacia la página final informada por el comercio en el método initTransaction.
- Sitio del comercio despliega página final de pago
Flujo si usuario aborta el pago
Si el tarjetahabiente anula la transacción en el formulario de pago de Webpay, el flujo cambia y los pasos son los siguientes:
- Una vez seleccionado los bienes o servicios, tarjetahabiente decide pagar a través de Webpay.
- El comercio inicia una transacción en Webpay, invocando el método
initTransaction()
. - Webpay procesa el requerimiento y entrega como resultado de la operación el token de la transacción y URL de redireccionamiento a la cual se deberá redirigir al tarjetahabiente.
- Comercio redirecciona al tarjetahabiente hacia Webpay, con el token de la
transacción a la URL indicada en punto 3. La redirección se realiza
enviando por método POST el token en variable
token_ws
. - El navegador Web del tarjetahabiente realiza una petición HTTPS a Webpay, en base al redireccionamiento generado por el comercio en el punto 4.
- Webpay responde al requerimiento desplegando el formulario de pago de Webpay. Desde este punto la comunicación es entre Webpay y el tarjetahabiente, sin interferir el comercio. El formulario de pago de Webpay despliega, entre otras cosas, el monto de la transacción, información del comercio como nombre y logotipo, las opciones de pago a través de crédito o débito.
- Tarjetahabiente hace clic en “anular”, en formulario Webpay.
Webpay retorna el control al comercio, realizando un redireccionamiento HTTPS hacia la página de final del comercio, en donde se envía por método POST el token de la transacción en la variable
TBK_TOKEN
además de las variablesTBK_ORDEN_COMPRA
yTBK_ID_SESION
.El comercio con la variable
TBK_TOKEN
debe invocar el métodogetTransactionResult()
, para obtener el resultado de la autorización. En este caso debe obtener una excepción (Timeout 272), pues el pago fue abortado.- El comercio debe informar al tarjetahabiente que su pago no se completó.
Otros flujos
Es importante destacar los siguientes flujos adicionales que se deben contemplar:
Una vez que el tarjetahabiente es redirigido al formulario de pago, tiene 10 minutos para completarlo. Pasado ese tiempo, Webpay cierra la transacción automáticamente y redirecciona al usuario de vuelta al comercio, enviándolo a la URL de finish (página final del comercio). Esta vez, a diferencia del flujo al abortar con el botón 'Anular transacción', no llega el parametro
TBK_TOKEN
, y solo llegaTBK_ID_SESION
yTBK_ORDEN_COMPRA
.Si ocurre un error mientras el tarjetahabiente está en el formulario de pago (por ejemplo, si cierra la pestaña del navegador y tratar de recuperarla o en otros casos de borde), se le despliega una pantalla de error informando que no se le han realizado cobros y adicionalmente presenta un enlace para volver al sitio del comercio. Al hacer click sobre ese enlace, es redirigido a la URL de finish (página final del comercio). Esta vez, a diferencia de los casos anteriores, enviando
TBK_TOKEN
ytoken_ws
(ambos campos con el mismo token). Este caso es importante de destacar, ya que si se configura la misma URL parareturnUrl
yfinishUrl
en elinitTransaction
, no es posible saber si se trata de un flujo de pago fallido que llega directo afinishUrl
, o si es un flujo normal y llegó alreturnUrl
con un éxito/rechazo. Por esto, se recomienda siempre tener URLs diferentes parareturnUrl
yfinishUrl
.
Crear una transacción Webpay Plus Normal
Para crear una transacción basta llamar al método initTransaction()
initTransaction()
Permite inicializar una transacción en Webpay. Como respuesta a la invocación se genera un token que representa en forma única una transacción.
WsInitTransactionOutput initResult =
transaction.initTransaction(
amount, sessionId, buyOrder, returnUrl, finalUrl);
$initResult = $transaction->initTransaction(
$amount, $buyOrder, $sessionId, $returnUrl, $finalUrl);
var initResult = transaction.initTransaction(
amount, buyOrder, sessionId, returnUrl, finalUrl);
Parámetros initTransaction
Nombre tipo |
Descripción |
---|---|
WSTransactionType wsTransactionType |
Indica el tipo de transacción, su valor debe ser siempre TR_NORMAL_WS para transacciones normales. Los SDKs se encargan automáticamente de este parámetro |
sessionId xs:string |
(Opcional) Identificador de sesión, uso interno de comercio, este valor es devuelto al final de la transacción. Largo máximo: 61 |
returnURL xs:anyURI |
URL del comercio, a la cual Webpay redireccionará posterior al proceso de autorización. Largo máximo: 256 |
finalURL xs:anyURI |
URL del comercio a la cual Webpay redireccionará posterior al voucher de éxito de Webpay. Largo máximo 256 |
transactionDetails wsTransactionDetail |
Lista de objetos del tipo wsTransactionDetail, el cual contiene datos de la transacción. Para transacciones normales debe contener exactamente un elemento |
transactionDetails[0].amount xs:decimal |
Monto de la transacción. Máximo 2 decimales para USD. Largo máximo: 10 |
transactionDetails[0].buyOrder xs:string |
Orden de compra de la tienda. Este número debe ser único para cada transacción. Largo máximo: 26. La orden de compra puede tener: Números, letras, mayúsculas y minúsculas, y los signos |_=&%.,~:/?[+!@()>- |
transactionDetails[0].commerceCode xs:string |
Código comercio de la tienda entregado por Transbank. Largo: 12, Si el código que posees es de 8 dígitos debes anteponer 5970. Los SDKs se encargan automáticamente de este parámetro a partir de la configuración de comercio y certificados/llaves usada para iniciar la transacción |
Respuesta initTransaction
initResult.getToken();
initResult.getUrl();
$initResult->token;
$initResult->url;
initResult.token;
initResult.url;
Nombre tipo |
Descripción |
---|---|
token xs:string |
Token de la transacción. Largo: 64. |
url xs:string |
URL de formulario de pago Webpay. Largo máximo: 256. |
Confirmar una transacción Webpay Plus Normal
Cuando el comercio retoma el control mediante returnURL
puedes confirmar una
transacción usando los métodos getTransactionResult()
y
acknowledgeTransaction()
getTransactionResult()
Permite obtener el resultado de la transacción una vez que Webpay ha resuelto su autorización financiera.
TransactionResultOutput result =
transaction.getTransactionResult(
request.getParameter("token_ws"));
$result = transaction->getTransactionResult(
$request->input("token_ws"));
var result = transaction.getTransactionResult(tokenWs));
Parámetros getTransactionResult
Nombre tipo |
Descripción |
---|---|
tokenInput xs:string |
Token de la transacción. Largo: 64. |
Respuesta getTransactionResult
WsTransactionDetailOutput output =
result.getDetailOutput().get(0);
if (output.getResponseCode() == 0) {
// Transaccion exitosa, puedes procesar el resultado
// con el contenido de las variables result y output.
result.getBuyOrder();
result.getSessionId();
result.getCardDetail().getCardNumber();
result.getCardDetail().getCardExpirationDate();
result.getAccountingDate();
result.getTransactionDate();
result.getVci();
result.getUrlRedirection();
output.getAuthorizationCode();
output.getPaymentType();
output.getAmount();
output.getSharesNumber();
output.getCommerceCode();
output.getBuyOrder();
}
$output = $result->detailOutput;
if ($output->responseCode == 0) {
// Transaccion exitosa, puedes procesar el resultado
// con el contenido de las variables $result y $output.
$result->buyOrder;
$result->sessionId;
$result->cardDetail->cardNumber;
$result->cardDetail->cardExpirationDate;
$result->accountingDate;
$result->transactionDate;
$result->vci;
$result->urlRedirection;
$output->authorizationCode;
$output->paymentType;
$output->amount;
$output->sharesNumber;
$output->commerceCode;
$output->buyOrder;
}
var output = result.detailOutput[0]
if (output.responseCode == 0) {
// Transaccion exitosa, puedes procesar el resultado
// con el contenido de las variables result y output.
result.buyOrder;
result.sessionId;
result.cardDetail.cardNumber;
result.cardDetail.cardExpirationDate;
result.accountingDate;
result.transactionDate;
result.vci;
result.urlRedirection;
output.authorizationCode;
output.paymentType;
output.amount;
output.sharesNumber;
output.commerceCode;
output.buyOrder;
}
Nombre tipo |
Descripción |
---|---|
buyOrder xs:string |
Orden de compra de la tienda indicado en initTransaction() . Largo máximo: 26 |
sessionId xs:string |
Identificador de sesión, el mismo enviado originalmente por el comercio en initTransaction() . Largo máximo: 61. |
cardDetails carddetails |
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente. |
cardDetails.cardNumber xs:string |
4 últimos números de la tarjeta de crédito del tarjetahabiente. Solo para comercios autorizados por Transbank se envía el número completo. Largo máximo: 16. |
cardDetails.cardExpirationDate xs:string |
(Opcional) Fecha de expiración de la tarjeta de crédito del tarjetahabiente. Formato YYMM Solo para comercios autorizados por Transbank. Largo máximo: 4 |
accountingDate xs:string |
Fecha de la autorización. Largo: 4, formato MMDD |
transactionDate xs:string |
Fecha y hora de la autorización. Largo: 6, formato: MMDDHHmm |
VCI xs:string |
Resultado de la autenticación del tarjetahabiente. Puede tomar el valor: TSY = Autenticación exitosa TSN = Autenticación fallida TO = Tiempo máximo excedido para autenticación ABO = Autenticación abortada por tarjetahabiente U3 = Error interno en la autenticación NP = No Participa, probablemente por ser una tarjeta extranjera que no participa en el programa 3DSecure ACS2 = Autenticación fallida extranjera A = Intento de autenticación INV = Autenticación inválida EOP = Error Operativo Puede ser vacío si la transacción no se autenticó. Largo máximo: 3. Este campo es información adicional suplementaria al responseCode pero el comercio no debe validar este campo. Porque constantemente se agregan nuevos mecanismos de autenticación que se traducen en nuevos valores para este campo que no están necesariamente documentados. (En el caso de tarjetas internacionales que no proveen 3D-Secure, la decisión del comercio de aceptarlas o no se realiza a nivel de configuración del comercio en Transbank y debe ser conversada con el ejecutivo del comercio) |
urlRedirection xs:string |
URL de redirección para visualización de voucher. Largo máximo: 256 |
detailsOutput wsTransactionDetailOutput |
Lista con resultado de cada una de las transactionDetails enviados en initTransaction() . Para Webpay Plus Normal tiene máximo un elemento. |
detailsOutput[0].authorizationCode xs:string |
Código de autorización de la transacción Largo máximo: 6 |
detailsOutput[0].paymentTypeCode xs:string |
Tipo de pago de la transacción. VD = Venta Débito. VN = Venta Normal. VC = Venta en cuotas. SI = 3 cuotas sin interés. S2 = 2 cuotas sin interés. NC = N Cuotas sin interés VP = Venta Prepago. |
detailsOutput[0].responseCode xs:string |
Código de respuesta de la autorización. Valores posibles: 0 = Transacción aprobada -1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción) -2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada) -3 = Error en transacción (Interno Transbank) -4 = Rechazo emisor (Rechazada por parte del emisor) -5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude) |
detailsOutput[0].amount Formato número entero para transacciones en peso y decimal para transacciones en dólares. |
Monto de la transacción. Largo máximo: 10 |
detailsOutput[0].sharesNumber xs:int |
Cantidad de cuotas. Largo máximo: 2 |
detailsOutput[0].commerceCode xs:string |
Código comercio de la tienda. Largo: 12 |
detailsOutput[0].buyOrder xs:string |
Orden de compra de la tienda. Largo máximo: 26 |
acknowledgeTransaction()
Indica a Webpay que se ha recibido conforme el resultado de la transacción.
Parámetros acknowledgeTransaction
Los SDKs ejecutan automáticamente
acknowledgeTransaction()
cuando reciben la respuesta degetTransactionResult()
.
Nombre tipo |
Descripción |
---|---|
tokenInput xs:string |
Token de la transacción. Largo: 64. |
Respuesta acknowledgeTransaction
Los SDKs arrojarán una excepción dentro de
getTransactionResult()
si falla elacknowledgeTransaction()
que se ejecuta automáticamente.
Ninguna.
Webpay Plus Mall
WebpayMallNormal transaction =
new Webpay(configuration).getMallNormalTransaction();
$transaction =
(new Webpay(configuration))->getMallNormalTransaction();
var transaction =
new Webpay(configuration).MallNormalTransaction;
WSDL: /WSWebpayTransaction/cxf/WSWebpayService?wsdl
Una transacción Mall Normal corresponde a una solicitud de autorización financiera de un conjunto de pagos con tarjetas de crédito o débito, en donde quién realiza el pago ingresa al sitio del comercio, selecciona productos o servicios, y el ingreso asociado a los datos de la tarjeta de crédito o débito lo realiza una única vez en forma segura en Webpay para el conjunto de pagos. Cada pago tendrá su propio resultado, autorizado o rechazado.
El Mall Webpay agrupa múltiples tiendas, son estas últimas las que pueden generar transacciones. Tanto el mall como las tiendas asociadas son identificadas a través de un número denominado código de comercio.
Flujo Webpay Plus Mall
El flujo de Webpay Plus Mall es en general el mismo que el de Webpay Plus Normal tanto de cara al tarjeta habiente como de cara al integrador.
Las diferencias son:
- Se debe usar un código de comercio configurado para modalidad Mall en Transbank, el cual debe ser indicado al iniciar la transacción.
- Se pueden indicar múltiples transacciones, cada una asociada a un código de comercio de tienda (que debe estar configurada en Transbank como perteneciente al mall).
- Se debe verificar por separado el resultado de cada una de esas transacciones individualmente, pues es posible que el emisor de la tarjeta autorice algunas y otras no.
Crear una transacción Webpay Plus Mall
Para crear una transacción basta llamar al método initTransaction()
initTransaction() Mall
Permite inicializar una transacción en Webpay. Como respuesta a la invocación se genera un token que representa en forma única una transacción.
WsTransactionDetail storeTransaction = new WsTransactionDetail();
List<WsTransactionDetail> transactions = new ArrayList<>();
storeTransaction.setAmount(amount);
storeTransaction.setCommerceCode(storeCode);
storeTransaction.setBuyOrder(storeBuyOrder);
transactions.add(storeTransaction);
storeTransaction.setAmount(anotherAmount);
storeTransaction.setCommerceCode(anotherStoreCode);
storeTransaction.setBuyOrder(anotherStoreBuyOrder);
transactions.add(storeTransaction);
WsInitTransactionOutput initResult = transaction.initTransaction(
buyOrder, sessionId, returnUrl, finalUrl, transactions);
$transactions = array();
$transactions[] = array(
"storeCode" => $storeCode,
"amount" => $amount,
"buyOrder" => $buyOrder,
"sessionId" => $sessionId
)
$transactions[] = array(
"storeCode" => $anotherStoreCode,
"amount" => $anotherAmount,
"buyOrder" => $anotherBuyOrder,
"sessionId" => $anotherSessionId
)
$initResult = $transaction->initTransaction(
$buyOrder, $sessionId, $returnUrl, $finalUrl, $transactions);
var transactions = new Dictionary<string, string[]>();
transactions.Add(storeCode,
new string[] {storeCode, amount, buyOrder});
transactions.Add(anotherStoreCode,
new string[] {anotherStoreCode, anotherAmount, anotherBuyOrder});
var initResult = transaction.initTransaction(
buyOrder, sessionId, returnUrl, finalUrl, transactions);
Parámetros initTransaction Mall
Nombre tipo |
Descripción |
---|---|
WSTransactionType wsTransactionType |
Indica el tipo de transacción, su valor debe ser siempre TR_MALL_WS para transacciones mall. Los SDKs se encargan automáticamente de este parámetro. |
sessionId xs:string |
(Opcional) Identificador de sesión, uso interno de comercio, este valor es devuelto al final de la transacción. Largo máximo: 61 |
returnURL xs:anyURI |
URL del comercio, a la cual Webpay redireccionará posterior al proceso de autorización Largo máximo: 256. |
finalURL xs:anyURI |
URL del comercio a la cual Webpay redireccionará posterior al voucher de éxito de Webpay. Largo máximo 256. |
buyOrder xs:string |
Es el código único de la orden de compra generada por el comercio mall. |
transactionDetails wsTransactionDetail |
Lista de objetos del tipo wsTransactionDetail, uno por cada tienda diferente del mall que participa en la transacción. |
transactionDetails[].amount xs:decimal |
Monto de la transacción de una tienda del mall. Máximo 2 decimales para USD. Largo máximo: 10. |
transactionDetails[].buyOrder xs:string |
Orden de compra de la tienda del mall. Este número debe ser único para cada transacción. Largo máximo: 26. La orden de compra puede tener: Números, letras, mayúsculas y minúsculas, y los signos |_=&%.,~:/?[+!@()>- . |
transactionDetails[].commerceCode xs:string |
Código comercio asignado por Transbank para la tienda perteneciente al mall a la cual corresponde esta transacción. Largo: 12. Si el código que posees es de 8 dígitos debes anteponer 5970. |
Respuesta initTransaction Mall
initResult.getToken();
initResult.getUrl();
$initResult->token;
$initResult->url;
initResult.token;
initResult.url;
Nombre tipo |
Descripción |
---|---|
token xs:string |
Token de la transacción. Largo: 64. |
url xs:string |
URL de formulario de pago Webpay. Largo máximo: 256. |
Confirmar una transacción Webpay Plus Mall
Para confirmar una transacción se deben usar los métodos getTransactionResult()
y
acknowledgeTransaction()
getTransactionResult() Mall
Permite obtener el resultado de la transacción una vez que Webpay ha resuelto su autorización financiera.
TransactionResultOutput result =
transaction.getTransactionResult(
request.getParameter("token_ws"));
$result = transaction->getTransactionResult(
$request->input("token_ws"));
var result = transaction.getTransactionResult(tokenWs));
Parámetros getTransactionResult Mall
Nombre tipo |
Descripción |
---|---|
tokenInput xs:string |
Token de la transacción. Largo: 64. |
Respuesta getTransactionResult Mall
for (WsTransactionDetailOutput output: result.getDetailOutput()) {
// Se debe chequear cada transacción de cada tienda del
// mall por separado:
if (output.getResponseCode() == 0) {
// Transaccion exitosa, puedes procesar el resultado
// con el contenido de las variables result y output.
output.getAuthorizationCode();
output.getPaymentType();
output.getAmount();
output.getSharesNumber();
output.getCommerceCode();
output.getBuyOrder();
}
}
result.getBuyOrder();
result.getSessionId();
result.getCardDetail().getCardNumber();
result.getCardDetail().getCardExpirationDate();
result.getAccountingDate();
result.getTransactionDate();
result.getVci();
result.getUrlRedirection();
foreach ($result->detailOutput as $output) {
// Se debe chequear cada transacción de cada tienda del
// mall por separado:
if ($output->responseCode == 0) {
// Transaccion exitosa, puedes procesar el resultado
// con el contenido de las variables result y output.
output->authorizationCode;
output->paymentType;
output->amount;
output->sharesNumber;
output->commerceCode;
output->buyOrder;
}
}
result->buyOrder;
result->sessionId;
result->cardDetail->cardNumber;
result->cardDetail->cardExpirationDate;
result->accountingDate;
result->transactionDate;
result->vci;
result->urlRedirection;
foreach (var output in result.detailOutput) {
// Se debe chequear cada transacción de cada tienda del
// mall por separado:
if (output.responseCode == 0) {
// Transaccion exitosa, puedes procesar el resultado
// con el contenido de las variables result y output.
output.authorizationCode;
output.paymentType;
output.amount;
output.sharesNumber;
output.commerceCode;
output.buyOrder;
}
}
result.buyOrder;
result.sessionId;
result.cardDetail.cardNumber;
result.cardDetail.cardExpirationDate;
result.accountingDate;
result.transactionDate;
result.vci;
result.urlRedirection;
Nombre tipo |
Descripción |
---|---|
buyOrder xs:string |
Orden de compra del mall. Largo máximo: 26 |
sessionId xs:string |
Identificador de sesión, el mismo enviado originalmente por el comercio en initTransaction() . Largo máximo: 61. |
cardDetails carddetails |
Objeto que representa los datos de la tarjeta de crédito del tarjeta habiente. |
cardDetails.cardNumber xs:string |
4 últimos números de la tarjeta de crédito del tarjetahabiente.Solo para comercios autorizados por Transbank se envía el número completo. Largo máximo: 16. |
cardDetails.cardExpirationDate xs:string |
(Opcional) Fecha de expiración de la tarjeta de crédito del tarjetahabiente. Formato YYMM Solo para comercios autorizados por Transbank. Largo máximo: 4 |
accoutingDate xs:string |
Fecha de la autorización. Largo: 4, formato MMDD |
transactionDate xs:string |
Fecha y hora de la autorización. Largo: 6, formato: MMDDHHmm |
VCI xs:string |
Resultado de la autenticación del tarjetahabiente. Puede tomar el valor: TSY = Autenticación exitosa TSN = Autenticación fallida TO = Tiempo máximo excedido para autenticación ABO = Autenticación abortada por tarjetahabiente U3 = Error interno en la autenticación NP = No Participa, probablemente por ser una tarjeta extranjera que no participa en el programa 3DSecure ACS2 = Autenticación fallida extranjera A = Intento de autenticación INV = Autenticación inválida EOP = Error Operativo Puede ser vacío si la transacción no se autenticó. Largo máximo: 3. Este campo es información adicional suplementaria al responseCode pero el comercio no debe validar este campo. Porque constantemente se agregan nuevos mecanismos de autenticación que se traducen en nuevos valores para este campo que no están necesariamente documentados. (En el caso de tarjetas internacionales que no proveen 3D-Secure, la decisión del comercio de aceptarlas o no se realiza a nivel de configuración del comercio en Transbank y debe ser conversada con el ejecutivo del comercio) |
urlRedirection xs:string |
URL de redirección para visualización de voucher. Largo máximo: 256 |
detailsOutput wsTransactionDetailOutput |
Lista con resultado de cada una de las transactionDetails enviados en initTransaction() . |
detailsOutput[].authorizationCode xs:string |
Código de autorización de la transacción Largo máximo: 6 |
detailsOutput[].paymentTypeCode xs:string |
Tipo de pago de la transacción. VD = Venta Débito. VN = Venta Normal. VC = Venta en cuotas. SI = 3 cuotas sin interés. S2 = 2 cuotas sin interés. NC = N Cuotas sin interés VP = Venta Prepago. |
detailsOutput[].responseCode xs:string |
Código de respuesta de la autorización. Valores posibles: 0 = Transacción aprobada -1 = Rechazo de transacción - Reintente (Posible error en el ingreso de datos de la transacción) -2 = Rechazo de transacción (Se produjo fallo al procesar la transacción. Este mensaje de rechazo está relacionado a parámetros de la tarjeta y/o su cuenta asociada) -3 = Error en transacción (Interno Transbank) -4 = Rechazo emisor (Rechazada por parte del emisor) -5 = Rechazo - Posible Fraude (Transacción con riesgo de posible fraude) |
detailsOutput[].amount Formato número entero para transacciones en peso y decimal para transacciones en dólares. |
Monto de la transacción. Largo máximo: 10 |
detailsOutput[].sharesNumber xs:int |
Cantidad de cuotas. Largo máximo: 2 |
detailsOutput[].commerceCode xs:string |
Código comercio de la tienda. Largo: 12 |
detailsOutput[].buyOrder xs:string |
Orden de compra de la tienda. Largo máximo: 26 |
acknowledgeTransaction() Mall
Indica a Webpay que se ha recibido conforme el resultado de la transacción.
Parámetros acknowledgeTransaction Mall
Los SDKs ejecutan automáticamente
acknowledgeTransaction()
cuando reciben la respuesta degetTransactionResult()
.
Nombre tipo |
Descripción |
---|---|
tokenInput xs:string |
Token de la transacción. Largo: 64. |
Respuesta acknowledgeTransaction Mall
Los SDKs arrojarán una excepción dentro de
getTransactionResult()
si falla elacknowledgeTransaction()
que se ejecuta automáticamente.
Ninguna.
Otros Servicios Webpay Plus
WSDL: /WSWebpayTransaction/cxf/WSCommerceIntegrationService?wsdl
Captura diferida Webpay Plus
Este método permite a todo comercio habilitado realizar capturas de una transacción autorizada sin captura generada en Webpay Plus o Oneclick. 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.
Las ejecuciones con errores entregarán un SoapFault
de acuerdo a la
codificación de errores definida más abajo.
Para capturar una transacción, ésta debe haber sido creada (según lo visto anteriormente para Webpay Plus Normal o Webpay Plus Mall) por un código de comercio configurado para captura diferida. De esa forma la transacción estará autorizada pero requerirá una captura explícita posterior para confirmar la transacción.
Puedes leer más sobre la captura en la información del producto Webpay para conocer más detalles y restricciones.
Para realizar esa captura explícita debe usarse el método capture()
capture()
Permite solicitar a Webpay la captura diferida de una transacción con autorización y sin captura simultánea.
Los SDKs permiten indicar opcionalmente el código de comercio de la transacción a capturar, para soportar la captura en comercios Webpay Plus Mall. En comercios Webpay Plus Normal, no es necesario especificar el código de comercio pues se usa el indicado en la configuración.
WebpayCapture transaction =
new Webpay(configuration).getCaptureTransaction();
// Para comercios Webpay Plus Normal
CaptureOutput captureResult = transaction.capture(
authorizationCode, capturedAmount, buyOrder);
// Para comercios Webpay Plus Mall
CaptureOutput captureResult = transaction.capture(
authorizationCode, capturedAmount, buyOrder, storeCommerceCode);
$transaction = (new Webpay(configuration))->getCaptureTransaction();
// Para comercios Webpay Plus Normal
$captureResult = transaction.capture(
$authorizationCode, $capturedAmount, $buyOrder);
// Para comercios Webpay Plus Mall
$captureResult = transaction.capture(
$authorizationCode, $capturedAmount, $buyOrder, $storeCommerceCode);
var transaction = new Webpay(configuration).CaptureTransaction;
// Para comercios Webpay Plus Normal
var captureResult = transaction.capture(
authorizationCode, capturedAmount, buyOrder);
// Para comercios Webpay Plus Mall
var captureResult = transaction.capture(
authorizationCode, capturedAmount, buyOrder, storeCommerceCode);
Parámetros capture
Nombre tipo |
Descripción |
---|---|
authorizationCode xs:string |
Código de autorización de la transacción que se requiere capturar Largo máximo: 6. |
buyOrder xs:string |
Orden de compra de la transacción que se requiere capturar. Largo máximo: 26. |
commerceId xs:long |
Código de comercio o tienda mall que realizó la transacción. Largo: 12. Si el código que posees es de 8 dígitos debes anteponer 5970. |
capturedAmount xs:decimal |
Monto que se desea capturar. Largo máximo: 10. |
Respuesta capture
captureResult.getToken();
captureResult.getAuthorizationCode();
captureResult.getAuthorizationDate();
captureResult.getCapturedAmount();
$captureResult->token;
$captureResult->authorizationCode;
$captureResult->authorizationDate;
$captureResult->capturedAmount;
captureResult.token;
captureResult.authorizationCode;
captureResult.authorizationDate;
captureResult.capturedAmount;
Nombre tipo |
Descripción |
---|---|
token xs:string |
Token de la transacción. |
authorizationCode xs:string |
Código de autorización de la captura diferida. |
authorizationDate xs:string |
Fecha y hora de la autorización. |
capturedAmount xs:decimal |
Monto capturado. |
En caso de error pueden aparecer los siguientes códigos exclusivos del método
capture()
:
Código | Descripción |
---|---|
304 | Validación de campos de entrada nulos |
245 | Código de comercio no existe |
22 | El comercio no se encuentra activo |
316 | El comercio indicado no corresponde al certificado o no es hijo del comercio MALL en caso de transacciones MALL |
308 | Operación no permitida |
274 | Transacción no encontrada |
16 | La transacción no es de captura diferida |
292 | La transacción no está autorizada |
284 | Periodo de captura excedido |
310 | Transacción reversada previamente |
309 | Transacción capturada previamente |
311 | Monto a capturar excede el monto autorizado |
315 | Error del autorizador |
Anulación Webpay Plus
Este método permite a todo comercio habilitado anular una transacción que fue generada en Webpay Plus (Normal y Mall) o Oneclick Normal. El método contempla anular total o parcialmente una transacción. Para ello se deberá indicar los datos asociados a la transacción de venta en línea que se desea anular y los montos requeridos para anular. Se considera totalmente anulada una transacción cuando el monto anulado o el monto total de anulaciones cursadas alcancen el monto autorizado en la venta en línea.
El servicio web de anulación de transacciones Webpay soporta una sola
anulación parcial para la transacción de venta en línea. En caso de enviar
una segunda anulación parcial se retornará una Exception
.
Las ejecuciones con errores entregarán un SoapFault de acuerdo a la codificación de errores definida mas abajo.
La anulación puede realizarse máximo 90 días después de la fecha de la transacción original.
Puedes leer más sobre la anulación en la información del producto Webpay para conocer más detalles y restricciones.
Para anular una transacción se debe invocar al método nullify()
.
nullify()
Permite solicitar a Webpay la anulación de una transacción realizada previamente y que se encuentra vigente.
Los SDKs permiten indicar opcionalmente el código de comercio de la transacción a anular, para soportar la anulación en comercios Webpay Plus Mall. En comercios Webpay Plus Normal, no es necesario especificar el código de comercio pues se usa el indicado en la configuración.
WebpayNullify transaction =
new Webpay(configuration).getNullifyTransaction();
// Para comercios Webpay Plus Normal
NullificationOutput result = transaction.nullify(
authorizationCode, authorizedAmount, buyOrder, nullifyAmount);
// Para comercios Webpay Plus Mall
NullificationOutput result = transaction.nullify(
authorizationCode, authorizedAmount, buyOrder, nullifyAmount,
storeCommerceCode);
$transaction = (new Webpay(configuration))->getNullifyTransaction();
// Para comercios Webpay Plus Normal
$result = transaction.nullify(
$authorizationCode, $authorizedAmount, $buyOrder, $nullifyAmount);
// Para comercios Webpay Plus Mall
$result = transaction.nullify(
$authorizationCode, $authorizedAmount, $buyOrder, $nullifyAmount,
$storeCommerceCode);
var transaction = new Webpay(configuration).NullifyTransaction;
// Para comercios Webpay Plus Normal
var result = transaction.nullify(
authorizationCode, authorizedAmount, buyOrder, nullifyAmount);
// Para comercios Webpay Plus Mall
var result = transaction.nullify(
authorizationCode, authorizedAmount, buyOrder, nullifyAmount,
storeCommerceCode);
Parámetros nullify
Nombre tipo |
Descripción |
---|---|
authorizationCode xs:string |
Código de autorización de la transacción que se requiere anular. Si la transacción es de captura diferida, se debe usar el código obtenido al llamar a capture() . Largo máximo: 6. |
authorizedAmount xs:decimal |
Monto autorizado de la transacción que se requiere anular. Si la transacción es de captura diferida, se debe usar el monto capturado cuando se invocó a capture() . Largo máximo: 10. |
buyOrder xs:string |
Orden de compra de la transacción que se requiere anular. Largo máximo: 26. |
nullifyAmount xs:decimal |
Monto que se desea anular de la transacción. Largo máximo: 10. |
commerceId xs:long |
Código de comercio o tienda mall que realizó la transacción. Largo: 12. Si el código que posees es de 8 dígitos debes anteponer 5970. |
Respuesta nullify
result.getToken();
result.getAuthorizationCode();
result.getAuthorizationDate();
result.getBalance();
result.getNullifiedAmount();
$result->token;
$result->authorizationCode;
$result->authorizationDate;
$result->balance;
$result->nullifiedAmount;
result.token;
result.authorizationCode;
result.authorizationDate;
result.balance;
result.nullifiedAmount;
Nombre tipo |
Descripción |
---|---|
token xs:string |
Token de la transacción. |
authorizationCode xs:string |
Código de autorización de la anulación. |
authorizationDate xs:string |
Fecha y hora de la autorización. |
balance xs:decimal |
Saldo actualizado de la transacción (considera la venta menos el monto anulado). |
nullifiedAmount xs:decimal |
Monto anulado. |
En caso de error pueden aparecer los siguientes códigos de error comunes para el método nullify()
:
Código | Descripción |
---|---|
304 | Validación de campos de entrada nulos |
245 | Código de comercio no existe |
22 | El comercio no se encuentra activo |
316 | El comercio indicado no corresponde al certificado o no es hijo del comercio MALL en caso de transacciones MALL |
308 | Operación no permitida |
274 | Transacción no encontrada |
16 | La transacción no permite anulación |
292 | La transacción no está autorizada |
284 | Periodo de anulación excedido |
310 | Transacción anulada previamente |
311 | Monto a anular excede el saldo disponible para anular |
312 | Error genérico para anulaciones |
315 | Error del autorizador |
53 | La transacción no permite anulación parcial de transacciones con cuotas |
Oneclick Normal
WebpayOneClick transaction =
new Webpay(configuration).getOneClickTransaction();
$transaction = (new Webpay(configuration))->getOneClickTransaction();
var transaction = new Webpay(configuration).OneClickTransaction;
WSDL: /webpayserver/wswebpay/OneClickPaymentService?wsdl
La modalidad de pago Oneclick permite al tarjetahabiente realizar pagos en el comercio sin la necesidad de ingresar cada vez información de la tarjeta de crédito al momento de realizar la compra. El modelo de pago contempla un proceso previo de inscripción o enrolamiento del tarjetahabiente, a través del comercio, que desee utilizar el servicio. Este tipo de pago facilita la venta, disminuye el tiempo de la transacción y reduce los riesgos de ingreso erróneo de los datos del medio de pago.
El proceso de integración con Oneclick consiste en desarrollar por parte del comercio las llamadas a los servicios web dispuestos por Transbank para la inscripción de los tarjetahabientes, así como para la realización de los pagos.
Flujo de inscripción y pago
La inscripción es el proceso en el cual el tarjetahabiente registra los datos de su tarjeta en Oneclick para usarlo en compras futuras. Estos datos son almacenados de forma segura en Transbank, y nunca son conocidos por el comercio. Este proceso debe ser iniciado por la tienda del comercio y es requisito que el cliente esté autenticado en la página del comercio antes de iniciar la inscripción.
Proceso:
- El cliente se conecta y autentica en la página del comercio, mediante su nombre de usuario y clave.
- El cliente selecciona la opción de inscripción, la cual debe estar explicada en la página del comercio.
- El comercio consume un servicio web publicado por Transbank, donde entrega los datos del cliente y la URL de término; obtiene un token y URL de Webpay.
- El comercio envía el browser del cliente a la URL obtenida y pasa por parámetro el token (método POST).
- Webpay presenta el formulario de inscripción, este es similar al formulario de pago actual de Webpay Plus, para que el cliente ingrese los datos de su tarjeta.
- El cliente será autenticado por su banco emisor, de forma similar al flujo normal de pago. En este punto se realiza una transacción de $1 peso, la cual no se captura (no se verá reflejada en su estado de cuenta).
- Finalizada la inscripción, Webpay envía el browser del cliente a la URL entregada por el comercio, pasando por parámetro el token.
- El comercio debe consumir otro servicio web de Transbank, con el token, para obtener el resultado de la inscripción y el identificador de usuario, que debe utilizar en el futuro para realizar los pagos.
- El comercio presenta al cliente el resultado de la inscripción.
Después de realizado el proceso de inscripción, el comercio puede iniciar el proceso de pago cuando corresponda.
El pago es el proceso donde el comercio solicita el cargo de una compra a la tarjeta de crédito de un usuario inscrito anteriormente, usando el identificador entregado por Transbank al momento de la inscripción.
Los pagos en esta modalidad no requieren necesariamente la intervención del usuario.
El monto del pago debe estar dentro de los límites establecidos para este tipo de transacciones, el proceso interno es similar a un cargo normal de Webpay. Proceso:
- El cliente se conecta y autentica en la página o aplicación del comercio mediante su nombre de usuario y clave.
- El cliente selecciona la opción de pagar con Oneclick.
- El comercio usa el servicio web de pago, publicado por Transbank, entregando el identificador de usuario (que se obtuvo en la inscripción), el monto del pago y la orden de compra. Obtiene la respuesta con el código de autorización.
- El comercio presenta el resultado del pago al cliente.
Crear una inscripción Oneclick
Para realizar el primero de los procesos descritos (la inscripción), debe llamarse al método initInscription()
initInscription()
Permite realizar la inscripción del tarjetahabiente e información de su
tarjeta de crédito. Retorna como respuesta un token que representa la
transacción de inscripción y una URL (urlWebpay
), que corresponde a la URL
de inscripción de Oneclick.
Una vez que se llama a este servicio Web, el usuario debe ser redireccionado
vía POST a urlWebpay
con parámetro TBK_TOKEN
igual al token obtenido.
OneClickInscriptionOutput initResult =
transaction.initInscription(username, email, urlReturn);
$initResult =
transaction->initInscription(username, email, urlReturn);
var initResult =
transaction.initInscription(username, email, urlReturn);
Parámetros initInscription
Nombre tipo |
Descripción |
---|---|
username xs:string |
Identificador del usuario registrado en el comercio. Largo máximo: 256. |
email xs:string |
Email del usuario registrado en el comercio. Largo máximo: 256. |
responseURL xs:string |
URL del comercio a la cual Webpay redireccionará posterior al proceso de inscripción. Largo máximo: 256. |
Respuesta initInscription
initResult.getToken();
initResult.getUrlWebpay();
$initResult->token;
$initResult->urlWebpay;
initResult.token;
initResult.urlWebpay;
Nombre tipo |
Descripción |
---|---|
token xs:string |
Token de la inscripción. |
urlWebpay xs:string |
URL de formulario Webpay. |
Confirmar una inscripción Oneclick
Una vez terminado el flujo de inscripción en Transbank el usuario es enviado a
la URL de fin de inscripción que definió el comercio. En ese instante el
comercio debe llamar a finishInscription()
.
finishInscription()
Permite finalizar el proceso de inscripción del tarjetahabiente en Oneclick. Retorna el identificador del usuario en Oneclick, el cual será utilizado para realizar las transacciones de pago.
OneClickFinishInscriptionOutput result =
transaction.finishInscription(
request.getParameter("TBK_TOKEN"));
$result = $transaction->finishInscription(
$request->input("TBK_TOKEN"));
var result = transaction.finishInscription(tbkToken);
Nombre tipo |
Descripción |
---|---|
token xs:string |
Token de la inscripción. |
Respuesta finishInscription
result.getResponseCode();
result.getAuthCode();
result.getCreditCardType().getValue();
result.getLast4CardDigits();
result.getTbkUser();
$result->responseCode;
$result->authCode;
$result->creditCardType;
$result->last4CardDigits;
$result->tbkUser;
result.responseCode;
result.authCode;
result.creditCardType;
result.last4CardDigits;
result.tbkUser;
Nombre tipo |
Descripción |
---|---|
responseCode xs:int |
Código de retorno del proceso de inscripción, donde 0 (cero) es aprobado. |
authCode xs:string |
Código que identifica la autorización de la inscripción. |
creditCardType creditCardType |
Indica el tipo de tarjeta inscrita por el cliente (Visa, AmericanExpress, MasterCard, Diners, Magna). |
last4CardDigits xs:string |
Los últimos 4 dígitos de la tarjeta ingresada por el cliente en la inscripción. |
tbkUser xs:string |
Identificador único de la inscripción del cliente en Oneclick, que debe ser usado para realizar pagos o borrar la inscripción. |
Autorizar un pago con Oneclick
Una vez realizada la inscripción, el comercio puede usar el tbkUser
recibido
para realizar transacciones. Para eso debe usar el método authorize()
.
authorize()
Permite realizar transacciones de pago. Retorna el resultado de la autorización. Este método debe ser ejecutado cada vez que el usuario selecciona pagar con Oneclick en el comercio.
OneClickPayOutput output = transaction.authorize(
buyOrder, tbkUser, username, amount);
$output = $transaction.authorize(
buyOrder, tbkUser, username, amount);
var output = transaction.authorize(
buyOrder, tbkUser, username, amount);
Parámetros authorize
Nombre tipo |
Descripción |
---|---|
amount xs:decimal |
Monto del pago en pesos. |
buyOrder xs:long |
Identificador único de la compra generado por el comercio. |
tbkUser xs:string |
Identificador único de la inscripción del cliente (devuelto por finishInscription() ). |
username xs:string |
Identificador del usuario en los sistemas del comercio (el mismo indicado en initInscription() ). |
Respuesta authorize
output.getAuthorizationCode();
output.getCreditCardType().value();
output.getLast4CardDigits();
output.getTransactionId();
output.getResponseCode();
$output->authorizationCode;
$output->creditCardType;
$output->last4CardDigits;
$output->transactionId;
$output->responseCode;
output.authorizationCode;
output.creditCardType;
output.last4CardDigits;
output.transactionId;
output.responseCode;
Nombre tipo |
Descripción |
---|---|
authorizationCode xs:string |
Código de autorización de la transacción de pago. |
creditCardType creditCardType |
Indica el tipo de tarjeta que fue inscrita por el cliente (Visa, AmericanExpress, MasterCard, Diners, Magna). |
last4CardDigits xs:string |
Los últimos 4 dígitos de la tarjeta usada en la transacción. |
transactionId xs:long |
Identificador único de la transacción de pago. |
responseCode xs:int |
Código de retorno del proceso de pago, donde: 0 (cero) es aprobado. -1, -2, -3, -4, -5, -6, -7, -8: Rechazo -96: No existe inscripción asociada. -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. |
Reversar un pago Oneclick
Este proceso permite reversar una venta cuando esta no pudo concretarse, dentro del mismo día contable, con la finalidad de anular un cargo realizado al cliente. Para esto se debe consumir el método codeReverseOneClick()
con la orden de compra de la transacción a reversar.
codeReverseOneClick()
Permite reversar una transacción de venta autorizada con anterioridad. Este método retorna como respuesta un identificador único de la transacción de reversa.
boolean success = transaction.reverseTransaction(buyOrder);
$result = $transaction->reverseTransaction($buyOrder);
var result = transaction.reverseTransaction(buyOrderLong);
Parámetros codeReverseOneClick
Nombre tipo |
Descripción |
---|---|
buyOrder xs:long |
Orden de compra de la transacción a reversar. |
Respuesta codeReverseOneClick
// El SDK Java solo entrega el booleano de estado, no el código de reversa :(
success;
// El SDK PHP solo entrega el booleano de estado, no el código de reversa :(
$result->success;
result.reversed;
result.reverseCode;
Nombre tipo |
Descripción |
---|---|
reversed xs:boolean |
Indica si tuvo éxito la reversa. |
reverseCode xs:long |
Identificador único de la transacción de reversa. |
Anular un pago Oneclick
En caso que ya no sea el mismo día contable y se requiera dejar sin efecto una venta, es posible anular un pago realizado con Oneclick Normal usando el mismo método de anulación Webpay Plus.
Eliminar una inscripción Oneclick
En el caso que el comercio requiera eliminar la inscripción de un usuario en
Oneclick ya sea por la eliminación de un cliente en su sistema o por la
solicitud de este para no operar con esta forma de pago, el comercio deberá
invocar a removeUser()
con el identificador de usuario entregado en la
inscripción.
removerUser()
Permite eliminar una inscripción de usuario en Transbank
boolean success = transaction.removeUser(tbkUser, username);
$success = $transaction->removeUser($tbkUser, $username);
var success = transaction.RemoveUser(tbkUser, username);
Parámetros removerUser
Nombre tipo |
Descripción |
---|---|
tbkUser xs:string |
Identificador único de la inscripción del cliente |
username xs:string |
Identificador del usuario en los sistemas del comercio (el mismo indicado en initInscription() ). |
Respuesta removerUser
El boolean de respuesta será true
en caso de éxito y false
en caso contrario.
Oneclick Mall
Los SDKs no soportan aún los servicios Oneclick Mall.
WSDL: /WSWebpayTransaction/cxf/WSOneClickMulticodeService?wsdl
Flujo de inscripción y pago Mall
El flujo de Oneclick Mall es en general el mismo que el de Webpay Oneclick Normal tanto de cara al tarjeta habiente como de cara al integrador.
Las diferencias son:
- El usuario debe estar registrado en la página del comercio "mall" agrupador, pero las transacciones son a nombre de loas "tiendas" del mall.
- Se pueden indicar múltiples transacciones a autorizar en una misma operación.
- Se debe verificar por separado el resultado de cada una de esas transacciones individualmente, pues es posible que el emisor de la tarjeta autorice algunas y otras no.
Crear una inscripción Oneclick Mall
Para iniciar la inscripción debe usarse el método initInscription()
initInscription() Mall
Permite gatillar el inicio del proceso de inscripción.
Los SDKs no soportan aún los servicios Oneclick Mall.
Parámetros initInscription Mall
Nombre tipo |
Descripción |
---|---|
username xs:string |
Identificador del usuario registrado en el comercio. |
email xs:string |
Email del usuario registrado en el comercio. |
returnUrl xs:string |
URL a la que será enviado el cliente finalizado el proceso de inscripción. |
Respuesta initInscription Mall
Nombre tipo |
Descripción |
---|---|
token xs:string |
Identificador, único, del proceso de inscripción. Debe ser enviado por parámetro (TBK_TOKEN ) a la URL urlInscriptionForm . |
urlInscriptionForm xs:string |
URL de Webpay para iniciar la inscripción. |
Confirmar una inscripción Oneclick Mall
Una vez terminado el flujo de inscripción en Transbank el usuario es enviado a
la URL de fin de inscripción que definió el comercio (returnUrl
). En ese
instante el comercio debe llamar a finishInscription()
.
finishInscription() Mall
Permite finalizar el proceso de inscripción obteniendo el usuario tbk.
Los SDKs no soportan aún los servicios Oneclick Mall.
Parámetros finishInscription Mall
Nombre tipo |
Descripción |
---|---|
token xs:string |
Identificador del proceso de inscripción. Es entregado por Webpay en la respuesta del método initInscription() . |
Respuesta finishInscription Mall
Nombre tipo |
Descripción |
---|---|
responseCode xs:int |
Código de respuesta del proceso de inscripción, donde 0 (cero) es aprobado. |
authorizationCode xs:string |
Código que identifica la autorización de la inscripción. |
creditCardType creditCardType |
Indica la marca de la tarjeta de crédito que fue inscrita por el cliente (Visa, AmericanExpress, MasterCard, Diners, Magna) |
cardNumber xs:string |
Indica los últimos 4 dígitos y/o BIN de la tarjeta de crédito utilizada. |
cardExpirationDate xs:string |
Indica la fecha de expiración de la tarjeta de crédito utilizada. |
cardOrigin cardOrigin |
Indica si la tarjeta de crédito utilizada es nacional (NATIONAL_CARD) o extranjera (FOREIGN_CARD). |
tbkUser xs:string |
Identificador único de la inscripción del cliente, este debe ser usado para realizar pagos o eliminar la inscripción. |
Autorizar un pago con Oneclick Mall
Una vez realizada la inscripción, el comercio puede usar el tbkUser
recibido
para realizar transacciones. Para eso debes usar el método authorize()
.
autorize() Mall
Permite autorizar un pago.
Los SDKs no soportan aún los servicios Oneclick Mall.
Parámetros authorize Mall
Nombre tipo |
Descripción |
---|---|
buyOrder xs:long |
Identificador único de la operación para el comercio mall. |
tbkUser xs:string |
Identificador único de la inscripción del cliente (devuelto por finishInscription() ). |
username xs:string |
Identificador del usuario en los sistemas del comercio (el mismo indicado en initInscription() ). |
storesInput wsOneClickMulticodeStorePaymentInput |
Lista de objetos con la información de cada transacción de las tiendas del mall. |
storesInput[].commerceId xs:long |
Código de comercio hijo de la tienda. |
storesInput[].buyOrder xs:string |
Identificador único de la compra generado por el comercio hijo (tienda). |
storesInput[].amount xs:decimal |
Monto de la sub-transacción de pago. En pesos o dólares según configuración comercio mall padre. |
storesInput[].sharesNumber xs:int |
Cantidad de cuotas de la sub-transacción de pago. |
Respuesta authorize Mall
Nombre tipo |
Descripción |
---|---|
commerceId xs:long |
Código de comercio del comercio padre. |
buyOrder xs:string |
Orden de compra generada por el comercio padre. |
settlementDate xs:string |
Fecha contable de la autorización del pago. |
authorizationDate xs:dateTime |
Fecha completa (timestamp) de la autorización del pago. |
storesOutput wsOneClickMulticodeStorePaymentOutput |
Lista con el resultado de cada transacción de las tiendas hijas. |
storesOutput[].commerceId xs:long |
Código de comercio del comercio hijo (tienda). |
storesOutput[].buyOrder xs:string |
Orden de compra generada por el comercio hijo para la sub-transacción de pago. |
storesOutput[].amount xs:decimal |
Monto de la sub-transacción de pago. |
storesOutput[].authorizationCode xs:string |
Código de autorización de la sub-transacción de pago. |
storesOutput[].paymentType xs:string |
Tipo (VC, NC, SI, etc.) de la sub-transacción de pago. |
storesOutput[].responseCode xs:int |
Código de retorno del proceso de pago, donde: 0 (cero) es aprobado. -1, -2, -3, -4, -5, -6, -7, -8: Rechazo -97: Límites Oneclick, máximo monto diario de pago excedido. -98: Límites Oneclick, máximo monto de pago excedido -99: Límites Oneclick, máxima cantidad de pagos diarios excedido. |
storesOutput[].sharesNumber xs:int |
Cantidad de cuotas de la sub-transacción de pago. |
storesOutput[].shareAmount xs:decimal |
Monto por cuota de la sub-transacción de pago. |
Reversar o Anular un pago Oneclick Mall
Para Oneclick Mall hay dos operaciones diferentes para dejar sin efecto transacciones autorizadas: La reversa y la anulación.
La reversa se aplica para problemas operacionales (lado comercio) o de
comunicación entre comercio y Transbank que impidan recibir a tiempo la
respuesta de una autorización. En tal caso el comercio debe intentar
reversar la transacción de autorización para evitar un posible descuadre entre
comercio y Transbank. La reversa funciona sobre la operación completa del mall,
lo que significa que todas las transacciones realizadas en la operación mall
serán reversadas. Y sólo puede ser usada hasta 30 segundos después de la
llamada a authorize()
La anulación, en cambio, actúa individualmente sobre las transacciones de las tiendas de un mall. Por ende, la anulación es la operación correcta a utilizar para fines financieros, de manera de anular un cargo ya realizado. También es posible reversar una anulación debido a problemas operacionales (por ejemplo un error de comunicación al momento de anular, que le impida al comercio saber si Transbank recibió la anulación).
Para llevar a cabo la reversa, el comercio debe usar el método reverse()
. Para la anulación, se debe usar el método nullify()
. Y para reversar una anulación existe el método reverseNullification()
reverse() Mall
Permite reversar una operación de autorización.
Los SDKs no soportan aún los servicios Oneclick Mall.
Parámetros reverse Mall
Nombre tipo |
Descripción |
---|---|
buyOrder xs:string |
Orden de compra generada por el comercio padre (mall) para la operación a reversar. |
Respuesta reverse Mall
La respuesta es una lista con tantos elementos como transacciones haya tenido la
operación identificada por buyOrder
:
Nombre tipo |
Descripción |
---|---|
[].commerceId xs:long |
Código de comercio del comercio hijo (tienda). |
[].buyOrder xs:string |
Orden de compra del comercio hijo para la sub-transacción de pago. |
[].reversed xs:boolean |
Indica si la reversa se realizó correctamente o no. |
[].reverseCode xs:string |
Identificador único de la transacción de reversa. |
nullify() Mall
Permite anular un pago.
Los SDKs no soportan aún los servicios Oneclick Mall.
Parámetros nullify Mall
Nombre | Descripción |
---|---|
commerceId | Identificador del comercio hijo (tienda) para la sub-transacción de pago a anular. |
buyOrder | Orden de compra generada por el comercio hijo, para la sub-transacción de pago a anular. |
authorizedAmount | Monto de la sub-transacción de pago a anular. |
authorizationCode | Código de autorización de la sub-transacción de pago a anular. |
nullifyAmount | Monto a anular de la sub-transacción de pago. Puede ser un monto parcial o monto total. |
Respuesta nullify Mall
Nombre tipo |
Descripción |
---|---|
token xs:string |
Identificador único de la transacción de anulación. |
buyOrder xs:string |
Orden de compra de la sub-transacción de pago anulada. |
commerceId xs:long |
Código de comercio del comercio hijo (tienda). |
authorizationCode xs:string |
Código de autorización de la transacción de anulación. |
authorizationDate xs:dateTime |
Fecha de la autorización de la transacción de anulación. |
nullifiedAmount xs:decimal |
Monto anulado. |
balance xs:decimal |
Monto restante de la sub-transacción de pago original: monto inicial – monto anulado. |
reverseNullification()
Permite reversar una anulación.
Los SDKs no soportan aún los servicios Oneclick Mall.
Parámetros reverseNullification
Nombre tipo |
Descripción |
---|---|
buyOrder xs:string |
Orden de compra generada por el comercio hijo, para la sub-transacción de pago anulada. |
commerceId xs:long |
Código de comercio del comercio hijo (tienda). |
nullifyAmount xs:decimal |
Monto anulado en la transacción de anulación que se intenta reversar. |
Respuesta reverseNullification
Nombre tipo |
Descripción |
---|---|
reversed xs:boolean |
Indica si la reversa se realizó correctamente o no. |
reverseCode xs:long |
Identificador único de la transacción de reversa. |
Eliminar una inscripción Oneclick Mall
En el caso que el comercio requiera eliminar la inscripción de un usuario en Oneclick Mall ya sea por la eliminación de un cliente en su sistema o por la solicitud de este para no operar con esta forma de pago, el comercio deberá invocar a removeInscription()
con el identificador de usuario entregado en la inscripción.
removeInscription() Mall
Permite eliminar una inscripción de usuario en Oneclick Mall
Los SDKs no soportan aún los servicios Oneclick Mall.
Parámetros removeInscription Mall
Nombre tipo |
Descripción |
---|---|
tbkUser xs:string |
Identificador único de la inscripción del cliente. |
username xs:string |
Nombre de usuario, del cliente, en el sistema del comercio. |
Respuesta removeInscription Mall
Nombre tipo |
Descripción |
---|---|
result xs:boolean |
Indica si la eliminación se realizó correctamente o no. |
Captura Diferida Oneclick Mall
Los SDKs no soportan aún los servicios Oneclick Mall.
Una transacción Oneclick Mall permite que el tarjetahabiente registre su tarjeta de la misma forma en que ocurre con una transacción Oneclick, asociando dicha inscripción a un comercio padre. Ahora, una vez realizada la inscripción, el comercio padre tiene permitido autorizar transacciones sin captura para los comercios “hijo” registrados que tengan habilitado captura diferida. Además posterior a la autorización tiene permitido capturar dicho monto reservado. La autorización se encarga de validar si es posible realizar el cargo a la cuenta asociada a la tarjeta de crédito realizando en el mismo acto la reserva de monto de la transacción. La captura hace efectiva la reserva hecha previamente o cargo en la cuenta de crédito asociada a la tarjeta del titular. Estas modalidades, por separado, solo son válidas para tarjetas de crédito.
Para realizar esa captura explícita debe usarse el método capture()
capture() Mall
Este método permite a los comercios Oneclick Mall habilitados, poder realizar capturas diferidas de una transacción previamente autorizada. El método contempla una única captura por cada autorización. Para ello se deberá indicar los datos asociados a la transacción de venta y el monto requerido para capturar, el cual debe ser menor o igual al monto originalmente autorizado. Para capturar una transacción, ésta debe haber sido creada por un código de comercio configurado para captura diferida. De esta forma la transacción estará autorizada pero requerirá una captura explícita posterior para confirmar la transacción.
Parámetros capture Mall
Nombre tipo |
Descripción |
---|---|
authorizationCode xs:string |
Código de autorización de la transacción que se requiere capturar. Largo máximo: 6. |
buyOrder xs:string |
Orden de compra de la transacción que se requiere capturar. Largo máximo: 26. |
commerceId xs:long |
Código de tienda mall que realizó la transacción. Largo: 12. Si el código que posees es de 8 dígitos debes anteponer 5970. |
capturedAmount xs:decimal |
Monto que se desea capturar. Largo máximo: 10. |
Respuesta capture Mall
Nombre tipo |
Descripción |
---|---|
token xs:string |
Token de la transacción. |
authorizationCode xs:string |
Código de autorización de la captura diferida. |
authorizationDate xs:string |
Fecha y hora de la autorización. |
capturedAmount xs:decimal |
Monto capturado. |