Magento ERP: API de Magento
07

nov

 

Magento ERP: API de Magento

Magento ERP : Conexión de pedidos mediante el API de Magento

A la hora de realizar una integración Magento ERP, una de las entidades mas importantes cuando nos planteamos sincronizar nuestra tienda online con cualquier otro sistema externo del tipo ERP  (Navisión, Axapta, Spyro, OpenERP, etc) son los pedidos. Para llevar a cabo este propósito existen multiples soluciones válidas. En esta entrada del blog, nos centraremos en un caso práctico en el cual deseamos  comunicar los pedidos de nuestra tienda online empleando para ello el API de Magento.


 

Análisis de la implementación del modelo de negocio: Magento ERP.

Supongamos un caso práctico, que perfectamente podría extrapolarse al mundo real, en el que tenemos una tienda online Magento para vender nuestros productos por internet. Sin embargo, el canal de ventas online no representa la úinca forma de vender de nuestra empresa. En nuestro caso, también disponemos de tiendas físicas y de una centralita que nos sirve para gestionar los pedidos telefónicos que realizan nuestros clientes. En este caso, en el que perfectamente pueden verse reflejadas muchas PYMES  y empresas de cierto calibre, tenemos hasta tres canales de venta distintos para una misma compañía:

1- Canal de ventas online: Representado por Magento.

2- Canal de ventas físico:  Constituido por nuestra red de tiendas.

3- Canal de ventas telefónico: Constituido por por nuestra centralita telefónica.

Resulta obvio, que una acción mas que interesante, pasa por centralizar toda la gestión de pedidos, stocks, clientes y pedidos en una única plataforma en la que podamos focalizar toda la lógica y gestión de nuestro negocio. No tendría ningún sentido que los pedidos online se gestionarán en Magento y la gestión telefónica de pedidos y las tiendas físicas emplearán herramientas totalmente distintas que no pudieran comunicarse entres si. Al menos, si lo hicieran, si deberían de sincronizarse en una plataforma común que centralizara toda la logica de nuestro negocio. Es aquí, donde para muchas empresas cobre un papel fundamental su ERP. No obstante, analicemos dos casos distintos totalmente factibles:

CASO 1 : Magento como gestor de la lógica de negocio.

En nuestro caso, Magento es el lugar donde nuestros usuarios web realizan sus pedidos. Los clientes se dan de alta en la plataforma de ecommerce y termina su compra sin ningún tipo de problema. Magento por defecto puede gestionar stocks de productos, promociones de carrito de compras, promociones de catálogo, descuentos por volumen, cupones descuentos, clientes, grupos de clientes, precios por grupos de clientes, facturas, envíos (totales y parciales), formas de envío, formas de pago y así hasta un largo etcetera de funcionalidades. Por lo tanto ¿Que me impide gestionar todos los pedidos que mi negocio genere mediante el resto de canales por Magento?  Pues realmente, si las funcionalidades de Magento son suficientes y cubren todas mis necesidades no habría problema. es decir, podría emplear Magento como canal de ventas online y aprovechar  sus caracteríticas para gestionar el resto de pedidos. Veamos como hacerlo:

- Ventas telefónicas: El equipo de operadores contaría con accesos al panel de administración de Magento. Desde el panel de administración de Magento podemos generar nuevos pedidos, crear nuevos clientes durante el mismo proceso del pedido o seleccionar cliente existentes. Durante la conversación telefónica, iríamos agregando los distintos productos al pedido, seleccionaríamos la forma de pago , etc hasta finalizar el pedido. Es mas, el cliente podría tener luego un seguimiento del mismo desde su cuenta de usuario por la web.

- Tiendas físicas: La operativa sería la misma que para el canal de ventas telefónico.

Como podemos observar Magento esta preparado para ello, si bien es cierto, que este caso no suele darse en el mundo real, al menos no en empresas con un volumen alto de clientes y pedidos donde la complejidad de promociones, ofertas  y volumen de información en general sobrepasan las funcionalidades propias de Magento. Además, hacer un pedido desde el panel e administración de Magento por estándar, no permite disponer de todas las formas de pago por defecto en la plataforma y no es precisamente el método mas rápido para realizar un pedido. Para todas estas gestiones, tenemos los ERPs y ciertamente lo mas común suele ser conectar todos nuestros distintos canales de ventas con nuestro ERP (La conexión Magento ERP es la que nos importa en esta entrada). No obstante, no quería dejar pasar la posibilidad de comentar las posibilidades de Magento, pues si los ERPs están preparados para gestionar toda la lógica de negocio de las PYMES y grandes compañías, (mediante una inversión de capital acorde a sus funcionalidades) eso no quiere decir que Magento no pueda en algunos casos concretos, donde el resto de canales de ventas fuera del online represente un tanto por ciento reducido de nuestras ventas ser una opción a tener presente.

