29 octubre, 2012 0

A continuación os presentamos un post técnico dirigido a la comunidad de desarrolladores de Joomla y creado por uno de nuestros especialistas. Inauguramos así una serie de artículos de contenido especializado que iremos incluyendo en el blog, redactados con el objetivo de ayudar a la comunidad de Joomla! Esperamos que sean de vuestro interés:
A la hora de crear nuestra tienda online con VirtueMart, no podemos olvidarnos de un punto muy importarte en la cadena de ventas: el envío, transporte y entrega de nuestros productos. Este aspecto es esencial para que la compra se pueda llevar a cabo y, sobre todo,  será una cuestión decisoria para la satisfacción de nuestros compradores. Que el producto sea entregado en las mejores condiciones y en el tiempo estipulado, es básico para ganarnos la confianza de nuestros clientes. Una mala entrega puede hacer que perdamos un cliente, que no volverá a comprar en nuestra web.
Para que podamos conseguir la integración con SEUR, la empresa de transporte utiliza un servidor de funciones con interfaz WSDL (Web Services Description Language), al cual nosotros accederemos mediante un cliente SOAP (Simple Object Access Protocol). Debido a que esta tecnología esta predefinida en la API de PHP, su integración en el componente VirtueMart, o cualquier otro, no será muy complicado.
A continuación os diremos que tenéis que hacer para conseguir la integración:
CREAR CUENTA CON SEUR Y CONOCER FUNCIONES DEL SERVIDOR WSDL: Antes de empezar a integrar la funcionalidad en nuestra página, necesitaremos crear una cuenta con Seur. Para ello nos tendremos que poner en contacto con el proveedor de servicios. Además de esto también necesitaremos conocer qué funciones del servidor WSDL utilizaremos desde nuestro sitio, así como su descripción. Una vez tengamos todos los datos de la cuenta y la información de las funciones que necesitamos usar del servidor de Seur, podremos comenzar el proceso.
DATOS DEL CLIENTE Y DEL ENVÍO: En primer lugar debemos recopilar los datos del cliente al que le vamos a realizar el envío, además de los datos del paquete. Los datos necesarios dependerán de la descripción de la función del servidor WSDL que vayamos a utilizar. Este paso no se describirá en este tutorial porque depende mucho del modo en el que hayamos desarrollado nuestra página.
CONEXIÓN CON EL SERVIDOR: Después de haber recopilado toda la información necesaria, vamos a comenzar con la implementación de la conexión con el servidor. Por exponer de forma fácil la implementación, nos basaremos en una de las funciones más complejas. En concreto  en la función ImpresionIntegracionConECBWS, cuya descripción otorgada por Seur es:
http://schemas.xmlsoap.org/soap/envelope/» xmlns:imp=»http://localhost:7026/ImprimirECBWebService»>
 
 
 
[Identificador usuario]
[Clave acceso al servicio]
[Marca impresora]
[Modelo impresora]
[…]
 
 
 
 
[Codigo identificador de cliente]
[CIF]
[Cuenta a la que se le asocia el envio]
[Codigo del servicio]
[Codigo de producto de seur]
[Numero de bultos]
[Total de kilos de los bultos]
[…]
[…]
[…] 
[…] 
[…] 
[…] 
[…] 
[…] 
[…] 
[…] 
[…] 
[…] 
[…] 
 
 
 
]]>
[nombre de archivo de la expedicion]
[CIF]
[Franquicia origen]
-1
[Comentario]
 
 
 
 
 
SOAP QUE APUNTE AL SERVIDOR WSDL: para realizar la implementación en PHP de la función comenzaremos por crear un objeto de tipo SOAP que apunta a la dirección donde se encuentra el servidor WSDL que nos ha proporcionado Seur, para ello utilizaremos el constructor de la clase de la siguiente forma:
 
