hudsonjm
Mensagens : 3 Data de inscrição : 07/11/2012
| Assunto: (RESOLVIDO)Assinar XML Qua Nov 07, 2012 8:50 am | |
| Bom dia, pessoal sou novo no fórum estou desenvolvendo uma aplicação em JAVA para envio de NFSe GINFES Paranaguá-PR eu conheço um pouco do processo. Enviamos NFSe hoje pelo Uninfse, mas preciso algo java para rodar em Linux. Estou com dificuldade em como assinar os arquivos XML, já tenho o arquivo xml validado, ja tenho o certificado, alguem tem um exmplo de classe que posso utilizar.
Att Hudson | |
|
BrunoSilva
Mensagens : 15 Data de inscrição : 18/10/2012
| Assunto: Re: (RESOLVIDO)Assinar XML Ter Nov 13, 2012 12:14 pm | |
| - hudsonjm escreveu:
- Bom dia, pessoal sou novo no fórum
estou desenvolvendo uma aplicação em JAVA para envio de NFSe GINFES Paranaguá-PR eu conheço um pouco do processo. Enviamos NFSe hoje pelo Uninfse, mas preciso algo java para rodar em Linux. Estou com dificuldade em como assinar os arquivos XML, já tenho o arquivo xml validado, ja tenho o certificado, alguem tem um exmplo de classe que posso utilizar.
Att Hudson Boa Tarde, Também estou iniciando o desenvolvimento de uma aplicação, na verdade eu não tenho ideia como seria no java, mas no c# eu tenho uma namespace que eu utilizo para assinar que tem todas as informações necessárias solicitadas na documentação da Ginfes, criei um método passando como parâmetro - Código:
-
//Metodo que irá pegar as informações do meu Certificado. X509Certificate2 certificado = SelecionarCertificadoDoEmissor();
//Metodo que ira assinar o documento NfeXmlSigner.AssinarDocumento(mensagemAEnviar, "NFse", certificado);
private static void SignDocument(XmlDocument doc, string nodeName, string identifiedNodeName, AppendTypeEnum appendType, X509Certificate2 certificado) { //Validar certificado if (certificado == null) { throw new Exception("Certificado Digital não encontrado"); } if (!certificado.HasPrivateKey) { throw new Exception("Certificado Digital deve possuir chave privada."); }
//Para cada elemento encontrado no documento XmlNodeList nodes = doc.GetElementsByTagName(nodeName);
foreach (XmlElement elem in nodes) {
string id = getId(elem, identifiedNodeName);
//Identificar e referenciar o "bloco" dentro do documento XML Reference reference = new Reference(); http://reference.Uri = "#NFe minha chave de acesso"; reference.Uri = string.Concat("#", id);
//Aplicar os algoritmos de transformação reference.AddTransform(new XmlDsigEnvelopedSignatureTransform()); reference.AddTransform(new XmlDsigC14NTransform());
//Definir a chave de criptografia do algoritmo de assinatura assimétrica SignedXml signedXml;
switch (appendType) { case AppendTypeEnum.Into: XmlDocument docNfe = doc.Implementation.CreateDocument(); docNfe.AppendChild(docNfe.ImportNode(elem, true)); signedXml = new SignedXml(docNfe); break; case AppendTypeEnum.After: signedXml = new SignedXml(elem); break; default: throw new ArgumentException("O valor do parâmetro \"appendType\" não é válido.", "appendType"); }
signedXml.SigningKey = certificado.PrivateKey; signedXml.AddReference(reference);
//Calcular a assinatura digital signedXml.ComputeSignature();
//Adicionar o certificado ao documento NF-e assinado, KeyInfo keyInfo = new KeyInfo(); keyInfo.AddClause(new KeyInfoX509Data(certificado)); signedXml.KeyInfo = keyInfo;
//Obter o "bloco" que representa o XML da assinatura XmlElement signedXmlElem = signedXml.GetXml();
//Adicionar o Elemento de assinatura ao documento NF-e switch (appendType) { case AppendTypeEnum.Into: elem.AppendChild(doc.ImportNode(signedXmlElem, true)); break; case AppendTypeEnum.After: elem.ParentNode.InsertAfter(doc.ImportNode(signedXmlElem, true), elem); break; default: throw new ArgumentException("O valor do parâmetro \"appendType\" não é válido.", "appendType"); } } }
| |
|