Example #1
0
        private static void ConsultarTicket(string nroTicket)
        {
            var consultarTicketRequest = new ConsultaTicketRequest
            {
                Ruc         = _ruc,
                NroTicket   = nroTicket,
                UsuarioSol  = "MODDATOS",
                ClaveSol    = "MODDATOS",
                EndPointUrl = UrlSunat
            };

            var response = RestHelper <ConsultaTicketRequest, EnviarDocumentoResponse> .Execute("ConsultarTicket", consultarTicketRequest);

            if (!response.Exito)
            {
                Console.WriteLine(response.MensajeError);
                return;
            }

            var archivo = response.NombreArchivo.Replace(".xml", string.Empty);

            Console.WriteLine($"Escribiendo documento en la carpeta del ejecutable... {archivo}");

            File.WriteAllBytes($"{archivo}.zip", Convert.FromBase64String(response.TramaZipCdr));

            Console.WriteLine($"Código: {response.CodigoRespuesta} => {response.MensajeRespuesta}");
        }
Example #2
0
        public async Task <EnviarDocumentoResponse> Post([FromBody] ConsultaTicketRequest request)
        {
            var response = new EnviarDocumentoResponse();

            try
            {
                _servicioSunatDocumentos.Inicializar(new ParametrosConexion
                {
                    Ruc         = request.Ruc,
                    UserName    = request.UsuarioSol,
                    Password    = request.ClaveSol,
                    EndPointUrl = request.EndPointUrl
                });

                var resultado = _servicioSunatDocumentos.ConsultarTicket(request.NroTicket);

                if (!resultado.Exito)
                {
                    response.Exito        = false;
                    response.MensajeError = resultado.MensajeError;
                }
                else
                {
                    response = await _serializador.GenerarDocumentoRespuesta(resultado.ConstanciaDeRecepcion);
                }
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Source == "DotNetZip" ? "El Ticket no existe" : ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
Example #3
0
        private async void BtnGetStatus_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;

                using (var frm = new FrmTicket())
                {
                    if (frm.ShowDialog() != DialogResult.OK)
                    {
                        return;
                    }
                    if (string.IsNullOrEmpty(frm.txtNroTicket.Text))
                    {
                        return;
                    }

                    var consultaTicketRequest = new ConsultaTicketRequest
                    {
                        Ruc         = txtNroRuc.Text,
                        UsuarioSol  = txtUsuarioSol.Text,
                        ClaveSol    = txtClaveSol.Text,
                        EndPointUrl = ValorSeleccionado(),
                        IdDocumento = txtSerieCorrelativo.Text,
                        NroTicket   = frm.txtNroTicket.Text
                    };

                    ISerializador            serializador            = new Serializador();
                    IServicioSunatDocumentos servicioSunatDocumentos = new ServicioSunatDocumentos();
                    EnviarDocumentoResponse  respuestaEnvio          = await new ConsultarTicket(servicioSunatDocumentos, serializador).Post(consultaTicketRequest);

                    if (!respuestaEnvio.Exito || !string.IsNullOrEmpty(respuestaEnvio.MensajeError))
                    {
                        throw new InvalidOperationException(respuestaEnvio.MensajeError);
                    }

                    File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}.zip",
                                       Convert.FromBase64String(respuestaEnvio.TramaZipCdr));

                    txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{respuestaEnvio.MensajeRespuesta}";

                    if (chkVoz.Checked)
                    {
                        Hablar();
                    }
                }
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
Example #4
0
 private void btnGetStatus_Click(object sender, EventArgs e)
 {
     var consultaTicketRequest = new ConsultaTicketRequest
     {
         Ruc         = txtRUC.Text,
         UsuarioSol  = txtUsuarioSol.Text,
         ClaveSol    = txtClaveSol.Text,
         EndPointUrl = "https://e-factura.sunat.gob.pe/ol-ti-itcpfegem/billService",
         IdDocumento = txtNoDoc.Text
     };
 }