$cliente = new SoapClient(«http://cit.seur.com/CIT-war/services/ImprimirECBWebService?wsdl»);
 
Donde el argumento de la función es la dirección que se ha mencionado en el párrafo anterior.
 
CREAR ARRAY: El siguiente paso será crear un array que contenga los parámetros que necesita la función. Estos datos están identificados en la descripción con las etiquetas , donde X es el numero del parámetro. Esto se realizara de la siguiente manera:
 
$argumentos = array(
«in0» => «[Identificador usuario]»,
«in1» => «[Clave acceso servicio]»,
«in2» => «[Marca impresora]»,
«in3» => «[Modelo impresora]»,
«in4» => «[…]»,
«in5» => $datos,
«in6» => «[nombre del archivo de la expedición]»,
«in7» => «[CIF]»,
«in8» => [Franquicia origen],
«in9» => -1,
«in10» => «[Comentario]»
);
 
La variable $datos, la cual corresponde a los datos de la expedición es una variable especial con formato XML como indica su cabecera ( ). La creación de esta variable dependerá del formato que necesitemos en cada ocasión. Basado en el mismo ejemplo anterior expondremos la metodología de creación de la variable.
·  Primero crearemos un objeto del tipo DomDocument con el cual crearemos toda la estructura del XML.
 
$xml = new DomDocument(‘1.0′,’ISO-8859-1’);
 
·  Como se puede observar el XML tiene una estructura de etiquetas que podríamos clasificar como padres e hijos. Siendo la etiqueta hijo la contenida entre la apertura y cierre de la etiqueta padre (en el ejemplo exp es hijo de root de la misma forma que bulto lo es de exp). La forma de agregar un hijo a una etiqueta es la siguiente:
 
$bulto = $exp->appendChild($xml->createElement(‘bulto’,»));
 
Y el primer padre se agregara como se indica a continuación:
 
$root = $xml->appendChild($xml->createElement(‘root’,»));
 
·  Para agregar al documento las ultimas etiquetas hijas, las cuales solo contienen texto plano. Utilizaremos el mismo formato puesto en los dos ejemplos anteriores pero esta vez como segundo argumento, en lugar de una cadena vacía, se utilizará una cadena con el contenido.
 
$bulto->appendChild($xml->createElement(‘ci’,'[Codigo identificador de cliente]’));
 
·  Una vez creada toda la estructura XML hay que convertir esta variable en una cadena que la función pueda entender.
 
$datos = $xml->saveXML();
 
Para enviar toda esta la información al servidor de Seur procederemos a ejecutar el código expuesto a continuación:
 
$result = $client->impresionIntegracionConECBWS($argumentos);
 
donde “impresionIntegracionConECBWS” ha de ser el nombre de la función del servidor a la cual queremos llamar. Como podemos observar esto nos devuelve una variable de estructura XML con el resultado de ejecutar la función.
 
Para terminar sacaremos los datos recibidos en $result y los usaremos. Esto habrá que realizarlo según la descripción de la respuesta. Proporcionada esta última también por Seur. Con respecto al ejemplo del tutorial la descripción de la respuesta es:
 
http://schemas.xmlsoap.org/soap/envelope/» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»>
 
http://localhost:7026/ImprimirECBWebService»>
 
http://model.val.cit.seur.com»>



 
http://model.val.cit.seur.com»>OK
http://model.val.cit.seur.com»>

 
 
 
 
 
 
El objeto XML contenido en la variable $result será igual al contenido de la etiqueta ( ) y para leer cada uno de los hijos solo tendremos que utilizar el operador “->”. Por ejemplo para leer la etiqueta utilizaremos el codigo:
 
$out = $result->out;
 
 De esta forma integraremos automáticamente en nuestra página la comunicación con SEUR. En el siguiente post hablaremos de cómo crear un código para que se genere la etiqueta que irá impresa en la caja de nuestros productos. 
¡Esperamos que os haya servido de ayuda!

Leave a comment