segunda-feira, 22 de fevereiro de 2016

SÉRIE NFe - Assinar NFe com Certificado A1

http://leonardo-vilani.blogspot.com.br/2016/02/serie-nfe-assinar-nfe-com-certificado-a1.html

 


SÉRIE NFe - Assinar NFe com Certificado A1


NFe, XML, Certificado digital, Assinatura...... Sei que o assunto não é novo, mas para mim é um novo desafio, hoje contamos com muitas soluções prontas que nos auxiliam com as tarefas da NFe desde a geração do XML, assinatura digital até a impressão da DANFE, em nosso caso optamos por uma versão grátis o escolhido foi o NFePHP, inclusive quero deixar os meus agradecimentos ao Roberto L. Machado e aos demais colaboradores desta excelente solução, fiquei impressionado com a qualidade do material, o projeto é super organizado e documentado mesmo eu não tendo muita experiência com PHP não tive dificuldades para integrar ao meu projeto.
Bom vamos ao que interessa, hoje pela manhã tive que ficar de molho uma hora e meia esperando minha consulta no dentista, para não ficar entediado resolvi dar uma olhada no post anterior para ver o que faltava para concluir nossa assinatura com o certificado digital, e depois de uns ajustes aqui e outros ali, pimba!!! XML Assinado com sucesso rsrsr.

Pretendemos inciar uma série de posts sobre esse assunto (NFe), a idéia é podermos comparar as diversas formas de solucionar esse problema, seja usando Wlanguage, ou soluções de terceiros como NFePHP, OpenNFe, ACBR, vamos iniciar com esse tutorial complementar do post anterior, onde vamos fazer a assinatura do XML com o certificado digital A1, quero deixar aberto o espaço a quem quiser colaborar com qualquer material sobre o assunto, bom vamos colocar a mão na massa agora.



Código da Procedure:

PROCEDURE ASSINA_NFe(xmlString, RefUri, sChNfe, x509Cert)

// Cria um novo XML.
Doc is System.Xml.XmlDocument;

Doc.LoadXml(xmlString)

// Verifica se a tag a ser assinada existe é única
qtdeRefUri is int = Doc.GetElementsByTagName(RefUri).Count

IF (qtdeRefUri = 0)
// a URI indicada não existe

ELSE

IF (qtdeRefUri > 1)
//existe mais de uma URI indicada

ELSE

// cria um objeto xml assinado
VrSignedXml is SignedXml(Doc) //= SignedXml(doc);

// adiciona a chave do certificado
VrSignedXml.SigningKey = x509Cert.PrivateKey

// Cria a referencia para assinatura
Reference is Reference //= new Reference();
Reference.Uri = "#" + sChNfe

// adiciona um XmlDsigEnvelopedSignatureTransform para a assinatura
Env is XmlDsigEnvelopedSignatureTransform 
Reference.AddTransform(Env)

c14 is XmlDsigC14NTransform 
Reference.AddTransform(c14)

// adiciona a referencia no xml assinado
VrSignedXml.AddReference(Reference)

// Cria a chave
VrkeyInfo is KeyInfo 

// carrega o certificado em um keyinfox509 e adiciona ao keyinfo
VrkeyInfo.AddClause(new KeyInfoX509Data(x509Cert))

// adiciona o keyinfo ao xml assinado
VrSignedXml.keyInfo = VrkeyInfo
VrSignedXml.ComputeSignature()

// busca a representacao XML da assinatura e salva no XML
xmlDigitalSignature is System.Xml.XmlElement dynamic = VrSignedXml.GetXml()

// adiciona a assinatura no documento
Doc.DocumentElement.AppendChild(Doc.ImportNode(xmlDigitalSignature, True))

//salva o documento assinado
RESULT Doc.get_InnerXml()
END
END








WinDev 21 - 031 - Ide - Mudar Cor






Video Youtube



Agora no WinDev21 Posso Mudar a Cor da Ide

Now in WinDev21 Can Change Color Go

Or, dans WinDev21 peut changer de couleur Go
 

Blog - WinDev21/WebDev21/Mobile21 /001/... Instalações
Blog - WinDev21 /002/... Inicio Novo Projeto Agenda em WinDev21
Blog - WinDev21 /003/... Usuario Final Pode Colocar Ajuda nos Campos
Blog - WinDev21 /004/... Notas Explicativas - Note
Blog - WinDev21 /005/... Usuario Final Alterar Window 
Blog - WinDev21 /006/... Note Gravar em Um Campo da Tabela
Blog - WinDev21 /007/... Fil - Ligar Dois Campos 
Blog - WinDev21 /008/... Excluir Conteudo do EDT 
Blog - WebDev21 /009/... Responsive Web Design
Blog - WebDev21 /010/... Barre de Navigation 
Blog - WinDev21 /011/... Tabela Styles 
Blog - WinDev21 /012/... Supercontrol 
Blog - WinDev21 /013/... Codigo Barra Novos / MaxiCode / Aztec 
Blog - WinDev Mobile 21 /014/... Criando Projeto Novo Mobile 
Blog - WinDev Mobile 21 /015/... Layouts 
Blog - WinDev21 /016/... Ajuda 
Blog - WinDev21 /017/... imagens Multiplas - fSélecteurImage 
Blog - WinDev21 /018/... Configuração Duplicar 
Blog - WinDev21 /019/... Configuração - Mudar Tipo de Programa 
Blog - WinDev21 /020/... Teclas de Atalhos 
Blog - WinDev21 /021/... Botoes Comparar 
Blog - WinDev21 /022/... Relatorio Visualiza 
Blog - WinDev21 /023/... Relatorio Excel
Blog - WinDev21 /024/... Programa Bandeja Windows - Balao - SysIconDisplayTooltip 
Blog - WinDev21 /025/... Notes - Alterar Manualmente
Blog - WinDev21 /026/... Exemplo WinDev21 Imprimir TreeView 
Blog - WinDev21 /027/... Analise Tabela - Formula - Select
Blog - WinDev21 /028/... Tabela - Descricao Coluna Propriedades 
Blog - WinDev21 /029/... Documentação Online Atualizada
Blog - WebDev e WINDEV Mobile 21 /030/... Atualização on_line
Blog - WinDev21 /031/ ... Mudar cor Ide Options
Blog - WinDev21 /032/... Botões - Novos Estilos
Blog - WinDev21 /033/... Ctrl Tab - Melhorado visualização - 057
Blog - WinDev21 /034/... Pivo - Relatorio Pivo - 068
Blog - WinDev21 / 035/... Excel - Agora Tem relatorio - 069
Blog - WinDev21 /036/... Analise - Novo Campo - Horodatage-125
Blog - WinDev21 /037/... Hyperfile 21 - Expaind   














Teste

Teste
teste