Script - Llamada a webservice externa. Métodos POST y GET

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:25 PM por David Miralpeix

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);
            }

        }
    }
}

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo