Blog 

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

En artículos anteriores, habíamos abordado como integrar una aplicación construida en Rails con Webpay Plus, para luego certificar esa integración y poder recibir pagos a través de nuestro sitio. 

Esta integración estaba basada en la antigua API SOAP de Transbank para Webpay. Esta continuará funcionando hasta el día 5 de julio del 2022, y posterior a eso, la darán de baja. Por lo anterior todos tenemos que actualizar nuestras integraciones a la nueva API de Webpay, que es del tipo REST.

¿Cómo actualizar mi antigua integración a Webpay?

Para nuestra suerte, el cambio es bastante sencillo, si ya se tenia todo armado desde antes. Basta con generar un nuevo archivo con los Endpoints REST, y desconectar el antiguo y conectar el nuevo.

Te dejo un archivo ejemplo de como lo armamos nosotros.

class WebpayPlus
URL_BASE = Rails.env.production? ? 'https://webpay3g.transbank.cl' : 'https://webpay3gint.transbank.cl'
def self.init_transaction(order)
unless order.respond_to?(:webpay_object_data)
undefined_method_webpay_object_data_error(order)
end
response = api_connection.post do |req|
req.url '/rswebpaytransaction/api/webpay/v1.0/transactions'
req.body = order.webpay_object_data.merge({
return_url: url_helpers.webpay_return_url(app_host)
}).to_json
end
if (response = process_response(response))
return response
else
return nil
end
end
def self.transaction_confirmation(webpay_token)
response = api_connection.put do |req|
req.url "/rswebpaytransaction/api/webpay/v1.0/transactions/#{webpay_token}"
end
# WARNING
# Use this only if the app have an old data structure and you have to provide backward compatibility
if (response = process_response(response))
response['legacy_format'] = response_to_a(response)
return response
else
return nil
end
end
private
def self.api_connection
return Faraday.new(
url: URL_BASE,
headers: request_headers
)
end
def self.request_headers
return {
'Tbk-Api-Key-Id' => Rails.application.secrets.webpay["key_id"],
'Tbk-Api-Key-Secret' => Rails.application.secrets.webpay["key_secret"],
'Content-Type' => 'application/json'
}
end
def self.process_response(response)
if response.status == 200
return JSON.parse(response.body)
else
return nil
end
end
def self.app_host
Rails.application.config.action_mailer.default_url_options
end
def self.url_helpers
Rails.application.routes.url_helpers
end
# WARNING
# Use this only if the app have an old data structure and you have to provide backward compatibility
def self.response_to_a(webpay_response)
commerce_code = ''
url_redirection = ''
return [
webpay_response['status'],
webpay_response['accounting_date'],
webpay_response['buy_order'],
webpay_response['installments_number'],
webpay_response['card_detail']['card_number'],
webpay_response['amount'],
commerce_code,
webpay_response['authorization_code'],
webpay_response['payment_type_code'],
webpay_response['response_code'],
webpay_response['transaction_date'],
url_redirection,
webpay_response['vci'],
webpay_response['session_id'],
webpay_response['installments_amount'],
webpay_response['balance'],
]
end
def self.undefined_method_webpay_object_data_error(order)
# webpay_object_data method expected return
# {
# buy_order: <ORDER UNIQUE ID OR CODE>,
# session_id: <NUMBER TO IDENTIFY SESSION. IF YOU DO NOT HAVE. USE THIS: rand(1111111..9999999).to_s>,
# amount: <ORDER TOTAL AMOUNT>
# }
raise "Method Missing. You must implement 'webpay_object_data' on '#{order.class}' class.
Check this raised error to see data structure.
{
buy_order: order_numer,
session_id: session_id,
amount: order_total
}"
end
end
view raw webpay_plus.rb hosted with ❤ by GitHub

La mayor diferencia de la forma SOAP a la REST, es que antiguamente usábamos certificados auto-firmados y una llave que nos entregaba el soporte de Transbank, hoy basta con Key ID y un Secret ID.

‘Tbk-Api-Key-Id’ => Rails.application.secrets.webpay[“key_id”]

