Enero 2014 Ángel Infante Yter Jefe de proyectos en atSistemas Integración de la pasarela de pagos Adyen en IBM WebSphere Commerce La pasarela de pago Adyen conecta con más de 200 métodos de pago distribuidos en América del Norte, América Latina, Europa, Asia Oriental y Oceanía. Incluye desde tarjetas de crédito internacionales hasta métodos de pago locales basados en efectivo. Adyen no sólo se encarga de procesar los pagos sino que, además, proporciona todos los métodos a través de una única solución. La integración de Adyen es extremadamente flexible, permitiendo externalizar completamente la gestión de los datos de pago y su seguridad, cumpliendo los estándares de la normativa PCI (Payment Card Industry); o capturar los datos en el sistema de comercio electrónico, mediante IBM WebSphere Commerce, siempre y cuando la empresa cumpla los estándares PCI. Para ello, Adyen pone a disposición de sus clientes una versión Hosted Payment, donde el usuario interactúa con pantallas proporcionadas por Adyen hasta que la plataforma de comercio electrónico recibe la confirmación; y una API (Interfaz de Programación de Aplicaciones), mediante la cual se puede gestionar la transacción completa en la plataforma de comercio electrónico. La experiencia de atSistemas en la integración de Adyen se demuestra mediante el caso concreto expuesto en este documento, donde se explica su integración con IBM WebSphere Commerce mediante un plugin de pago desarrollado a tales efectos. Además del plugin Adyen para WebSphere Commerce, en atSistemas hemos desarrollado plugins para integrar las siguientes pasarelas de pago: Saferpay, PayPal, Klarna, y Gift Card. Funcionalidad Dentro de este proceso de integración, no interesa centrarse sólo en la realización del pago mediante el plugin desarrollado, sino llegar a integrar tres sistemas a la vez, en el proceso de integración: atsistemas.com • WebSphere Commerce: delega el pago a Adyen, recibe la confirmación e informa al ERP que el pedido ha sido completado. Adyen: interactúa en modalidad Hosted Payment con el usuario para recoger los datos de pago y completar el proceso. Notifica al plugin de pago sobre los cambios de estado en el pago, principalmente autorización y posterior captura - el importe ha sido retirado realmente de la cuenta del usuario. • ERP: se comunica con el plugin de pago para comprobar la captura, y aprueba el pedido para que sea enviado al cliente. • Integración de la pasarela de pagos Adyen en IBM WebSphere Commerce El siguiente diagrama ilustra las interacciones entre los tres sistemas implicados: Websphere Commerce Frontend Backend Adyen payment plugin Checkout Send Order Open Hosted Payment Page Notification Status Check ERP USER Adyen Payment Frontend Backend Capture Request Gestión de Riesgos Para ir sustituyendo, gradualmente, un método de pago en uso por uno soportado a través de Adyen, es necesario un sistema de distribución de peticiones entre ambos métodos. La incorporación de un nuevo método de pago siempre implica ciertos riesgos para la correcta gestión de los pedidos. En caso de que Adyen esté destinado a sustituir un método de pago en uso, funcionando correctamente durante un periodo de tiempo considerable, una buena medida preventiva consiste en incorporar de forma incremental la nueva pasarela, empezando a dar servicio a un pequeño grupo de usuarios, e incrementando el alcance hasta cubrir el 100% de los pedidos. Para poder acometer este enfoque incremental, es necesario un sistema de distribución de peticiones entre el método de pago anterior y Adyen. Dado que un sistema aleatorio que mostrase una u otra pasarela de pago alternativamente sería desconcertante para el usuario, el sistema debe garantizar que un mismo usuario siempre visualice la misma pasarela para un método de pago concreto. Una buena estrategia consiste en establecer un valor porcentual configurado en el sistema; y que sólo los usuarios con los dos últimos dígitos de su identificador por debajo del porcentaje configurado, puedan realizar el pago mediante la nueva pasarela. El plugin desarrollado implementa esta estrategia. atsistemas.com Integración de la pasarela de pagos Adyen en IBM WebSphere Commerce Arquitectura Para lograr acometer la integración descrita en el apartado anterior, el desarrollo realizado se divide realmente en dos subsistemas: • Plugin de pago para WebSphere Commerce, que delega la información de los datos de pago a Adyen. • Servicios Web responsables de recibir las notificaciones de Adyen y consultas de estado del ERP. Aunque los servicios web podrían estar alojados en un servidor distinto, en el caso que nos ocupa los servicios se desarrollaron dentro del propio WebSphere Commerce, como un módulo más de su arquitectura. Estructura de Paquetes El plugin desarrollado está formado por los siguientes paquetes: • com.atsistemas.commerce.store.checkout.command: comandos que gestionan los datos de la sesión del pago y muestran la página de pago de Adyen. • com.atsistemas.commerce.orders.command: comandos que procesan el pago. Realizan la invocación del plugin de pago y cierran la pantalla de Adyen para mostrar la página de confirmación de WebSphere Commerce. • com.atsistemas.commerce.adyen.notification.object: Entity Beans para persistir las notificaciones en la base de datos. • com.atsistemas.commerce.adyen.notification.service: WebService Javabeans, cuya estructura corresponde al WSDL de Adyen. Plugin de pago El plugin para Adyen cumple con las especificaciones de WebSphere Commerce. El siguiente diagrama describe el flujo de pago gestionado por el plugin en modalidad Hosted Payment: UI AdyenPlugin Controller Adyen :Checkout openPaymentFrame USER :DoPayment popup result :orderProcess :approve :confirm :confirmationPage atsistemas.com Integración de la pasarela de pagos Adyen en IBM WebSphere Commerce Servicios Web Los Servicios Web desarrollados son responsables de recibir las notificaciones de Adyen, e informar del estado del pago al ERP. Recepción de Notificaciones Todas las notificaciones se almacenan en una tabla a medida para su posterior consulta desde el ERP, o para fines estadísticos. Adyen ofrece dos alternativas para recibir sus notificaciones: • Servicios Web SOAP • Servicios Web HTTP+XML La diferencia entre ambos enfoques radica en el encapsulado SOAP y en el descriptor WSDL, que permite validar la estructura de los datos. Por estos motivos, SOAP fue la alternativa seleccionada. A continuación, se muestra la estructura de la tabla en la que el servicio almacena las notificaciones recibidas: Column Name ID ADYEN NOTIFICATION RECEPTION DATE LIVE Column Type Lenght Column Constraints NUMBER 20 PRIMARY KEY DATE NOT NULL NUMBER 1 EVENTCODE VARCHAR2 30 PSP_REFERENCE VARCHAR2 100 ORIGINAL REFERENCE VARCHAR2 100 MERCHANT REFERENCE VARCHAR2 100 MERCHANT ACCOUNTCODE VARCHAR2 250 EVENT DATE SUCCESS DATE NUMBER 1 PAYMENT METHOD VARCHAR2 50 OPERATIONS VARCHAR2 2048 CHAR 3 AMOUNT NUMBER 20 SCORING NUMBER 20 SCORING RULES HIT VARCHAR 255 REASON VARCHAR2 255 CURRENCY atsistemas.com Column Type NOT_NULL, INDEXED NOT UNIQUE Herramienta de traducción de catálogo para IBM WebSphere Commerce Información del Fraude La estructura de las notificaciones de Adyen es muy rigurosa, excepto en un punto: el mapa de datos adicionales. El contenido indefinido de este mapa aporta mayor flexibilidad a Adyen, y fue uno de los puntos que presentaron mayores dificultades en tiempo de análisis. Justamente en este mapa es donde se encuentra la información relativa al fraude. El mapa de datos en el que se informa el fraude contiene un conjunto de controles de fraude aplicados y la puntuación total de fraude. Todos los identificadores de los controles de fraude contienen el prefijo fraudCheck-*, mientras que la puntuación total de fraude viene informada con el identificador totalFraudScore. <additionalData> <entry> <string>fraudCheck-1-PaymentDetailReferral</string> <string>0</string> </entry> <entry> <string>fraudCheck-3-PaymentDetailUsage</string> <string>0</string> </entry> <entry> <string>totalFraudScore</string> <string>51</string> </entry> Los controles de fraude con valor mayor a 0, se almacenan en el campo SCORING_RULES_HIT. Información de Estado Este servicio web publica una operación llamada checkAdyenStatus cuya firma es: <String outcome,String reason> checkAdyenStatus (String PSPReference, String operation) Esta operación recibe el PSPRefrence, que es el identificador de pago de Adyen; y una cadena que informa la operación a realizar - PAYMENT o REFUND -. Cuando el servicio es invocado, éste busca el resultado de la última operación de Devolución o Captura, entre todas las filas de la tabla ADYEN_NOTIFICATIONS cuyo campo PSP_REFERENCE coincide con el valor pasado por parámetro. El resultado puede ser SUCCESS, FAILED o NOT FOUND. atsistemas.com En atSistemas somos más de 500 profesionales dedicados desde 1994 a la consultoría, servicios de IT y desarrollo de software. Nuestros servicios se caracterizan por la flexibilidad y la agilidad, lo que nos permite ayudar a grandes empresas de todos los sectores, aportando conocimiento y experiencia sobre el más amplio abanico de tecnologías. Nuestra cartera de clientes incluye más de 200 de las principales empresas del país, con representación de todos los sectores de actividad, a los que prestamos servicio desde nuestras oficinas de Madrid, Barcelona, Cádiz y Zaragoza. Nuestro portfolio de servicios abarca desde el desarrollo de software a medida hasta la integración de grandes soluciones de software empresarial, en áreas que van desde la más compleja arquitectura de sistemas hasta las soluciones más novedosas de comercio electrónico o aplicaciones móviles. Valle de Alcudia, 3 28230 Las Rozas, Madrid Passeig de Gràcia 55, 8º - 4ª 08007 Barcelona 902 888 902 atsistemas.com info@atsistemas.com