CASO 2  Magento ERP: Magento gestor de pedidos online y ERP gestionando el grueso de la lógica de negocio.

Este caso, sin lugar a dudas, es el caso mas común que nos encontraremos en las PYMES de cierto volumen y grandes empresas. Muchas de estas compañías nacieron antes de que las ventas por internet representará un nuevo canal a considerar y disponían ya de unas bases solidas en las que asentaban el canal de ventas tradicional. La solución para este tipo de compañías fue muy clara: Magento era un nuevo e interesante canal de ventas online que había que potenciar para aumentar la calidad de servicio ofrecida a sus clientes, no quedarse atrás y aumentar sus ventas finales. La conexión Magento ERP cobra gran importancia para seguir gestionando y centralizando toda la lógica de su negocio que ya estaba claramente definida en su ERP. No obstante, no pensemos que las  nuevas empresas no tienen que optar por esta metodología de trabajo, al no estar obligadas a disponer por defecto de una canal de ventas tradicional totalmente asentado. Nada mas lejos de la realidad. Como he comentado anteriormente, Magento puede ayudarnos en este aspecto si sus funcionalidades cubren todas nuestras expectativas para gestionar nuestro modelo de negocio. Pero Magento en si, no dispone de todas las funcionalidades y características de ERPs tan consolidados como Axapta, Navision y SAGE entre otros. Cuando la lógica de nuestro negocio se complica, lo sensato, es que cualquiera de estos ERPs  - o cualquiera de sus competidores- asuma estas fucnionalidades. Y nuevamente la conexión Magento ERP vuelve a cobrar importancia.

Magento API: Análisis de la problemática de envío de pedidos entre Magento y ERP.

Una vez hemos analizado distintos casos que podemos encontrarnos en el mercado actual, podemos observar, que si optamos por el caso de que Magento represente nuestro canal de ventas online y conviva con otros canales de ventas, nos enfrentamos inevitablemente a una problemática común independientemente del ERP escogido: La conexión Magento ERP. Debemos interconectar las distintas entidades de nuestro ecommerce Magento con nuestro ERP. La comunicación entre ambas plataformas es un punto fundamental para que nuestro negocio funcione. Esta entrada, no tiene como finalidad analizar todas las entidades que deben comunicarse para lograr una sincronización completa entre amabas plataformas, pues la complejidad sería tal que mas que una entrada del blog deberíamos de hablar de un alcance funcional y si a ello le sumamos el código a emplear para llevar a cabo esta conexión poco mas o menos estaríamos hablando de una cuantas jornadas de trabajo. Sin embargo, creo que con esta “introducción” nos podemos hacer una idea de la complejidad y lo delicado que puede ser hacer que las distintas plataformas que conforman una empresa (en especial Magento y ERP) trabajen y se coordinen entre si. Una vez que creo que se ha entendido la complejidad del problema, no quiero dejar de escapar la oportunidad de mostrar con un ejemplo como el API de Magento nos puede ser de utilidad a la hora de establecer esta comunicación. En esta entrada, nos centraremos en ver como el API de Magento puede sernos de utilidad a la hora de comunicar y sincronizar los pedidos de nuestra tienda online Magento con nuestro ERP. Procedamos a ver como realizaríamos parte de esta sincronización Magento ERP

Magento API: Simulación de envío de pedidos MAGENTO ERP.

Magento ERP: Estudio de las formas de pago en Magento

En este caso práctico, como en la mayoría de las tiendas online, vamos a suponer que nuestro ecommerce dispone de diversos método de pago que podremos clasificar en dos grandes grupos:

Métodos de pago al contado: En este grupo de formas de pago el pago del pedido se realiza mientras se materializa el mismo. Algunos ejemplos de estas formas de pago serían por ejemplo Paypal y la pasarela Bancaria. En ambas casos, el pago del pedido se realiza durante la tramitación del mismo. Una vez el cliente regresa a la tienda online, el estado del pedido por defecto en Magento es “Procesing”