‘Tbk-Api-Key-Secret’ => Rails.application.secrets.webpay[“key_secret”]

Con la nueva clase Webpay Plus, ya solo faltaría remplazar los antiguos métodos init_transaction y transaction_confirmation en el return_url, en las acciones del controlador que corresponda.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails
Método: init_transaction
Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails
Método: transaction_confirmation

Con estos pasos, tu integración ya se encontraría actualizada y podemos continuar a la validación de ésta.


¿Cómo es el proceso de validación?

Es simple, solo se debe ingresar al siguiente link, y verás algo como lo que te muestro a continuación:

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails
https://www.transbankdevelopers.cl/documentacion/como_empezar#el-proceso-de-validacion

Acá claramente debemos ir por la segunda opción, porque nos integramos directamente a la API.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails
Formulario de validación de TBK por medio de integración directa o de SDK

Ingreso de datos relevantes

A continuación te pedirán algunos datos importantes, que debes tener a mano, como:

  • Código de comercio asociado.
  • Rut del comercio.
  • Nombre y apellido -de la persona encargada de la integración-.
  • Correo (Correo de la misma persona, donde llegara la llave productiva).
  • Número telefónico (Te llamarán en caso de dudas, a mi no me llamaron).

Además, como puedes ver en la imagen, se te pedirá que vuelvas a cargar el logo que generaste en la integración anterior. Así que procura tenerlo. Es una imagen del logo del comercio, con formato PNG y un tamaño de 130×59.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

En el punto 7, se te consulta si la integración funciona dentro de una aplicación nativa de teléfonos. En este caso, estamos en web, así que la respuesta es No.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Además se te solicitará una URL, para poder probar la integración. Procura tenerla preparada con la actualización REST. Se te preguntará, también, por una URL productiva, si no la tienes, manda la misma que la anterior.

En el punto 10, se te preguntará por la moneda con la que contrataste el servicio. Pon la misma que pusiste en el contrato, que lo más seguro es que sea en CLP.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

En el paso 11, el tipo de desarrollo. Tenemos que seleccionar desarrollo propio, conectándose directamente a la API. Si es que no seguiste este tutorial y usas un SDK, debes seleccionar la primera obviamente.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

En el lenguaje de programación, obvio, Ruby.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

En el punto 13, el producto integrado será Webpay Plus. Si existen dudas de las diferencias en los productos, podemos evaluar sacar un artículo explicando uno por uno pero, para este caso, si queremos recibir pagos de forma normal directamente desde Webpay y con un solo comercio como principal, la opción es la A

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Pruebas de integración

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Las pruebas deben ser realizadas en el ambiente de INTEGRACIÓN, que debe estar preparado en tu URL que indicaste como de pruebas. Acá te dejo la URL con los datos de prueba para integración.

Todas estas pruebas se realizan en tu ambiente de TEST, ejecutando compras de prueba y tomando nota del token que se te genera. Así que asegúrate de que este token (token_ws) se guarde en algún lado para poder enviarlo en el formulario.

Los datos de las tarjetas que use fueron:

  • Crédito:

VISA 4051 8856 0044 6623
CVV 123 – Fecha ex: 12/25

  • Débito:

4051 8842 3993 7763

Prueba 1 Compra exitosa crédito sin cuotas

Realizar una compra normal, con tarjeta de crédito y sin cuotas.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Iniciar con compra normal en el eCommerce, y luego al ingresar a Webpay escribir los datos de la tarjeta, como muestra la siguiente imagen:

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Luego en el siguiente paso, ingresar los datos de prueba para el banco de Transbank. Si no los recuerdas, son los siguientes:

  • Rut: 11.111.111–1
  • Clave: 123
Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Como primer ejemplo y de acuerdo a lo que solicita la prueba, se debe “Aceptar” la transacción.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails
Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Una vez se procese el pago, Webpay responderá con un set de datos relevantes para ti, entre ellos el “token_ws” que es lo que necesitas para ingresar en el formulario:

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails
En este ejemplo lo mandamos por URL, para hacerlo gráfico.

