Ejemplo de cómo llamar desde el ERP a una webapi y obtener los resultados


Código VB6:

' Ejemplo de llamada POST a web service externa
' Gentileza de Miguel Angel (OLINET)
Sub MainPost()

DataToSend = "IPAddress=xx.xx.xx.xx"
Dim request,xmlhttp ,url,xmldoc
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")

url = "http://sagec-test.mrw.es/MRWEnvio.asmx"
request = "<?xml version = '1.0' encoding = 'utf-8'?>" & _
"<soap:Envelope xmlns:soap = 'http://www.midom.org/2003/05/soap-envelope' xmlns:mrw = 'http://www.dom.es/'>" &_
"<soap:Header>" &_
"<AuthInfo xmlns='http://www.dom.es/'>" &_
"<CodigoFranquicia>02708</CodigoFranquicia>" &_
"<CodigoAbonado>041000</CodigoAbonado>" &_
"<CodigoDepartamento>DIARIO As</CodigoDepartamento>" &_
"<UserName>myusername</UserName>" &_
"<Password>*****</Password> " &_
"</AuthInfo>" &_
"</soap:Header>" &_
"<soap:Body>" &_
"<TransmEnvio xmlns = 'http://www.dom.es/'>" &_
"<request>" &_
"<DatosEntrega>" &_
"<Direccion>" &_
"<CodigoTipoVia>CL</CodigoTipoVia>" &_
"<Via>PRUEBAS</Via>" &_
"<Numero>13</Numero>" &_
"<CodigoPostal>05200</CodigoPostal>" &_
"<Poblacion>AREVALO</Poblacion>" &_
"<Provincia></Provincia>" &_
"</Direccion>" &_
"<Nombre>DESTINATARIO DEL ENVÍO</Nombre>" &_
"<Telefono>612345678</Telefono>" &_
"</DatosEntrega>" &_
"<DatosServicio>" &_
"<Fecha>28/06/2017</Fecha>" &_
"<Referencia>INTEGRACIÓN</Referencia>" &_
"<CodigoServicio>0800</CodigoServicio>" &_
"<DescripcionServicio>PROBANDO SAGEC</DescripcionServicio>" &_
"<NumeroBultos>1</NumeroBultos>" &_
"<Peso>2</Peso>" &_
"<Reembolso>O</Reembolso>" &_
"<ImporteReembolso>13,13</ImporteReembolso>" &_
"</DatosServicio>" &_
"</request>" &_
"</TransmEnvio>" &_
"</soap:Body>" &_
"</soap:Envelope>"

Set oXMLHttp = CreateObject("MSXML2.ServerXMLHTTP")
oXMLHttp.open "POST", url, False
oXMLHttp.SetRequestHeader "Content-Type", "text/xml; charset = utf-8"
oXMLHttp.send request

MsgBox oXMLHttp.Responsetext
End Sub



' Ejemplo de llamada GET a web service externa
' Gentileza de Miguel Angel (OLINET)

Sub MainGet()

   DataToSend = "IPAddress=xx.xx.xx.xx"
   Dim xmlhttp
   Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")

xmlhttp.open "GET", "http://www.webservicex.net/geoipservice.asmx/GetGeoIP?IPAddress=xx.xx.xx.xx"
xmlhttp.setRequestHeader "Content-Type", "application/soap+xml; charset = utf-8"


xmlhttp.send ()


   Set xmldoc = xmlhttp.responsexml.DocumentElement
   Set nodosxml = xmldoc.childnodes
   i = 0

   For Each Elemento In nodosxml
     If elemento.nodename = "IP" Then 
         MsgBox elemento.text
     End If
    MsgBox elemento.text

  Next
  MsgBox xmlhttp.Responsexml.text
  Set xmlhttp = Nothing

End Sub


Código C#:

Script, Método 1:

using AhoraCore;
using System;
using System.Net.Http;
using static AhoraCore.VBA.Interaction;

