none
Consumo de Servicios Web Sri Ecuador para Facturación Electrónica RRS feed

  • Question

  • Esta es una respuesta, a los problemas que se tiene cuando se consume, el servicio de Autorización de comprobantes, por parte del SRI, en Ecuador, al principio tratamos de consumir el servicio de manera directa, agregándole como referencia de web service, pero no nos funciono, al final tomamos de varias fuentes las posibles soluciones y adaptamos una que no puedo decir que se la final, pero que nos ha ayudado, mucho les dejo el código a continuación, espero les pueda servir.

    public class DatosTributarios
       {
           /// <summary>
           /// Gets or sets the clave acceso.
           /// </summary>
           public string claveAcceso { getset; }
     
           /// <summary>
           /// Gets or sets the numero autorizacion.
           /// </summary>
           public string numeroAutorizacion { getset; }
     
           /// <summary>
           /// Gets or sets the fecha autorizacion.
           /// </summary>
           public DateTime FechaAutorizacion { getset; }
     
           /// <summary>
           /// Gets or sets the estado.
           /// </summary>
           public string Estado { getset; }
       }
     
       /// <summary>
       /// The autorizacion facturas class.
       /// </summary>
       public class AutorizacionFacturas
       {
           /// <summary>
           /// The consultar autorizaciones.
           /// </summary>
           /// <param name="claveAcceso">The claveAcceso.</param>
           /// <returns>The <see cref="DatosTributarios"/>.</returns>
           public DatosTributarios ConsultarAutorizaciones(string claveAcceso)
           {
               return LlamarSri(claveAcceso);
           }
     
           /// <summary>
           /// The llamar sri.
           /// </summary>
           /// <param name="claveAcceso">The claveAcceso.</param>
           /// <returns>The <see cref="DatosTributarios"/>.</returns>
           private DatosTributarios LlamarSri(string claveAcceso)
           {
               var resultado = string.Empty;
               DatosTributarios datosTributarios = null;
               string url = "https://cel.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantes?wsdl";
     
               string xml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ec=\"http://ec.gob.sri.ws.autorizacion\">";
               xml = xml + "<soapenv:Header/>";
               xml = xml + "<soapenv:Body>";
               xml = xml + "<ec:autorizacionComprobante>";
               xml = xml + "<claveAccesoComprobante>" + claveAcceso + "</claveAccesoComprobante>";
               xml = xml + "</ec:autorizacionComprobante>";
               xml = xml + "</soapenv:Body>";
               xml = xml + "</soapenv:Envelope>";
     
               byte[] bytes = Encoding.ASCII.GetBytes(xml);
               HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
     
               request.Method = "POST";
               request.ContentLength = bytes.Length;
               request.ContentType = "text/xml";
     
               Stream requestStream = request.GetRequestStream();
               requestStream.Write(bytes, 0, bytes.Length);
               requestStream.Close();
     
               HttpWebResponse response = (HttpWebResponse)request.GetResponse();
               if (response.StatusCode == HttpStatusCode.OK)
               {
                   Stream responseStream = response.GetResponseStream();
                   StreamReader reader = new StreamReader(responseStream);
                   resultado = reader.ReadToEnd();
               }
               resultado = WebUtility.HtmlDecode(resultado);
               response.Close();
               var caracterPrincipal = resultado.IndexOf('?'- 1;
               var caracterSecundario = resultado.LastIndexOf('?'+ 2;
               resultado = resultado.Remove(caracterPrincipal, (caracterSecundario - caracterPrincipal));
               resultado = "<?xml version=" + "\"1.0\"" + " encoding=" + "\"UTF-8\"" + "?>" + resultado;
               System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
               doc.LoadXml(resultado);
               System.Xml.XmlNode element = doc.SelectSingleNode("numeroAutorizacion");
               datosTributarios = new DatosTributarios
               {
                   claveAcceso = doc.GetElementsByTagName("claveAcceso")[0].InnerText,
                   numeroAutorizacion = doc.GetElementsByTagName("numeroAutorizacion")[0].InnerText,
                   FechaAutorizacion = Convert.ToDateTime(doc.GetElementsByTagName("fechaAutorizacion")[0].InnerText),
                   Estado = doc.GetElementsByTagName("estado")[0].InnerText,
               };
               return datosTributarios;
           }
       }

    publicclassDatosTributarios    {        /// <summary>/// Gets or sets the clave acceso./// </summary>publicstring claveAcceso { getset; }        /// <summary>/// Gets or sets the numero autorizacion./// </summary>publicstring numeroAutorizacion { getset; }        /// <summary>/// Gets or sets the fecha autorizacion./// </summary>publicDateTime FechaAutorizacion { getset; }        /// <summary>/// Gets or sets the estado./// </summary>publicstring Estado { getset; }    }    /// <summary>/// The autorizacion facturas class./// </summary>publicclassAutorizacionFacturas    {        /// <summary>/// The consultar autorizaciones./// </summary>/// <param name="claveAcceso">The claveAcceso.</param>/// <returns>The <see cref="DatosTributarios"/>.</returns>publicDatosTributarios ConsultarAutorizaciones(string claveAcceso)        {            return LlamarSri(claveAcceso);        }        /// <summary>/// The llamar sri./// </summary>/// <param name="claveAcceso">The claveAcceso.</param>/// <returns>The <see cref="DatosTributarios"/>.</returns>privateDatosTributarios LlamarSri(string claveAcceso)        {            var resultado =string.Empty;            DatosTributarios datosTributarios =null;            string url ="https://cel.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantes?wsdl";            string xml ="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ec=\"http://ec.gob.sri.ws.autorizacion\">";            xml = xml +"<soapenv:Header/>";            xml = xml +"<soapenv:Body>";            xml = xml +"<ec:autorizacionComprobante>";            xml = xml +"<claveAccesoComprobante>"+ claveAcceso +"</claveAccesoComprobante>";            xml = xml +"</ec:autorizacionComprobante>";            xml = xml +"</soapenv:Body>";            xml = xml +"</soapenv:Envelope>";            byte[] bytes =Encoding.ASCII.GetBytes(xml);            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);            request.Method ="POST";            request.ContentLength = bytes.Length;            request.ContentType ="text/xml";            Stream requestStream = request.GetRequestStream();            requestStream.Write(bytes, 0, bytes.Length);            requestStream.Close();            HttpWebResponse response = (HttpWebResponse)request.GetResponse();            if (response.StatusCode ==HttpStatusCode.OK)            {                Stream responseStream = response.GetResponseStream();                StreamReader reader =newStreamReader(responseStream);                resultado = reader.ReadToEnd();            }            resultado =WebUtility.HtmlDecode(resultado);            response.Close();            var caracterPrincipal = resultado.IndexOf('?'-1;            var caracterSecundario = resultado.LastIndexOf('?'+2;            resultado = resultado.Remove(caracterPrincipal, (caracterSecundario - caracterPrincipal));            resultado ="<?xml version="+"\"1.0\""+" encoding="+"\"UTF-8\""+"?>"+ resultado;            System.Xml.XmlDocument doc =new System.Xml.XmlDocument();            doc.LoadXml(resultado);            System.Xml.XmlNode element = doc.SelectSingleNode("numeroAutorizacion");            datosTributarios =newDatosTributarios            {                claveAcceso = doc.GetElementsByTagName("claveAcceso")[0].InnerText,                numeroAutorizacion = doc.GetElementsByTagName("numeroAutorizacion")[0].InnerText,                FechaAutorizacion =Convert.ToDateTime(doc.GetElementsByTagName("fechaAutorizacion")[0].InnerText),                Estado = doc.GetElementsByTagName("estado")[0].InnerText,            };            return datosTributarios;        }    }

                                                                                                                                                                                                                                              
    Tuesday, June 13, 2017 5:40 PM

Answers

  • hola

    pero veo que la url proporciona un wsdl, deberias poder crear el proxy mediante una web reference

    basucamente lo que realizas con codigo es armar el mensaje SOAP que es lo mismo que el web reference genera por ti

    o sino probaste usar el wsdl.exe o el svcutil.exe,  el segundo es un Service Reference, que se aplica a servicio de wcf

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Tuesday, June 13, 2017 6:06 PM

All replies

  • hola

    pero veo que la url proporciona un wsdl, deberias poder crear el proxy mediante una web reference

    basucamente lo que realizas con codigo es armar el mensaje SOAP que es lo mismo que el web reference genera por ti

    o sino probaste usar el wsdl.exe o el svcutil.exe,  el segundo es un Service Reference, que se aplica a servicio de wcf

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Tuesday, June 13, 2017 6:06 PM
  • Estimado Leandro,

    Uso el wsdl.exe y también lo he agregado como referencia web y de ninguna de las 2 maneras funciona, tengo VS2017

    Me podrías ayudar tal vez, como dice LEYA, "Ayudame Leandro, eres mi única esperanza" :) .

    Saludos
    Saturday, March 31, 2018 2:54 AM
  • Disculpa me podrias orientar me encuentro realizando una aplicacion en c# sobre el envio y recepcion de facturacion electronica en ecuador pero tengo un problema ya tengo firmado el xml pero no se como consumir el web service del SRI, GRACIAS podrias ayudarme con un ejemplo para el envio y la autorizacion :D

    Tuesday, July 3, 2018 9:58 PM
  • Hola me podrias ayudar con el codigo del firmado, mi correo es deybert@hotmail.com.

    Saludos.

    Thursday, July 12, 2018 12:42 AM
  • Saludos, muchas gracias por tu ayuda. funciona muy bien Tendras por favor el codigo para el envio del comprobante.
    Monday, September 3, 2018 2:56 AM
  • Men ese código está buen me funcionó  claro lo migré a VB.net de donde tenemos nuestro ERP, estamos trabajando en algo parecido te paso mi correo de pronto puedas trabajar con nosotros como freelance. este es mi correo   AnimesfanswebARROBAhotmail.com

    Monday, September 24, 2018 9:01 PM
  • Me puedes ayudar con el código para la firma lo necesito de urgencia por favor... sierra_xavier@hotmail.com
    Tuesday, October 30, 2018 1:24 PM
  • A los interesados, pongo a disposición un componente DLL para Facturación Electrónica Ecuador de acuerdo a la normativa del SRI esquema ON - LINE, OFF LINE, desarrollado 100% en Visual Net C# y/o Visual FoxPro 9.0 
    Funcionalidad:
    -. Generación automática del archivo XML, según las Normas establecidas por el SRI (Facturas, Retenciones, Notas de Crédito, Notas de Débitos, Guía de Remisión); con solo asignar valores genera los archivos XML automáticamente.
    -. Firmado en formato XADES-BES en C# Net puro y/o VFP nativo usando Openssl.exe (Firma y genera el XML firmado).
    -. Consumo del Web Service del SRI, envío y Recepción del comprobante.
    -. Consulta de respuesta de autorización del comprobante
    -. Generación del Comprobante en PDF o RIDE.
    -. Envio por correo(XML, PDF).
    -. Visor de XML.
    -. Gestión de Errores.

    Email: edwinjuarez24x@gmail.com

    Blog: http://edwinjuarezdeveloper.blogspot.com/2018/10/facturacion-electronica-ecuador.html


    Buenos días, tal vez esta DLL que menciona permite visualizar los documentos que me emiten o solamente me sirve para enviar y consultar los documentos que yo emito??
    Monday, November 19, 2018 3:43 PM
  • Amigo, conseguiste el código para firmar, por favor su ayuda compartiendo, lo necesito de urgencia

    jlindao@hotmail.com

    Sunday, January 20, 2019 4:03 AM
  • Hola talvez me puedes ayudar con el codigo para enviar el xml al web service del SRI?
    Wednesday, May 1, 2019 3:54 PM
  • pudistes conseguir el codigo para el firmado del XML del SRI ?
    Saturday, August 10, 2019 8:16 PM
  • https://github.com/aldobm

    aqui el alibio a tus penas

    Thursday, September 5, 2019 5:22 PM
  • https://github.com/aldobm

    Aqui el alibio a tus penas

    Thursday, September 5, 2019 5:23 PM
  • Thursday, September 5, 2019 5:23 PM
  • Disculpa me podrias orientar en la firma de documentos del xml para la facturacion electronica

    mi correo es :crissrobert@live.com

    Gracias

    Friday, September 20, 2019 7:03 PM
  • Que tal como estas disculpa sabes el servicio web para la descarga masiva de documentos electrónicos o como hacer lo por favor

    Tuesday, October 8, 2019 8:38 PM
  • fue de gran utilidad y pude lograr firmar el XML, por favor tiene en envio del XML firmado al SRI. Muchas gracias.
    Wednesday, October 30, 2019 8:43 PM
  • fue de gran utilidad y pude lograr firmar el XML, por favor tiene en envio del XML firmado al SRI. Muchas gracias.

    Me podrias ayudar como lo hiciste con el codigo publicado???


    Thursday, January 16, 2020 10:06 PM