예제 #1
0
        /// <summary>
        /// Processa os documentos assinando-os e enviando a receita
        /// </summary>
        private int processarDocumentosESocial(List <ESocial> documentos)
        {
            int count          = 1;
            int max            = documentos.Count;
            int doc_processado = 0;

            foreach (ESocial documento in documentos)
            {
                this.log.log("Processando " + count + " de " + max + "...");
                XmlDocument resposta = new XmlDocument();
                //assina e envia documento
                XmlDocument xml_assinado      = ESocialControl.assinarXML(this.user.Certificado, documento.Xml_base64);
                string      resposta_servidor = ConexaoEsocial.processar_eventos(xml_assinado, this.user.Certificado, documento.Ambiente);
                resposta.LoadXml(resposta_servidor);

                string cdResposta   = resposta.GetElementsByTagName("cdResposta").Item(0).InnerText;
                string descResposta = resposta.GetElementsByTagName("descResposta").Item(0).InnerText;
                this.log.log("Resposta do servidor: " + cdResposta + " - " + descResposta);
                ESocialApp.novoDocumentoProcessado(documento, xml_assinado, resposta, this.user.Id);
                doc_processado++;
                count++;
            }

            return(doc_processado);
        }
예제 #2
0
        public override void run()
        {
            try
            {
                while (true)
                {
                    try
                    {
                        //----------\  teste \---------------

                        /*User user = new User();
                         * string path_cert = @"D:\projetos\certificados\SUPERMERCADO PESSIN LTDA ME18750973000103 [Certificado01].pfx";
                         * user.Certificado = new System.Security.Cryptography.X509Certificates.X509Certificate2(path_cert, "Certificado01");
                         * user.Id_servidor = 101;
                         * user.Hash = "e9437399bfb68ed926d4767604c8f4e3";
                         * user.Educont = false;*/
                        //-----------------------------

                        log.log("Iniciando verificação reposta de eventos na nuvem");
                        string retorno_servidor = contanto_wb.consultarXmlResposta(user.Id_servidor, user.Hash, user.Educont);

                        if (retorno_servidor.Equals("") == false)
                        {
                            JObject json_recebido = JObject.Parse(retorno_servidor);
                            int     erro          = (int)json_recebido["erro"];
                            string  retorno       = (string)json_recebido["retorno"];

                            log.log("resultado da API: erro = " + erro + " | retorno = " + retorno);

                            JArray dados = (JArray)json_recebido["dados"];

                            if (dados.Count > 0)
                            {
                                log.log(dados.Count + " documentos encontrados...");
                                JObject json_envio  = new JObject();
                                JArray  array_envio = new JArray();
                                int     cont        = 1;
                                foreach (JObject documento in dados)
                                {
                                    log.log("processando " + cont++ + " de " + dados.Count);
                                    int    idRegistro      = (int)documento["id"];
                                    int    ambiente        = (int)documento["ambiente"];
                                    string protocolo_envio = extrairProtocoloEnvio((string)documento["xml"]);

                                    if (protocolo_envio.Equals("erro") == false)
                                    {
                                        log.log("Protocolo encontrado: '" + protocolo_envio + "', iniciando procura no web service Esocial...");
                                        string      resultado     = ConexaoEsocial.consutarLoteEventos(ambiente, protocolo_envio, user.Certificado);
                                        XmlDocument resultado_xml = new XmlDocument();
                                        resultado_xml.LoadXml(resultado);
                                        string cd_resposta   = resultado_xml.GetElementsByTagName("cdResposta").Item(0).InnerText;
                                        string desc_resposta = resultado_xml.GetElementsByTagName("descResposta").Item(0).InnerText;

                                        if (cd_resposta.Equals("201"))
                                        {
                                            log.log("sucesso código " + cd_resposta + ": " + desc_resposta);
                                            string  resultado_base64   = base64Encode(resultado);
                                            string  resultado_contando = contanto_wb.enviarXmlResultado(user.Id_servidor, user.Hash, idRegistro, resultado_base64, ambiente, user.Educont);
                                            JObject json_contando      = JObject.Parse(resultado_contando);
                                            int     resultado_erro     = (int)json_contando["erro"];
                                            if (resultado_erro == 0)
                                            {
                                                log.log((string)json_contando["retorno"]);
                                            }
                                            else
                                            {
                                                log.log("Erro; " + (string)json_contando["retorno"]);
                                            }
                                        }
                                        else
                                        {
                                            try
                                            {
                                                string codigo_ocorrencia    = resultado_xml.GetElementsByTagName("codigo").Item(0).InnerText;
                                                string descricao_ocorrencia = resultado_xml.GetElementsByTagName("descricao").Item(0).InnerText;
                                                log.log("Erro código " + codigo_ocorrencia + ": " + descricao_ocorrencia);
                                            }
                                            catch (Exception)
                                            {
                                                log.log("Erro código " + cd_resposta + ": " + desc_resposta);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        log.log("tag protocolo não encontrado em documento");
                                    }
                                }
                            }
                            else
                            {
                                log.log("nenhum documento novo encontrado");
                            }
                        }
                        else
                        {
                            log.log("retorno vazio do servidor");
                        }
                    }
                    catch (Exception ex)
                    {
                        this.log.log("Erro no processo de sicronização: " + ex.Message);
                        notificao_erro(ex.Message);
                    }

                    //inicia espera
                    this.log.log("Iniciando aguardo de " + this.Intervalo_minutos + " antes de iniciar um novo upload" +
                                 "\n====================//======================");
                    try
                    {
                        Thread.Sleep(this.Intervalo_minutos);
                    }
                    catch (ThreadAbortException)
                    {
                        this.log.log("Processo de " + this.log.Processo + " foi finalizada pelo usuário");
                        notificao_info("Processo de " + this.log.Processo + " foi finalizada pelo usuário");
                        return;
                    }
                }
            }
            catch (ThreadAbortException)
            {
                this.log.log("Processo abortado");
            }
            catch (Exception ex)
            {
                log.log("ERRO CRÍTICO: " + ex.Message);
                notificao_erro("ERRO CRÍTICO: " + ex.Message);
            }
        }