Métodos de pago diferidos: El ejemplo mas claro de esta forma de pago es la transferencia bancaria. En este caso nuestro cliente tramita el pedido y una vez ha finalizado el mismo todavía debe realizar su pago. En este caso, el pedido entra en nuestra tienda online en estado “Pending”.

Gestión de envíos de pedido dependiendo de los estados del pedido:

Para nuestro ejemplo, vamos a suponer la siguiente forma de trabajar, vamos a adoptarla simplemente por que la considero mas completa y mas enriquecedora a la hora de mostrar en el código al posibilidad de filtrar pedidos. Adoptar una solución u otra a la hora de trabajar con el API de Magento es algo que depende de cada negocio y de como implemente la lógica, no hay una solución fija en lo que se refiere a sincronización Magento ERP. Deberemos adaptar la comunicación de la información Magento ERP según las necesidades del modelo de negocio. Algo que por supuesto, podemos personalizar en nuestro código. Para el ejemplo que proponemos, la metodología de trabajo para la sincronización de pedidos Magento ER será la siguiente:

- Suposición 1 conexión Magento ERP: Únicamente los pedidos que estén pagados – en estado procesing- deberán de sincronizarse con nuestro ERP.

- Suposición 2 conexión Magento ERP: La empresa cuenta con un administrador de la tienda online. este administrador gestiona el pago de aquellos pedidos que se adquirieron mediante los métodos de pago diferidos. Es decir, tiene acceso a la cuenta de la empresa y es el encargado de procesar los pedidos pagados por transferencia y moverlos del estado “Pending” a “Procesing”.

- Suposición 3 conexión Magento ERP: Una vez los pedidos sean gestionados por nuestro ERP, este será el encargado de completar los pedidos. La gestión de facturas y envíos correrá a cargo del ERP.

Con estas premisas de trabajo para la conexión Magento ERP podemos optar por dos metodologías de trabajo:

- Comunicación asíncrona Magento ERP: En este caso podríamos optar por llamar desde Magento a un servicio web del tipo “Enviar pedido” cada vez que un pedido se ubicará en el estado “Procesing”. En ese momento enviaríamos la información que fuera necesaria a nuestro ERP implementando parte de la sincronización Magento ERP.

- Comunicación síncrona Magento ERP: En este caso, desde el ERP podríamos hacer uso del API de Magento para recoger la información de nuestros pedidos. Dependiendo del volumen de pedidos de nuestro negocio y de las necesidades de disponer de información en tiempo mas o menos real podemos jugar con una ventana temporal mas o menos estrecha que definiría la periodicidad de la llamada a nuestro proceso de sincronización Magento ERP. La gran ventaja de optar por este método, es que gracias al API de Magento disponemos de gran cantidad de métodos que nos servirán para obtener la información que necesitamos.

Para este caso práctico, optaremos por la segunda opción para llevar a cabo la conexión Magento ERP.  Seguidamente , para completar la entrada sobre la comunicación Magento ERP, simularemos la llamada al API de Magento para obtener los pedidos en el estado “Procesing” desde el ERP. Una vez obtenida la información de los mismos, supondremos que el ERP o el sistema externos que obtiene los pedidos realiza los procesos pertinentes  y posteriormente actualiza el estado de los pedidos en Magento al estado “Completado”.

Magento API: Llamado al API de Magento para obtener pedidos y posterior actualización del estado de los mismos.

Para la comunicación Magento ERP, hemos decidido trabajar con el API de Magento. Lo primero que debemos tener presente a la hora de emplear el API de Magento es dar de alta un usuario del servicio web. Para ello, dentro del panel de administración de nuestra tienda online Magento,  nos dirigimos a Sistema > Web services > SOAP/XML-RPC- Users y creamos un nuevo usuario:

Magento ERP usurio API Magento

Para terminar de hacer funcional este usuario en la comunicación Magento ERP será necesario crear un nuevo rol. En nuestro caso, le daremos todos los permisos. Para ello nos dirigimos  a Sistema > Web services > SOAP/XML-RPC- Roles y una vez creado se lo asignamos a nuestro usuario desde le panel anterior:

Api de Magento conexión ERP Magento

