Hace un tiempo atrás, Transbank (la empresa detrás de Webpay) había habilitado una nueva modalidad para integrar su sistema de pago con nuestros sitios. Se trata de un servicio web que utiliza el protocolo SOAP, haciendonos más fácil la integración con respecto a su antecesor. Y para soportar esto en Drupal, se ha publicado una nueva versión del módulo Webpay y aquí veremos como funciona.
Ya han pasado cuatro años desde que publiqué un post sobre como integrar webpay plus en Drupal, utilizando el módulo en la versión 7.x-1.x. Esta versión soportaba la integración usando el KCC, una aplicación que ejecutaba un conjunto de archivos CGI y que contaba con ciertas restricciones para ejecutarse. Una vez que lograbamos hacerlo funcionar en nuestro servidor, venía la etapa de configurar el módulo en Drupal, el cual tenía una sección en donde ingresabamos los datos de configuración y que se debían agregar a un archivo para después subirlo junto al KCC, de seguro que más de alguno se pudo haber perdido en este proceso. Bueno, todo esto acaba en la nueva versión 7.x-2.x.
¿7.x-1.x y 7.x-2.x?
En Drupal permiten subir distintas versiones de un módulo y publicarlos en paralelo. Esto para definir la compatibilidad con el core (7.x) y por la revisión (1.x / 2.x). Estas últimas se diferencian, normalmente, por el como están construídos y con ello sus características. En el caso del módulo Webpay la versión 7.x-1.x está escrita para soportar KCC y la versión 7.x-2.x para soportar Webservice. Por lo tanto si estás usando la versión 7.x-1.x y quieres actualizarte a la versión 7.x-2.x, primero tendrás que desinstalar la versión anterior.
También considerar que en la versión 7.x-2.x ya no existe el sub módulo Webpay Test, su funcionalidad ya viene incluido en el módulo base, más adelante lo veremos en detalle.
Requisitos 7.x-2.x
Si bien ya no necesitamos el KCC ni del CGI, de igual forma se requieren de ciertas aplicaciones para hacer funcionar el módulo 7.x-2.x:
- La extensión SOAP de php
- La extensión Mcrypt de php
- El módulo Libraries de Drupal
- El módulo Entity de Drupal
- La biblioteca XML Encryption and Signatures. Deben descargarlo en sites/*/libraries. También pueden ejectar el drush make "webpay.make".
Instalación
Ya teniendo lo anteriormente mencionado, deberíamos ser capaces de descargar e instalar el módulo Webpay de la misma forma que se instalan todos los módulos. Recomendado usar drush:
drush en -y webpay
Una vez habilitado nos vamos a la configuración (admin/config/webpay)
En esta sección entramos a Commerces. Aquí se ingresan los códigos de comercio que te asignaría Transbank junto con las llaves publicas y privadas. Al instalar el módulo, automáticamente ingresa un comercio de prueba para certificar la integración.
Por cada código de comercio ingresado, pueden ejecutar el la opción "Test", con esto podremos asegurarnos de que existe conexión con Webpay y se simulará una compra:
Las credenciales y tarjetas de pruebas lo puedes encontrar en la documentación de Transbank.
Si todo sale bien entonces nuestro sitio está correctamente configurado para usar Webpay.
Servicios o Transacciones Soportadas
El servicio Web de transbank cuenta con distintos servicios o tipos de transacciones, los cuales puedes revisar aquí. Por el momento, el módulo sólo soporta la transacción Normal.
Módulos de Comercios Soportados
Como la versión anterior del módulo, este solo sirve como base para integrar webpay en tu sitio. Si necesitas integrarlo con Drupal Commerce, Ubercart u otro sistema de comercio, tendrás que instalar sus respectivas extensiones. Actualmente, la nueva versión solo está siendo soportada por Drupal Commerce siendo su versión respectiva 7.x-2.x.
Drupal Commerce
Al instalar la nueva versión, tendrán que ir a configuración del método de pago de commerce (admin/commerce/config/payment-methods) y editar Webpay. Luego hacer click en "Enable payment method: Webpay" y seleccionar el código de comercio.
Custom
Si necesitas integrar webpay con un sistema custom, puedes hacerlo de la siguiente forma:
Paso 1: Iniciar transacción
Para iniciar una transacción debes crear un formulario y ejecutar el servicio initTransaction.
<?phpfunction my_module_webpay_init_form($form, &$form_state) { // $config_id sería el ID de la configuración relacionado al código del comercio. // Para iniciar una transacción: $config = webpay_get_config($config_id); $webpayService = new WebpayNormalService($config, 'nombre_maquina_sistema_comercio'); $response = $webpayService->initTransaction($order_compra, $monto, $url_final, $instancia_referencial, $transaccion_id); // Se arma el formulario: $form['#action'] = $response->url; $form['token_ws'] = array( '#type' => 'hidden', '#value' => $response->token, ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Pagar', ); return $form;}?>
Paso 2: Recibir pago
El módulo Webpay recibirá el pago y lo validará, si todo sale bien invocará el hook_webpay_transaction_accepted o en caso contrario el hook_webpay_transaction_rejected:
<?phpfunction my_module_webpay_transaction_accepted($instance_id, $config, $webpay_transaction) { // $instance_id corresponde al ingresado anteriormente $instancia_referencial // $config corresponde a la configuración del código de comercio. // $webpay_transaction es el objeto con la información de la transacción aprobada. // Hacer algo}?>
Paso 3: Tener preparado la vista de la página final
Aquí se define el contenido de la url final, puedes crear un nodo con dicha url o crear un menu callback.
Puedes ver el código del módulo Webpay, donde hace el test como de ejemplo.
¿Y que hay de las otras plataformas?
Si tu sitio no está desarrollado en Drupal, no te preocupes, Transbank ha publicado un portal llamado Transbank Developers, con el objetivo de apoyar a los desarrolladores en la integración en sus distintos proyectos. Aquí suben plugins para plataformas de comercios de software libre y también bibliotecas (SDK) en distintos lenguajes de programación (PHP, Java y .net). También habilitan una especie de marketplace de integradores.
Últimos Comentarios