namespace AhoraScriptsVacia
{
    public class Script_17 : AhoraOCX.AhoraBaseScript
    {
        public void Main()
        {
            try
            {

                string url = "http://sagec-test.mrw.es/MRWEnvio.asmx";

                string datosAEnviar = "<?xml version = '1.0' encoding = 'utf-8'?>" +
                    "<soap:Envelope xmlns:soap = 'http://www.midom.org/2003/05/soap-envelope' xmlns:mrw = 'http://www.dom.es/'>" +
                    "<soap:Header>" +
                    "<AuthInfo xmlns='http://www.dom.es/'>" +
                    "<CodigoFranquicia>02708</CodigoFranquicia>" +
                    "<CodigoAbonado>041000</CodigoAbonado>" +
                    "<CodigoDepartamento>DIARIO As</CodigoDepartamento>" +
                    "<UserName>myusername</UserName>" +
                    "<Password>*****</Password> " +
                    "</AuthInfo>" +
                    "</soap:Header>" +
                    "<soap:Body>" +
                    "<TransmEnvio xmlns = 'http://www.dom.es/'>" +
                    "<request>" +
                    "<DatosEntrega>" +
                    "<Direccion>" +
                    "<CodigoTipoVia>CL</CodigoTipoVia>" +
                    "<Via>PRUEBAS</Via>" +
                    "<Numero>13</Numero>" +
                    "<CodigoPostal>05200</CodigoPostal>" +
                    "<Poblacion>AREVALO</Poblacion>" +
                    "<Provincia></Provincia>" +
                    "</Direccion>" +
                    "<Nombre>DESTINATARIO DEL ENVÍO</Nombre>" +
                    "<Telefono>612345678</Telefono>" +
                    "</DatosEntrega>" +
                    "<DatosServicio>" +
                    "<Fecha>28/06/2017</Fecha>" +
                    "<Referencia>INTEGRACIÓN</Referencia>" +
                    "<CodigoServicio>0800</CodigoServicio>" +
                    "<DescripcionServicio>PROBANDO SAGEC</DescripcionServicio>" +
                    "<NumeroBultos>1</NumeroBultos>" +
                    "<Peso>2</Peso>" +
                    "<Reembolso>O</Reembolso>" +
                    "<ImporteReembolso>13,13</ImporteReembolso>" +
                    "</DatosServicio>" +
                    "</request>" +
                    "</TransmEnvio>" +
                    "</soap:Body>" +
                    "</soap:Envelope>";


                // POST
                using (var httpClient = new HttpClient())
                {
                    var postData = new StringContent(datosAEnviar);
                    // Realizar la solicitud POST de forma síncrona
                    var response = httpClient.Send(new HttpRequestMessage(HttpMethod.Post, url)
                    {
                        Content = postData
                    });

                    // Procesar la respuesta
                    var responseBody = response.Content.ReadAsStringAsync().Result;
                    MsgBox("Respuesta POST: " + responseBody);
                }

                // GET
                using (var httpClient = new HttpClient())
                {
                    // Realizar la solicitud GET de forma síncrona
                    var response = httpClient.Send(new HttpRequestMessage(HttpMethod.Get, url));

                    // Procesar la respuesta
                    var responseBody = response.Content.ReadAsStringAsync().Result;
                    MsgBox("Respuesta GET: " + responseBody);
                }

            }
            catch (Exception ex)
            {
                MsgBox(ex.Message, VbMsgBoxStyle.vbCritical, "ERROR");
            }

        }
    }
}

Script, Método 2:

using System.IO;
using System.Net;
using System.Text;
using static AhoraCore.VBA.Interaction;

namespace AhoraScriptsVacia
{
    public class Script_17 : AhoraOCX.AhoraBaseScript
    {
        public void Main()
        {

            string endpointUrl = "http://sagec-test.mrw.es/MRWEnvio.asmx";

            string requestXml = "<?xml version = '1.0' encoding = 'utf-8'?>" +
                "<soap:Envelope xmlns:soap = 'http://www.midom.org/2003/05/soap-envelope' xmlns:mrw = 'http://www.dom.es/'>" +
                "<soap:Header>" +
                "<AuthInfo xmlns='http://www.dom.es/'>" +
                "<CodigoFranquicia>02708</CodigoFranquicia>" +
                "<CodigoAbonado>041000</CodigoAbonado>" +
                "<CodigoDepartamento>DIARIO As</CodigoDepartamento>" +
                "<UserName>myusername</UserName>" +
                "<Password>*****</Password> " +
                "</AuthInfo>" +
                "</soap:Header>" +
                "<soap:Body>" +
                "<TransmEnvio xmlns = 'http://www.dom.es/'>" +
                "<request>" +
                "<DatosEntrega>" +
                "<Direccion>" +
                "<CodigoTipoVia>CL</CodigoTipoVia>" +
                "<Via>PRUEBAS</Via>" +
                "<Numero>13</Numero>" +
                "<CodigoPostal>05200</CodigoPostal>" +
                "<Poblacion>AREVALO</Poblacion>" +
                "<Provincia></Provincia>" +
                "</Direccion>" +
                "<Nombre>DESTINATARIO DEL ENVÍO</Nombre>" +
                "<Telefono>612345678</Telefono>" +
                "</DatosEntrega>" +
                "<DatosServicio>" +
                "<Fecha>28/06/2017</Fecha>" +
                "<Referencia>INTEGRACIÓN</Referencia>" +
                "<CodigoServicio>0800</CodigoServicio>" +
                "<DescripcionServicio>PROBANDO SAGEC</DescripcionServicio>" +
                "<NumeroBultos>1</NumeroBultos>" +
                "<Peso>2</Peso>" +
                "<Reembolso>O</Reembolso>" +
                "<ImporteReembolso>13,13</ImporteReembolso>" +
                "</DatosServicio>" +
                "</request>" +
                "</TransmEnvio>" +
                "</soap:Body>" +
                "</soap:Envelope>";

            // Crear la solicitud HTTP POST
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpointUrl);
            request.Method = "POST";
            request.ContentType = "text/xml;charset=utf-8";

            // Convertir la solicitud en bytes
            byte[] requestData = Encoding.UTF8.GetBytes(requestXml);

            // Configurar los datos de la solicitud
            request.ContentLength = requestData.Length;
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(requestData, 0, requestData.Length);
            requestStream.Close();

            try
            {
                // Obtener la respuesta del servicio
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string responseXml = reader.ReadToEnd();

                // Procesar la respuesta
                MsgBox("Respuesta del servicio: " + responseXml);
            }
            catch (WebException ex)
            {
                // Manejar cualquier error de solicitud
                MsgBox("Error de solicitud: " + ex.Message);
            }

        }
    }
}