Example #5
0
        private async void btnGetStatus_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;

                using (var frm = new FrmTicket())
                {
                    if (frm.ShowDialog() != DialogResult.OK)
                    {
                        return;
                    }
                    if (string.IsNullOrEmpty(frm.txtNroTicket.Text))
                    {
                        return;
                    }

                    var consultaTicketRequest = new ConsultaTicketRequest
                    {
                        Ruc         = txtNroRuc.Text,
                        UsuarioSol  = txtUsuarioSol.Text,
                        ClaveSol    = txtClaveSol.Text,
                        EndPointUrl = ValorSeleccionado(),
                        IdDocumento = txtSerieCorrelativo.Text,
                        NroTicket   = frm.txtNroTicket.Text
                    };

                    var jsonConsultaTicket = await _client.PostAsJsonAsync("api/ConsultarTicket", consultaTicketRequest);

                    var respuestaEnvio = await jsonConsultaTicket.Content.ReadAsAsync <EnviarDocumentoResponse>();

                    if (!respuestaEnvio.Exito)
                    {
                        throw new ApplicationException(respuestaEnvio.MensajeError);
                    }

                    File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}.zip",
                                       Convert.FromBase64String(respuestaEnvio.TramaZipCdr));

                    txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{respuestaEnvio.MensajeRespuesta}";

                    Hablar();
                }
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
Example #6
0
        /// <summary>
        /// Consulta comprobante de recepción en la SUNAT
        /// </summary>
        /// <param name="txtNroTicket"></param>
        /// <param name="IdDocumento"></param>
        /// <param name="emisorNroDocumento"></param>
        /// <returns></returns>
        public async Task ConsultaCDR(String txtNroTicket, String IdDocumento, String emisorNroDocumento)
        {
            _consultaCDRExito = false;
            var consultaTicketRequest = new ConsultaTicketRequest
            {
                Ruc         = emisorNroDocumento,
                UsuarioSol  = trxVenta.Ruta_certificadoPac,
                ClaveSol    = trxVenta.Contrasenia_clavePac,
                EndPointUrl = _Param.URLwebServPAC,
                IdDocumento = IdDocumento,
                NroTicket   = txtNroTicket
            };

            var jsonConsultaTicket = await _client.PostAsJsonAsync("api/ConsultarTicket", consultaTicketRequest);

            jsonConsultaTicket.EnsureSuccessStatusCode();

            var respuestaEnvio = await jsonConsultaTicket.Content.ReadAsAsync <EnviarDocumentoResponse>();

            if (!respuestaEnvio.Exito || !string.IsNullOrEmpty(respuestaEnvio.MensajeError))
            {
                throw new InvalidOperationException(string.Concat(respuestaEnvio.MensajeError, " [ConsultaCDR]"));
            }

            if (string.IsNullOrEmpty(respuestaEnvio.TramaZipCdr) || respuestaEnvio.TramaZipCdr.Equals("Aun en proceso"))
            {
                throw new InvalidOperationException("El CDR todavía está en proceso en la SUNAT. Intente consultar más tarde. ");
            }

            _codigoRespuesta = respuestaEnvio.CodigoRespuesta;

            int iCodRespuesta = 0;

            if (Int32.TryParse(respuestaEnvio.CodigoRespuesta, out iCodRespuesta))
            {
                if (iCodRespuesta >= 100 && iCodRespuesta < 2000)
                {
                    throw new ApplicationException(string.Concat("La SUNAT no procesó el CDR. Codigo: ", respuestaEnvio.CodigoRespuesta, " ", respuestaEnvio.MensajeError, Environment.NewLine, respuestaEnvio.MensajeRespuesta, " Corrija el problema e intente nuevamente."));
                }
            }
            else
            {
                throw new ApplicationException(string.Concat("Código de respuesta desconocido. ", respuestaEnvio.CodigoRespuesta, " ", respuestaEnvio.MensajeError, Environment.NewLine, respuestaEnvio.MensajeRespuesta));
            }

            tramaZipCdr      = respuestaEnvio.TramaZipCdr;
            nombreArchivoCdr = $"R{respuestaEnvio.NombreArchivo}.zip";
            //File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}.zip", Convert.FromBase64String(respuestaEnvio.TramaZipCdr));

            //txtResult.Text = $@"{respuestaEnvio.MensajeRespuesta}";
            _consultaCDRExito = respuestaEnvio.Exito;
            _mensajeSunat     = respuestaEnvio.MensajeRespuesta;
        }
    private async void btnGetStatus_Click(object sender, EventArgs e)
    {
        try
        {
            if (string.IsNullOrEmpty(txtNroTicket.Text))
            {
                return;
            }
            var consultaTicketRequest = new ConsultaTicketRequest
            {
                Ruc         = Convert.ToString(DtEmpresa.Rows[0]["EmpresaRuc"]),
                UsuarioSol  = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]),
                ClaveSol    = Convert.ToString(DtEmpresa.Rows[0]["EmpresaClaveSol"]),
                EndPointUrl = ValorSeleccionado(),
                IdDocumento = "RC-20170908-001.xml",
                NroTicket   = txtNroTicket.Text
            };

            var jsonConsultaTicket = await _client.PostAsJsonAsync("api/ConsultarTicket", consultaTicketRequest);

            var respuestaEnvio = await jsonConsultaTicket.Content.ReadAsAsync <EnviarDocumentoResponse>();

            if (!respuestaEnvio.Exito || !string.IsNullOrEmpty(respuestaEnvio.MensajeError))
            {
                throw new InvalidOperationException(respuestaEnvio.MensajeError);
            }

            File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}.zip",
                               Convert.FromBase64String(respuestaEnvio.TramaZipCdr));

            txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{respuestaEnvio.MensajeRespuesta}";

            Hablar();
        }
        catch (Exception ex)
        {
            txtResult.Text += ex.Message + Environment.NewLine;
        }
    }