El código empleado en este conector Magento ERP emplea el API V2 de Magento. Para llamar al API de Magento, obtener los pedidos en estado “Procesing” y posteriormente actualizar los pedidos al estado completado empleamos el siguiente código php:

<?php
        $host = "magentodemo.dev";
        $client = new SoapClient("http://".$host."/api/v2_soap/?wsdl");
        $apiuser= "admin"; //Usuario webservice
        $apikey = "apikey"; //Pass webservice
        try {
                $session= $client->login($apiuser, $apikey); //Hacemos login
                $filter = array('filter' => array(
                                                    array(
                                                            'key' => 'status',
                                                            //'value' => 'pending'
                                                            'value' => 'processing'

                                                    )
                                            )
                        );
                //Conexión Magento ERP API Magento: OBTENGO TODOS LOS PEDIDOS EN ESTADO DEFINIDO EN EL FILTRO
                //status = value
                $pedidos = $client->salesOrderList($session, $filter);
                //Conexión Magento ERP API Magento: Envío de Pedidos con el API de Magento: Mis pedidos
                //print_r($pedidos);
                //Conexión Magento ERP API de Magento: Creo un array para almacenar los ids de los pedidos filtrados
                $ids_a_completar[]=array();
                foreach ($pedidos as $pedido) {
                    //print_r("Dentro del pedido");
                    //print_r($pedido->increment_id);
                    //Conexión Magento ERP API Magento: Pedido es del tipo stdClass Object
                    $ids_a_completar[]=$pedido->increment_id;
                }
                //Conexión Magento ERP API Magento: Veo los ids de mis pedidos
                print_r($ids_a_completar);
                //Conexión Magento ERP API Magento: PASO LOS PEDIDOS FILTRADOS A COMPLETADOS
                //$result = $proxy->salesOrderAddComment($sessionId, '200000004', 'processing');
                array_shift($ids_a_completar);
                foreach ($ids_a_completar as $idpedido) {
                    // print_r($idpedido);
                    //$idpedido="'".$idpedido."'";
                    print_r($idpedido);
                    //$procesados = $client->salesOrderAddComment($session, $idpedido, 'processing', 'El pedido ha sifo porcesado correctamente por el sistema');
                    $procesados = $client->salesOrderAddComment($session, $idpedido, 'complete', 'El pedido ha sido procesado correctamente por el sistema');
                }
        }
        catch (Exception $e) { //Gestión de errores
            echo "==> Error: ".$e->getMessage();
            //Conexión Magento ERP API de Magento: Enviamos un email para poder analizar el error y poder tratarlo posteriormente.
            mail('joripelli@gmail.com', 'Error pedidos', $e);
               exit();
        }
?>

Comentemos un poco el código empleado en esta parte de la conexión Magento ERP para ver que hacemos en cada zona y poder así modificarlo posteriormente según nuestras necesidades.

Parte 1 conexión Magento ERP:

En esta parte del código nos logamos en el servicio web con el usuario y password que hemos configurado en nuestro panel de administración de Magento. En el ejemplo, definimos la variable $filter que empleamos para filtrar todos aquellos pedidos en el estado procesando.

