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