- Descripción
- Requisitos
- Instalación
- Conceptos Básicos
- Documentación SDK
La librería webpay-sdk-ruby está orientada a usuarios con conocimiento intermedios de programación que buscan desarrollar sus propias soluciones de e-commerce. Estas encapsulan métodos de comunicación y cifrado para facilitar la integración de desarrollos propietarios al portal de pago Webpay.
En este manual contiene la descripción básica de clases y métodos necesarios.
Esta librería fue desarrolla para trabajar sobre un ambiente web conectado a internet que contenga a lo menos:
- Ruby 2.2
- Ruby on rails 4.4
- Único protocolo de comunicación aceptado: TLS 1.2
Descarga el sdk y guárdala en una carpeta de tu computador.
Descomprima el contenido dentro del directorio webroot de su servidor.
Las carpetas incluidas son:
libwebpay/
: Carpeta que contiene la gema para instalar librería Webpaysample/
: Ejemplos básicos de utilización en un sitio web con ruby on railssample/app/views/certificates
: Certificados de de cifrado de ejemplo (solo para ambiente de Integración)
Se debe agregar el certificado de confianza a Windows para que Ruby pueda ser ejecutado de forma segura en este ambiente.
Procedimiento: Agregar certificado a repositorio de certificados seguros en Windows: Esto se realiza en una consola, ejecutar el comando:
"set SSL_CERT_FILE=C:\{Ruta sample}\app\views\certificates\globalCA.pem"
Para instalar la librería (en formato de gema) se debe ejecutar el siguiente comando desde la consola, ubicándose en la ruta donde está la gema
> gem install libwebpay-2.0.0.gem
De esta manera se tendrá disponible para ser usada en el proyecto.
-
Ubicarse en la ruta del directorio “sample” y ejecutar en consola el comando:
> rails server
Se levantará un server para ejecución del demo.
-
En el navegador ir a la dirección: http://localhost:3000/, se desplegará un menú para ejecución del pago normal:
Para ejecucion en WINDOWS se debe setear certificado de confianza Global.pem con comando:
set SSL_CERT_FILE=C:\{Ruta sample}\sample\app\views\certificates\globalCA.pem
Datos de Prueba ambiente Integraciónn.
Tarjeta VISA Nro 4051885600446623 CVV 123
RUT 11.111.111-1
Clave 123
Para la comunicación con Webpay es necesaria la creación de certificados de cifrado. Para su creación, es necesario contar con un código de comercio propio entregado por Transbank, una vez registrado como comercio vía los canales comerciales (mesa ayuda).
En este SDK, se incluyen certificados de prueba creados con un código de comercio genérico, que podrán ser utilizados para fines de prueba e integración.
Para la interacción con los e-commerce, Webpay expone Webservices estilo SOAP firmados digitalmente en distintas URL (encapsulados en esta librería).
Webpay cuenta con 3 ambientes de trabajo, que requerirán distintos códigos de comercio y certificados: • Integración: utilizado para realizar desarrollos y pruebas. • Certificación: utilizado certificar el portal del comercio antes del lanzamiento. • Producción: ambiente oficial con transacciones reales.
Este SDK ya incluye la configuración de las distintas URLs utilizadas por cada ambiente.
Si requiere información acerca de la conexión directa los WebServices SOAP, visite https://www.transbank.cl
Webpay cuenta diversos productos según si requerimientos, los que tendrán que ser acordados con su agente comercial al momento de registrarse como comercio.
Estos son:
- Webpay Normal: Para transacciones normales con captura y cargo inmediato.
- Webpay Captura Diferida: Cuando requiere reservar crédito del cliente para confirmar la transacción con posterioridad.
- Webpay Mall: Para comercios que sub-agrupan pequeños departamentos y necesitan diferenciar los pagos.
- Webpay Onclick: Para quienes requieren comprar con solo un click (el comercio es responsable frente a fraudes de usurpación de identidad).
- Webpay Anulación: Permite anular transacciones ya realizadas.
Cada producto presenta distintos flujos y datos en sus llamadas, los cuales son descriptos en forma básica en este documento.
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.
require 'libwebpay'
#Se crea objeto para invocar la libreria
libwebpay = Libwebpay.new
#se rescatan variables de los certificados
config = libwebpay.getConfiguration
config.commerce_code = commerce_code
config.environment = environment
config.private_key = private_key
config.public_cert = public_cert
config.webpay_cert = webpay_cert
webpay = libwebpay.getWebpay(config)
Parámetro | Tipo | Descripción |
---|---|---|
commerce_code | String | Código de comercio. |
private_key | String | Llave privada. |
public_cert | String | Certificado público. |
webpay_cert | String | Certificado del servidor |
environment | String | Ambiente "INTEGRACION", "CERTIFICACION", "PRODUCCION" |
Inicia la transacción devolviendo el id de transacción
result = webpay.getNormalTransaction.initTransaction(amount, buyOrder, sessionId, urlReturn, urlFinal)
Parámetro | Tipo | Descripción |
---|---|---|
amount | Integer | Monto. |
buyOrder | String | Orden de compra. |
sessionId | String | Identificador de sesión. |
urlReturn | String | URL retorno. |
urlFinal | String | URL final. |
Como resultado se obtiene un Hash
:
if(result['error_desc'] == 'TRX_OK')
token = result['token']
url = result['url']
else
error = result['error_desc']
end
Retorno | Tipo | Descripción |
---|---|---|
token | String | Token identificador transacción |
url | String | Url webpay. |
Método que permite obtener el resultado de la transacción y los datos de la misma.
result = webpay.getNormalTransaction.getTransactionResult(token)
Parámetro | Tipo | Descripción |
---|---|---|
token | String | Token id de transacción. |
En este punto ya hemos confirmado la transacción con Transbank realizando la operación acknowledgeTransaction mediante getTransactionResult. El método debe ser invocado siempre, independientemente del resultado entregado por el método authorize. Si la invocación no se realiza en un período de 40 segundos, Webpay reversará la transacción, asumiendo que el comercio no pudo informarse de su resultado, evitando así el cargo al tarjetahabiente.
if(result['error_desc'] == 'TRX_OK')
accountingdate = result['accountingdate']
buyorder = result['buyorder']
cardnumber = result['cardnumber']
amount = result['amount']
commercecode = result['commercecode']
authorizationcode = result['authorizationcode']
paymenttypecode = result['paymenttypecode']
responsecode = result['responsecode']
transactiondate = result['transactiondate']
urlredirection = result['urlredirection']
vci = result['vci']
end
VD = Venta Debito.
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.
0 Transacción aprobada.
-1 Rechazo de transacción.
-2 Transacción debe reintentarse.
-3 Error en transacción.
-4 Rechazo de transacción.
-5 Rechazo por error de tasa.
-6 Excede cupo máximo mensual.
-7 Excede límite diario por transacción.
-8 Rubro no autorizado.
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.
Vacío si la transacción no se autentico.
Antes de finalizar, se debe redireccionar al voucher de Transbank, luego este re-direccionará al cliente a la URL_FINAL indicando el token. Con los datos almacenados en el paso anterior se puede desplegar el voucher propio del comercio.
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.
### Configuración
#Se crea objeto para invocar la libreria
libwebpay = Libwebpay.new
#se rescatan variables de los certificados
config = libwebpay.getConfiguration
config.commerce_code = commerce_code
config.environment = environment
config.private_key = private_key
config.public_cert = public_cert
config.webpay_cert = webpay_cert
config.store_codes = store_codes
webpay = libwebpay.getWebpay(config)
Parámetro | Tipo | Descripción |
---|---|---|
commerce_code | String | Código de comercio. |
private_key | String | Llave privada. |
public_cert | String | Certificado público. |
webpay_cert | String | Certificado del servidor |
environment | String | Ambiente "INTEGRACION", "CERTIFICACION", "PRODUCCION" |
store_codes | Array | Códigos de tiendas. |
Inicia la transacción devolviendo el id de transacción
result = webpay.getMallNormalTransaction.initTransaction(buyOrder, sessionId, urlReturn, urlFinal, stores)
Parámetro | Tipo | Descripción |
---|---|---|
buyOrder | String | Orden de compra. |
sessionId | String | Identificador de sesión (Opcional). |
urlReturn | String | URL retorno. |
urlFinal | String | URL final. |
stores | Array | Arreglo de Hash s con datos de tiendas. |
Cada elemento dentro de stores
es un Hash
con los siguientes elementos:
Key | Tipo | Valor |
---|---|---|
storeCode | Integer | Código de Tienda. |
amount | Integer | Monto. |
buyOrder | String | Orden de compra. |
sessionId | String | Identificador de sesión (Opcional). |
Como resultado se obtiene un Hash
:
if(result['error_desc'] == 'TRX_OK')
token = result['token']
url = result['url']
else
error = result['error_desc']
end
Retorno | Tipo | Descripción |
---|---|---|
token | String | Token identificador transacción |
url | String | Url webpay. |
Permite obtener el resultado de la transacción una vez que Webpay ha resuelto su autorización financiera.
result = webpay.getMallNormalTransaction.getTransactionResult(token)
Parámetro | Tipo | Descripción |
---|---|---|
token | String | Token id de transacción. |
En este punto ya hemos confirmado la transacción con Transbank realizando la operación acknowledgeTransaction mediante getTransactionResult. El método debe ser invocado siempre, independientemente del resultado entregado por el método authorize. Si la invocación no se realiza en un período de 40 segundos, Webpay reversará la transacción, asumiendo que el comercio no pudo informarse de su resultado, evitando así el cargo al tarjetahabiente.
Como resultado se obtiene un Hash
:
if(result['error_desc'] == 'TRX_OK')
accountingDate = result['accountingDate']
buyOrder = result['buyOrder']
cardNumber = result['cardNumber']
#Si se tiene mas de dos comercios, es recomendable utilizar un ciclo foreach
detailOutput1 = Nokogiri::HTML(result['detailOutput1'])
detailOutput2 = Nokogiri::HTML(result['detailOutput2'])
sessionId = result['sessionId']
transactionDate = result['transactionDate']
urlRedirection = result['urlRedirection']
vci = result['vci']
end
Retorno | Tipo | Descripción |
---|---|---|
buyOrder | String | Orden de compra. |
sessionId | String | Identificador de sesión. |
cardDetails | carddetails | Datos de tarjeta de crédito. |
accoutingDate | String | Fecha de la autorización |
transactionDate | String | Fecha, hora de la autorización. |
VCI | String | Resultado de la autenticación. |
urlRedirection | String | URL de redirección. |
detailsOutput | wsTransactionDetailOutput | Detalle de transacción financiera. |
VD = Venta Debito.
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.
0 Transacción aprobada.
-1 Rechazo de transacción.
-2 Transacción debe reintentarse.
-3 Error en transacción.
-4 Rechazo de transacción.
-5 Rechazo por error de tasa.
-6 Excede cupo máximo mensual.
-7 Excede límite diario por transacción.
-8 Rubro no autorizado.
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.
Vacío si la transacción no se autentico.
Antes de finalizar, se debe redireccionar al voucher de Transbank, luego este re-direccionará al cliente a la URL_FINAL indicando el token. Con los datos almacenados en el paso anterior se puede desplegar el voucher propio del comercio.
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.
require 'libwebpay'
#Se crea objeto para invocar la libreria
libwebpay = Libwebpay.new
#se rescatan variables de los certificados
config = libwebpay.getConfiguration
config.commerce_code = commerce_code
config.environment = environment
config.private_key = private_key
config.public_cert = public_cert
config.webpay_cert = webpay_cert
webpay = libwebpay.getWebpay(config)
Parámetro | Tipo | Descripción |
---|---|---|
commerce_code | String | Código de comercio. |
private_key | String | Llave privada. |
public_cert | String | Certificado público. |
webpay_cert | String | Certificado del servidor |
environment | String | Ambiente "INTEGRACION", "CERTIFICACION", "PRODUCCION" |
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 One Click. 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.
result = webpay.getOneClickTransaction.initInscription(username, email, urlReturn)
Parámetro | Tipo | Descripción |
---|---|---|
username | String | Nombre de usuario o cliente en el sistema del comercio. |
String | Dirección de correo electrónico registrada por el comercio. | |
urlReturn | String | URL de retorno. |
Como resultado se obtiene un Hash
:
if(result['error_desc'] == 'TRX_OK')
token = result['token']
url = result['url']
else
error = result['error_desc']
end
Retorno | Tipo | Descripción |
---|---|---|
token | String | Token identificador transacción |
url | String | Url webpay. |
Permite finalizar el proceso de inscripción del tarjetahabiente en Oneclick. Entre otras cosas, retorna el identificador del usuario en Oneclick, el cual será utilizado para realizar las transacciones de pago. 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.
result = webpay.getOneClickTransaction.finishInscription(token)
Parámetro | Tipo | Descripción |
---|---|---|
token | String | Token id de transacción. |
Como resultado se obtiene un Hash
:
result = webpay.getOneClickTransaction.finishInscription(token)
if(result['error_desc'] == 'TRX_OK')
responseCode = result['responseCode']
authCode = result['authCode']
tbkUser = result['tbkUser']
last4CardDigits = result['last4CardDigits']
creditCardType = result['creditCardType']
end
Retorno | Tipo | Descripción |
---|---|---|
authCode | String | Código de Retorno. |
creditCardType | Integer | Tipo de tarjeta inscrita. |
last4CardDigits | String | Los últimos 4 dígitos de la tarjeta. |
responseCode | String | Código que identifica autorización. |
tbkUser | String | Identificador único de la inscripción. |
Permite realizar transacciones de pago. Retorna el resultado de la autorización. Este método que debe ser ejecutado, cada vez que el usuario selecciona pagar con Oneclick.
result = webpay.getOneClickTransaction.authorize(buyOrder, tbkUser, username, amount)
Parámetro | Tipo | Descripción |
---|---|---|
buyOrder | Long | Orden de compra. |
tbkUser | String | Id usuario |
username | String | Nombre de usuario. |
amount | BigDecimal | Monto. |
Como resultado se obtiene un Hash
:
if(result['error_desc'] == 'TRX_OK')
authCode = result['authCode']
responseCode = result['responseCode']
transactionId = result['transactionId']
last4CardDigits = result['last4CardDigits']
creditCardType = result['creditCardType']
else
error = result['error_desc']
end
Retorno | Tipo | Descripción |
---|---|---|
authCode | String | Código de autorización. |
creditCardType | Integer | Tipo de tarjeta inscrita. |
last4CardDigits | String | Los últimos 4 dígitos de la tarjeta. |
responseCode | String | Código que identifica autorización. |
transactionId | String | Identificador único de la transacción. |
Código | Descripción |
---|---|
0 | Aprobado |
-1 | Rechazado |
-2 | Rechazado |
-3 | Rechazado |
-4 | Rechazado |
-5 | Rechazado |
-6 | Rechazado |
-7 | Rechazado |
-8 | Rechazado |
-97 | Limites Oneclick, máximo monto diario de pago excedido |
-98 | Limites Oneclick, máximo monto de pago excedido |
-99 | Limites Oneclick, máxima cantidad de pagos diarios excedido |
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.
result = webpay.getOneClickTransaction.reverse(buyOrder)
Parámetro | Tipo | Descripción |
---|---|---|
buyOrder | Long | Orden de compra. |
Como resultado se obtiene un Hash
:
if(result['error_desc'] == 'TRX_OK')
response = result['response']
end
Este método permite a todo comercio habilitado anular una transacción que fue generada en plataforma Webpay 3G. 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.
require 'libwebpay'
#Se crea objeto para invocar la libreria
libwebpay = Libwebpay.new
#se rescatan variables de los certificados
config = libwebpay.getConfiguration
config.commerce_code = commerce_code
config.environment = environment
config.private_key = private_key
config.public_cert = public_cert
config.webpay_cert = webpay_cert
webpay = libwebpay.getWebpay(config)
Parámetro | Tipo | Descripción |
---|---|---|
commerce_code | String | Código de comercio. |
private_key | String | Llave privada. |
public_cert | String | Certificado público. |
webpay_cert | String | Certificado del servidor |
environment | String | Ambiente "INTEGRACION", "CERTIFICACION", "PRODUCCION" |
Permite solicitar a Webpay la anulación de una transacción realizada previamente y que se encuentra vigente. El método nullify debe ser invocado siempre indicando el código del comercio que realizó la transacción. En el caso de comercios MALL, el código debe ser el código de la tienda virtual.
result = webpay.getNullifyTransaction.nullify(authorizationCode, authorizedAmount, buyOrder, nullifyAmount, config.commerce_code)
Parámetro | Tipo | Descripción |
---|---|---|
authorizationCode | String | Código de autorización de la transacción que se requiere anular. |
authorizedAmount | Decimal | Monto autorizado de la transacción que se requiere anular. |
buyOrder | String | Orden de compra de la transacción que se requiere anular. |
nullifyAmount | Decimal | Monto que se desea anular de la transacción. |
commercecode | Long | Código de comercio o tienda mall que realizó la transacción. |
Como resultado se obtiene un Hash
:
if(result['error_desc'] == 'TRX_OK')
authorizationCodeResp = result['authorizationCode']
authorizationDate = result['authorizationDate']
balance = result['balance']
nullifiedAmount = result['nullifiedAmount']
token = result['token']
end
Retorno | Tipo | Descripción |
---|---|---|
token | String | Token identificador transacción. |
authorizationCode | String | Código autorización de anulación. |
authorizationDate | dateTime | Fecha y hora de la autorización. |
balance | decimal | Saldo actualizado de la transacción. |
nullifiedAmount | decimal | Monto anulado |
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 anulación excedido |
310 | Transacción reversada previamente |
309 | Transacción capturada previamente |
311 | Monto a capturar excede el monto autorizado |
315 | Error del autorizador |
Este método permite a todo comercio habilitado realizar capturas de una transacción autorizada sin captura en plataforma Webpay 3G. 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.
require 'libwebpay'
#Se crea objeto para invocar la libreria
libwebpay = Libwebpay.new
#se rescatan variables de los certificados
config = libwebpay.getConfiguration
config.commerce_code = commerce_code
config.environment = environment
config.private_key = private_key
config.public_cert = public_cert
config.webpay_cert = webpay_cert
webpay = libwebpay.getWebpay(config)
result = webpay.getCaptureTransaction.capture(authorizationCode, captureAmount, buyOrder)
Parámetro | Tipo | Descripción |
---|---|---|
authorizationCode | String | Código de autorización de la transacción que se requiere capturar. |
captureAmount | decimal | Monto autorizado de la transacción que se requiere capturar. |
buyOrder | String | Orden de compra de la transacción que se requiere capturar. |
Como resultado se obtiene un Hash
:
if (result['error_desc'] == 'TRX_OK')
authorizationCodeResp = result['authorizationCode']
authorizationDate = result['authorizationDate']
capturedAmount = result['capturedAmount']
token = result['token']
end
Retorno | Tipo | Descripción |
---|---|---|
authorizationCode | String | Código autorización de captura. |
authorizationDate | dateTime | Fecha y hora de la autorización. |
capturedAmount | decimal | Monto capturado. |
token | String | Token identificador transacción. |