<?php
        $host = "magentodemo.dev";
        $client = new SoapClient("http://".$host."/api/v2_soap/?wsdl");
        $apiuser= "admin"; //Usuario webservice
        $apikey = "apikey"; //Pass webservice
        try {
                $session= $client->login($apiuser, $apikey); //Hacemos login
                $filter = array('filter' => array(
                                                    array(
                                                            'key' => 'status',
                                                            //'value' => 'pending'
                                                            'value' => 'processing'

                                                    )
                                            )
                        )

Parte 2 conexión Magento ERP:

Aquí obtenemos todos los pedidos en estado procesando mediante la llamada al método salesOrderList. En elarray ids_a_completar almacenamos los ids de aquellos pedidos en estado procesando que debemos pasara completar. En este ejempplo, no realizamos ninguna acción sobre los pedidos en estado procesando y simplemente los pasamos al estado completado. En un caso real de conexión Magento ERP, este proceso sería mas complejo y mas amplio en cuanto a las acciones a realizar sobre el pedido pues deberíamos entre otras cosas procesar toda la información de estos pedidos para realizar las operaciones pertinentes.

$pedidos = $client->salesOrderList($session, $filter);</pre>
$ids_a_completar[]=array();
                foreach ($pedidos as $pedido) {
                    //print_r("Dentro del pedido");
                    //print_r($pedido->increment_id);
                    //Pedido es del tipo stdClass Object
                    $ids_a_completar[]=$pedido->increment_id;
                }

Parte 3 conexión Magento ERP:

Aquí actualizamos el estado de los pedidos procesados a completados. En este punto de la conexión magento ERP, como he comentado, ya habríamos realizado todas las operaciones necesarias sobre los mismos. para actualizar el estado del pedido en la conexión Magento ERP empleamos el método salesOrderAddComment. Como puede observarse, el estado del pedido final se define como parámetro de entrada en el método salesOrderAddComment

</pre>
foreach ($ids_a_completar as $idpedido) {
                    // print_r($idpedido);
                    //$idpedido="'".$idpedido."'";
                    print_r($idpedido);
                    //$procesados = $client->salesOrderAddComment($session, $idpedido, 'processing', 'El pedido ha sifo porcesado correctamente por el sistema');
                    $procesados = $client->salesOrderAddComment($session, $idpedido, 'complete', 'El pedido ha sido procesado correctamente por el sistema');
                }

Parte 4 conexión Magento ERP:

En esta parte vemos la gestión de errores en la conexión Magento ERP. En este caso de error, simplemente se envía por correo el error generado a la dirección de email especificada. Cabe destacar, que para tener una gestión optimizada de la gestión de errores lo mas recomendable es ampliar la información de los pedidos y dotarlos de campos de control del tipo “Enviado/recibido a ERP” que también podamos actualizar mediante el API.

</pre>
catch (Exception $e) { //Gestión de errores
            echo "==> Error: ".$e->getMessage();
            //Envío de Pedidos con el API de Magento: Enviamos un email para poder analizar el error y poder tratarlo posteriormente.
            mail('joripelli@gmail.com', 'Error pedidos', $e);
               exit();

 

Conclusiones conexión Magento ERP.

Como se ha visto durante la entrada la comunicación Magento ERP es una de las partes mas delicadas y mas importantes a la hora de la puesta en producción del canal de ventas online. No hay una fórmula cerrada  que defina la mejor forma de realizar esta sincronización. En cada empresa en particular, dadas sus características concretas, deberemos de emplear las herramientas que mejor se adapten a sus necesidades. esto pasa desde el uso de servicios web, intercambio de ficheros, escrituras directas en base de datos, uso del API de Magento, etc. En esta entrada. mi intención ha sido mostrar como podríamos emplear el API ed Magento para un caso particular y como Magento nos pone a nuestra disposión una serie de herramientas que podemos emplear para llevar a cabo la sincronización Magento ERP. espero que la entrada os sea de utilidad y os invito  a que visitéis la sección de integración Magento ERP de la web para obtener mas información.


Integración

 

Resumen
Nombre
Magento ERP: Pedidos y API de Magento
Autor
Descripción
Magento ERP: Conexión Magento ERP con API de Magento. Sincronización de pedidos Magento ERP con API de Magento. API Magento para envío de pedidos Magento ERP.
The following two tabs change content below.
Especialista en Magento y servicios ecommerce: Consultoría ecommerce, Optimización Magento, Desarrollo Magento, Integración Magento ERP y Posicionamiento SEO Magento.


3 Comments

  • Raúl

    08. dic, 2014

    Muy interesante el artículo. Conectar Magento con el ERP es todavía una asignatura pendiente en nuestra empresa

  • Carolina

    12. may, 2015

    Que pasa cuando creas una orden, agregas los productos… pero estos no deben ser pagados ya que seran enviados como muestras. Al final magento o tiene el cobro como pendiente o emite la factura si das en enviar.
    Como se puede hacer para que en los montos (osea el costo) salga cero.
    Lo quiero hacer de esta manera para tener en orden mi inventario. Pero a la vez me genera un problema.
    Algun consejo?

    • Jose Vicente Ribera

      12. may, 2015

      Hola Carolina,
      Hay varias formas de enfocar lo que comentas. Entiendo que lo que quieres es regalar alguna muestra gratuita por pedido o cuando los clientes compran un determinado producto. Magento por defecto no tiene esta opción. No obstante siempre se podría programar o mirar algún módulo que hiciera lo que necesites.
      Saludos

Deja un comentario
 

Tu email no será publicado. Campos obligatorios . *