Example #8
0
        private async void BtnConsultaTicket_Click(object sender, EventArgs e)
        {
            string vPath;
            string vNro;

            try
            {
                Cursor = Cursors.WaitCursor;
                vNro   = txtNroTicket.Text;
                var consultaTicketRequest = new ConsultaTicketRequest
                {
                    Ruc         = TxtRuc.Text,
                    UsuarioSol  = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]),
                    ClaveSol    = Convert.ToString(DtEmpresa.Rows[0]["EmpresaclaveSol"]),
                    EndPointUrl = vUrlSunat,
                    IdDocumento = TxtXml.Text,
                    NroTicket   = txtNroTicket.Text
                };

                var jsonConsultaTicket = await _client.PostAsJsonAsync("api/ConsultarTicket", consultaTicketRequest);

                var respuestaEnvio = await jsonConsultaTicket.Content.ReadAsAsync <EnviarDocumentoResponse>();

                string  vStr = "";
                Boolean vOk  = false;
                txtResult.Text = "";
                if (!respuestaEnvio.Exito)
                {
                    vStr = " Servidor SUNAT no responde ";
                }
                else
                {
                    if (!string.IsNullOrEmpty(respuestaEnvio.MensajeError))
                    {
                        vStr = respuestaEnvio.MensajeError;
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(respuestaEnvio.MensajeRespuesta))
                        {
                            vOk  = true;
                            vStr = respuestaEnvio.MensajeRespuesta;
                        }
                    }

                    if (vOk)
                    {
                        vPath  = vRutaCdr;
                        vPath += Path.Combine(vPath, $"/{respuestaEnvio.NombreArchivo}.zip");

                        //      File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}.zip",
                        File.WriteAllBytes(vPath, Convert.FromBase64String(respuestaEnvio.TramaZipCdr));

                        vStr = $@"{Resources.procesoCorrecto}{Environment.NewLine}{respuestaEnvio.MensajeRespuesta}";

                        //         ModFunc.ActualizaEnviosDia(DtAceptados, Convert.ToString(DtDocumentos.Rows[0]["item"]), vNro, VGCnxSqlE);
                    }
                }
                txtResult.Text = $@"{vStr}";
                Hablar();
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
        public EnviarDocumentoResponse Post([FromBody] ConsultaTicketRequest request)
        {
            var response = new EnviarDocumentoResponse();

            try
            {
                var conexionSunat = new ConexionSunat(new ConexionSunat.Parametros
                {
                    Ruc         = request.Ruc,
                    UserName    = request.UsuarioSol,
                    Password    = request.ClaveSol,
                    EndPointUrl = request.EndPointUrl
                });

                var resultado = conexionSunat.ObtenerEstado(request.NroTicket);

                if (resultado.Item2)
                {
                    var returnByte = Convert.FromBase64String(resultado.Item1);
                    using (var memRespuesta = new MemoryStream(returnByte))
                    {
                        using (var zipFile = ZipFile.Read(memRespuesta))
                        {
                            foreach (var entry in zipFile.Entries)
                            {
                                if (!entry.FileName.EndsWith(".xml"))
                                {
                                    continue;
                                }
                                using (var ms = new MemoryStream())
                                {
                                    entry.Extract(ms);
                                    ms.Position = 0;
                                    var responseReader = new StreamReader(ms);
                                    var responseString = responseReader.ReadToEnd();
                                    try
                                    {
                                        var xmlDoc = new XmlDocument();
                                        xmlDoc.LoadXml(responseString);

                                        var xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable);

                                        xmlnsManager.AddNamespace("ar", EspacioNombres.ar);
                                        xmlnsManager.AddNamespace("cac", EspacioNombres.cac);
                                        xmlnsManager.AddNamespace("cbc", EspacioNombres.cbc);

                                        response.CodigoRespuesta = xmlDoc.SelectSingleNode(EspacioNombres.nodoResponseCode,
                                                                                           xmlnsManager)?.InnerText;

                                        response.MensajeRespuesta = xmlDoc.SelectSingleNode(EspacioNombres.nodoDescription,
                                                                                            xmlnsManager)?.InnerText;
                                        response.TramaZipCdr = resultado.Item1;
                                        response.Exito       = true;
                                    }
                                    catch (Exception ex)
                                    {
                                        response.MensajeError = ex.Message;
                                        response.Pila         = ex.StackTrace;
                                        response.Exito        = false;
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    response.Exito            = true;
                    response.MensajeRespuesta = resultado.Item1;
                }
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }