예제 #1
0
        public async void EnvioDatosFactura(
            string Factura,
            string Tipo,
            int Empresa)

        {
            string res = string.Empty;

            try
            {
                //Obtener Encabezado y Detalle de la Factura
                objHeader       = db.Header(Factura, Tipo, Empresa);
                Detalle         = db.Detalle(Factura, Empresa);
                objCredenciales = DAL.Credenciales(Empresa);

                if (objHeader is null)
                {
                    iError = "El SP: sp_sel_FacturaElectronicaGTDatos no ha devuelto ningun valor.";
                    return;
                }

                // Covertir la Clase en XML
                XmlSerializer serializador = new XmlSerializer(typeof(GTDocumento));
                StringBuilder sb           = new StringBuilder();
                TextWriter    tw           = new StringWriter(sb);
                serializador.Serialize(tw, new CrearXmlFactura().FacturaXml(objHeader, Detalle));
                tw.Close();
                xml = sb.ToString();

                // Limpiar XML para que sea igual al formato de Hacienda
                xml = xml.Substring(198, xml.Length - 198);
                xml = xml.Replace("<", "<dte:");
                xml = xml.Replace("<dte:/", "</dte:");
                xml = xml.Replace("<dte:cfc", "<cfc");
                xml = xml.Replace("</dte:cfc", "</cfc");
                xml = xml.Replace("<dte:AbonosFacturaCambiaria", "<cfc:AbonosFacturaCambiaria");
                xml = xml.Replace("</dte:AbonosFacturaCambiaria>", "</cfc:AbonosFacturaCambiaria>");

                xml = $"{objHeader.EncabezadoFE}{xml}";

                HttpClient client = new HttpClient();
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));

                client.DefaultRequestHeaders.Add("UsuarioFirma", objCredenciales.usuarioFirma);
                client.DefaultRequestHeaders.Add("LlaveFirma", objCredenciales.tokenFirma);
                client.DefaultRequestHeaders.Add("UsuarioApi", objCredenciales.usuaarioApi);
                client.DefaultRequestHeaders.Add("LlaveApi", objCredenciales.llaveApi);
                client.DefaultRequestHeaders.Add("Identificador", objHeader.Consecutivo);

                StringContent oString = new StringContent(xml);

                HttpResponseMessage response = client.PostAsync(new Uri(objCredenciales.urlApi), oString).Result;
                res = await response.Content.ReadAsStringAsync();

                responseApi = JsonConvert.DeserializeObject <ResponseApi>(res);

                //Actualizar el resultado en Tabla
                db.Actualizar(
                    objHeader.Id,
                    xml,
                    responseApi.numero,
                    responseApi.resultado ? "aceptado" : "rechazado",
                    res,
                    responseApi.xml_certificado,
                    Empresa);

                iError = "Ok";
            }
            catch (Exception ex)
            {
                iError = ex.Message;
                //Actualizar el resultado en Tabla en caso de Error.
                db.Actualizar(
                    objHeader.Id,
                    xml,
                    string.Empty,
                    "sin-respuesta",
                    res.Length == 0 ? iError : res,
                    string.Empty,
                    Empresa);
            }
        }
예제 #2
0
        public async void EnvioDatosAnula(
            string Factura,
            string Tipo,
            string NumeroDocumento,
            string Motivo,
            DataTable _dt,
            int Empresa)
        {
            if (_dt.Rows.Count == 0)
            {
                iError = "El SP: sp_sel_FacturaElectronicaAnulacion no ha devuelto ningun valor.";
                return;
            }

            string res = string.Empty;

            try
            {
                // Covertir la Clase en XML
                XmlSerializer serializador = new XmlSerializer(typeof(GTAnulacionDocumento));
                StringBuilder sb           = new StringBuilder();
                TextWriter    tw           = new StringWriter(sb);
                serializador.Serialize(tw, new CrearXmlAnulacion().AnulacionXml(NumeroDocumento, Motivo, _dt));
                tw.Close();
                xml = sb.ToString();

                // Limpiar XML para que sea igual al formato de Hacienda
                xml = xml.Substring(206, xml.Length - 206);
                xml = xml.Replace("<", "<dte:");
                xml = xml.Replace("<dte:/", "</dte:");
                xml = $"{_dt.Rows[0]["EncabezadoFE"].ToString()}{xml}";

                HttpClient client = new HttpClient();
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));

                objCredenciales = DAL.Credenciales(Empresa);

                client.DefaultRequestHeaders.Add("UsuarioFirma", objCredenciales.usuarioFirma);
                client.DefaultRequestHeaders.Add("LlaveFirma", objCredenciales.tokenFirma);
                client.DefaultRequestHeaders.Add("UsuarioApi", objCredenciales.usuaarioApi);
                client.DefaultRequestHeaders.Add("LlaveApi", objCredenciales.llaveApi);
                client.DefaultRequestHeaders.Add("Identificador", _dt.Rows[0]["Consecutivo"].ToString());

                StringContent oString = new StringContent(xml);

                HttpResponseMessage response = client.PostAsync(new Uri(objCredenciales.urlApi), oString).Result;
                res = await response.Content.ReadAsStringAsync();

                responseApi = JsonConvert.DeserializeObject <ResponseApi>(res);

                //Actualizar el resultado en Tabla
                db.Actualizar(
                    (int)_dt.Rows[0]["Id"],
                    xml,
                    responseApi.numero,
                    responseApi.resultado ? "aceptado" : "rechazado",
                    res,
                    responseApi.xml_certificado,
                    Empresa);

                iError = "Ok";
            }
            catch (Exception ex)
            {
                iError = ex.Message;
                //Actualizar el resultado en Tabla en caso de Error.
                db.Actualizar(
                    (int)_dt.Rows[0]["Id"],
                    xml,
                    string.Empty,
                    "sin-respuesta",
                    res.Length == 0 ? iError : res,
                    string.Empty,
                    Empresa);
            }
        }