Desenvolvimento NFS-e
Desenvolvimento NFS-e

Site destinado a desenvolvedores de softwares na integração com a NFS-e.
 
InícioInício  CalendárioCalendário  FAQFAQ  BuscarBuscar  GruposGrupos  Registrar-seRegistrar-se  Conectar-se  

Compartilhe | 
 

 (RESOLVIDO)Assinar XML

Ver o tópico anterior Ver o tópico seguinte Ir em baixo 
AutorMensagem
hudsonjm



Mensagens : 3
Data de inscrição : 07/11/2012

MensagemAssunto: (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
Voltar ao Topo Ir em baixo
BrunoSilva



Mensagens : 15
Data de inscrição : 18/10/2012

MensagemAssunto: 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");
                }
            }
        }
Voltar ao Topo Ir em baixo
 
(RESOLVIDO)Assinar XML
Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo 
Página 1 de 1
 Tópicos similares
-
» [RESOLVIDO] Dinâmica de água
» [Resolvido] Como configuro o meu para aparecer as categorias em vez dos topicos?
» [Resolvido] Como por borda em uma iframe?
» [Resolvido] Ocultar fóruns do índice
» [Resolvido] Código do painel de usuário

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
Desenvolvimento NFS-e  :: Duvidas Frequentes-
Ir para: