public void CertificadosInstalados(string arquivo)
{
bool lConsultar = false;
bool lErro = false;
string arqRet = "uninfe-ret-cons-certificado.xml";
string tmp_arqRet = Path.Combine(Propriedade.PastaGeralTemporaria, arqRet);
string cStat = "";
string xMotivo = "";
try
{
XmlDocument doc = new XmlDocument();
doc.Load(arquivo);
foreach (XmlElement item in doc.DocumentElement)
{
lConsultar = doc.DocumentElement.GetElementsByTagName("xServ")[0].InnerText.Equals("CONS-CERTIFICADO", StringComparison.InvariantCultureIgnoreCase);
}
if (lConsultar)
{
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
X509Certificate2Collection collection2 = (X509Certificate2Collection)collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);
#region Cria XML de retorno
if (File.Exists(tmp_arqRet))
File.Delete(tmp_arqRet);
XmlDocument RetCertificados = new XmlDocument();
XmlNode raiz = RetCertificados.CreateElement("Certificados");
RetCertificados.AppendChild(raiz);
RetCertificados.Save(tmp_arqRet);
#endregion
#region Monta XML de Retorno com dados do Certificados Instalados
for (int i = 0; i < collection2.Count; i++)
{
#region layout retorno
/*layout de retorno - Renan Borges
<Certificados>
<ThumbPrint ID="999...">
<Subject>XX...</Subject>
<ValidadeInicial>dd/dd/dddd</ValidadeInicial>
<ValidadeFinal>dd/dd/dddd</ValidadeFinal>
<A3>true</A3>
</Certificados>
*/
#endregion
X509Certificate2 _X509Cert = collection2[i];
XmlDocument docGerar = new XmlDocument();
docGerar.Load(tmp_arqRet);
XmlNode Registro = docGerar.CreateElement("ThumbPrint");
XmlAttribute IdThumbPrint = docGerar.CreateAttribute(NFe.Components.TpcnResources.ID.ToString());
IdThumbPrint.Value = _X509Cert.Thumbprint.ToString();
Registro.Attributes.Append(IdThumbPrint);
XmlNode Subject = docGerar.CreateElement("Subject");
XmlNode ValidadeInicial = docGerar.CreateElement("ValidadeInicial");
XmlNode ValidadeFinal = docGerar.CreateElement("ValidadeFinal");
XmlNode A3 = docGerar.CreateElement("A3");
Subject.InnerText = _X509Cert.Subject.ToString();
ValidadeInicial.InnerText = _X509Cert.NotBefore.ToShortDateString();
ValidadeFinal.InnerText = _X509Cert.NotAfter.ToShortDateString();
A3.InnerText = _X509Cert.IsA3().ToString().ToLower();
docGerar.SelectSingleNode("Certificados").AppendChild(Registro);
Registro.AppendChild(Subject);
Registro.AppendChild(ValidadeInicial);
Registro.AppendChild(ValidadeFinal);
Registro.AppendChild(A3);
docGerar.Save(tmp_arqRet);
}
#endregion
}
}
catch
{
cStat = "2";
xMotivo = "Nao foi possivel fazer a consulta de Certificados Instalados na estação " + Propriedade.NomeAplicacao;
lErro = true;
File.Delete(tmp_arqRet);
}
finally
{
string cArqRetorno = Propriedade.PastaGeralRetorno + "\\" + arqRet;
#region XML de Retorno para ERP
try
{
FileInfo oArqRetorno = new FileInfo(cArqRetorno);
if (oArqRetorno.Exists == true)
{
oArqRetorno.Delete();
}
if (!lConsultar && !lErro)
{
cStat = "2";
xMotivo = "Nao foi possivel fazer a consulta de Certificados Instalados na estação (xServ não identificado) no " + Propriedade.NomeAplicacao;
}
if (lErro || !lConsultar)
{
File.Delete(tmp_arqRet);
var xml = new XDocument(new XDeclaration("1.0", "utf-8", null),
new XElement("retCadConfUniNFe",
new XElement(NFe.Components.TpcnResources.cStat.ToString(), cStat),
new XElement(NFe.Components.TpcnResources.xMotivo.ToString(), xMotivo)));
xml.Save(cArqRetorno);
}
else
{
if (File.Exists(cArqRetorno))
File.Delete(cArqRetorno);
if (File.Exists(arquivo))
File.Delete(arquivo);
File.Move(tmp_arqRet, Propriedade.PastaGeralRetorno + "\\" + arqRet);
}
}
catch (Exception ex)
{
//Ocorreu erro na hora de gerar o arquivo de erro para o ERP
Auxiliar oAux = new Auxiliar();
oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(cArqRetorno) + ".err", xMotivo + Environment.NewLine + ex.Message);
}
#endregion
}
}
#endregion