Prueba 2 — Compra rechazada crédito sin cuotas

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Mismo ejercicio que el anterior, una compra normal, sin cuotas, pero ahora se debe “Rechazar” la transacción, como lo muestra la siguiente imagen:

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Es importante recalzar que la compra no se finalizará, por lo que debes idear una forma de guardar el “token_ws” para poder registrarlo en el formulario.

Prueba 3  —  Compra exitosa crédito con cuotas

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Realizar mismo ejercicio que en la prueba 1, pero esta vez seleccionar un número de cuotas al ingresar los datos de la tarjeta de crédito:

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Registrar el “token_ws” y se te mostrará un mensaje como el siguiente:

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Prueba 4 Compra rechazada con débito

En esta oportunidad, se debe realizar nuevamente una compra y rechazarla, como la de la prueba 2, pero sin embargo esta debe ser con una tarjeta de débito.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

En la siguiente imagen te dejo un ejemplo:

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

No olvides de registrar el “token_ws”, para ingresarlo en el formulario.

Prueba 5 — Compra anulada

La más simple de todas, la imagen siguiente es super gráfico y no necesita tantas explicaciones. Solo procura registrar el token_ws de la transacción porque ahora no será tan evidente como todas las anteriores pruebas. Es por ello que yo registro el token_ws en la respuesta inmediata del return_url, luego del init_transaction.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Últimos pasos

Se te consulta si es que implementaste la anulaciones o reversas de transacciones de la API. No es obligatorio implementar este endpoint. Pero si eventualmente quieres hacerlo, te dejo la documentación.

Reversar una transaccion

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Y se termina la parte de pruebas. Ya falta unos pocos pasos para terminar el formulario.

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Casos bordes adicionales:

Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails
Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails
Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Y con esto finalizas el proceso de validación ahora solo queda esperar el correo, que se refleja en las siguientes líneas donde ya se te habilitan credenciales productivas y puedes operar finalmente con la URL definitiva.


Actualización de Webpay SOAP a REST en mi aplicación con Ruby On Rails

Su Tbk-Api-Key-Secret productiva es la siguiente:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Su Tbk-Api-Key-Id productiva es la siguiente:

59xxxxxxxxxx

Para finalizar el proceso debe:

Realizar la configuración al ambiente de producción, encontraras la información en el siguiente link https://www.transbankdevelopers.cl/documentacion/como_empezar#configuracion-de-produccion

Modificar los valores de Tbk-Api-Key-Secret y Tbk-Api-Key-Id del ambiente de integración a producción de acuerdo a los valores indicados anteriormente

Habilitar un producto de prueba dentro de su sitio por un monto de $50.

Realizar una transacción con una tarjeta real mediante su sistema de pago (crédito o débito) para validar el correcto funcionamiento de medio de pago en su sitio.

Si la transacción resulta exitosa, puede generar ventas con total normalidad y no quedarían gestiones pendientes por parte nuestra. En cambio si la transacción falla o presenta algún error, por favor contáctese lo antes posible con nuestra mesa de Fallas Virtuales a los números 600 638 6380 y +562 2661 2700 desde celulares o bien al correo soporteweb@transbank.cl durante las 24 horas del día.


Con estos pasos ya tendrías lista tu integración a la API REST de Webpay Plus. Recuerda que tienes solo hasta el 5 de julio de 2022 para realizar esta actualización, posterior a eso, darán de baja la API SOAP.

Publicado el 28 abril, 2022

Categorías

Etiquetas

Te puede interesar

Certificación con WebPay Plus

Certificación con WebPay Plus

Para el proceso de integración, Certificación y Paso a Producción Transbank dispone de 3 ambientes, que requerirán...

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada.

HABLEMOS

¿TE AYUDAMOS A IMPLEMENTAR SOFTWARE EN TU EMPRESA?

Estaríamos encantados de ayudarte

Garage Labs

contacto@garagelabs.cl

+569 8741 1528 | +569 3537 2885