Ir para conteúdo
  • Cadastre-se

dev botao

Assinatura Nfse


ivonel
  • Este tópico foi criado há 2404 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Moderadores

Ninguem aqui ta faltando com educação e nem cobrando ninguem de suporte e sobre a solução do problema do pessoal que mantem o ACBR...!!!

Muito pelo contrario, estamos tentando em grupo acha a solução do mesmo !!!

Não vou muito longe não, leia somente os 3 posts anteriores ao do Daniel, que vai ver que ninguém está procurando solução em grupo, mas cobrando o core do ACBr para fazer algo.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Ninguem aqui ta faltando com educação e nem cobrando ninguem de suporte e sobre a solução do problema do pessoal que mantem o ACBR...!!!

Muito pelo contrario, estamos tentando em grupo acha a solução do mesmo !!!

Você tem certeza de que leu os posts anteriores:

Opa, eu achei que eles (moderadores) viam as mensagens meio por cima sempre... rs

Eu também ainda não consegui nada, ta complicado e o tempo ta passando!

Acho pouco provável que alguém queira responder algo aqui após isso...

Quem sabe não é a grande hora de vocês abrirem os fontes, estudarem e tentar contribuir com a correção do problema...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

E você ao inves de tentar ajudar... fica criticando... belo colaborador...

Colega, criticamos sim usuários desse tipo, porque vocês ao invés de procurar soluções estão cobrando, nenhum dos colaboradores é obrigado a ajudar ou responder qualquer coisa, fazemos porque queremos ajudar a todos ao contrário de muito gente que entra neste fórum, baixa os componentes e simplesmente fica cobrando.

Felizmente a grande maioria das pessoas que utilizam este fórum ajudam de alguma forma, seja respondendo dúvidas, seja testando o que nós colaboradores implementamos, seja ajudando a implementar ou também como os usuários do ACBrSAC pagando para que o projeto se mantenha vivo e ajudando a todas as pessoas que o utilizam.

O projeto open-source se faz assim, de pessoas que auxiliam como podem e não de usuários que ficam o tempo todo pedindo algo sem nem sequer abrir os fontes e tentar implementar alguma coisa, ou pessoas que ficam somente cobrando soluções ao invés de tentar apresentá-las.

Ninguém aqui é senhor de tudo para criticar, mas usuários desse tipo fazem de pessoas que trabalham com o open-source percam a "graça" de continuar, mas ainda bem que a grande maioria são de pessoas que realmente querem contribuir de alguma forma.

  • Curtir 2

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Nossa, que discussão mais sem sentido.

Eu em nenhum momento estive cobrando algo de alguém ou pedindo para que alguém fizesse algo por mim.

Aos que estão criticando, favor leiam o tópico inteiro e não somente os últimos 3 posts.

Se fizer isso, vai ver que existem três pessoas tentando desenvolver a mesma coisa para a mesma cidade, verão que nós estamos discutindo sobre o assunto e trocando conhecimentos sobre o que já tentamos e quais foram as respostas pela empresa responsável pela NFSe na cidade de Ponta Grossa.

Eu enviei sim uma mensagem para um dos colaboradores do projeto para que se caso ele pudesse dar uma olhada no nosso tópico, e com a experiência dele, quem sabe tivesse alguma ideia que nós ainda não tivéssemos tentado.

Segue a baixo a mensagem:

Boa noite Italo,

Eu, Rodrigo, e mais duas pessoas aqui do fórum, estamos tentando resolver um problema da NFSe aqui da cidade de Ponta Grossa-PR.

Pensamos que você pudesse dar uma olhada na situação e quem sabe nos dar algum auxilio.

Agradecemos desde já.

Em nenhum momento foi cobrado nada de ninguém, estamos utilizando o fórum para discutir as possibilidades e diariamente consultamos para ver se alguém (ivonel,madalozzo) conseguiu resolver o problema de alguma forma.

Se alguém de fora, que não está desenvolvendo para Ponta Grossa, porem já passou pelo mesmo problema em outra cidade, quiser fazer algum comentário/observação/... qualquer ideia é bem vinda.

Rodrigo.

Link para o comentário
Compartilhar em outros sites

Bom, segue a baixo um e-mail que foi me passado pelo Leonardo da FintelISS.

Abaixo segue um novo exemplo de assinatura digital que um desenvolvedor gentilmente nos forneceu para geração da mesma:

“ola, segue a rotina de assinatura, extrai ela do codigo...fiz alguns comentarios que talvez ajude....

se necessitar de algum aprofundamento....estou a disposicao....

so reforcando os arquivo com inicio ACBr....fazem parte do componente ACBr...que é livre....

Utilizo versao Delphi 2007, mas funciona em versoes mais antigas e mais novas.

Utiliza interfaces das biblioteclas do windows (type library, interfaces

extraidas) arquivo ACBrMSXML2_TLB (interface da biblioteca MSXML5.DLL) os

objetos:

CoDOMDocument50, CoMXDigitalSignature50

arquivo ACBrCAPCOM_TLB (interface extraida para biblioteca CAPICOM.DLL)

objetos: ICertificate2;

as biblioteclas MSXML5.DLL, MSXML5R.DLL e CAPICOM.DLL devem estar instaladas e registradas para funcionar no windows tem outro processo para o linux...mas como nao trabalho com linux, nao implementei.

{

Adaptacao: Luiz Henrique Auer - Proquisa Desenvolvimentos

Tecnologo WebDesign e Programacao.

Assinatura arquivos XML ISS Ponta Grossa

aValue: recebe o XML (string comum) a ser assinado, observacao deve estar com as devidas tags Signature e ID, ou seja

um arquivo "quase completo" faltando a assinatura apenas

Exemplo:

arquivo vai ter a tag Signature nas notas e no lote, sem estar ainda assinado.

URIs : um StringList (vetor) com os ID-URIs a serem buscados no arquivo e assinados.

Assinatura e troca da tag, assinada é controlada pelo ID-Uri, utilizando este vetor.

Certificado: ser utilizado

O metodo vai assinando documento a documento, baseando-se no vetor URIs, parametro de entrada.

}

class function NotaUtil.ExecutaAssinatura(aValue: AnsiString;

Certificado: ICertificate2; URIs: TStringList; out sXML: AnsiString):

Boolean;

(** ASSINATURA **)

var

XMLDoc : IXMLDOMDocument3;

XMLDSig : IXMLDigitalSignature;

dsigKey : IXMLDSigKey;

signedKey : IXMLDSigKey;

nodePai, nodeX509Data, nodeIrmao : IXMLDOMNode;

(** CERTIFICADO **)

var

CertStoreMem : IStore3;

PrivateKey : IPrivateKey;

(** GERAL **)

var

C, I : Integer;

function FindNode(lstNodes : IXMLDOMNodeList; strNome:string):IXMLDOMNode;

var

node,

noderet : IXMLDOMNode;

begin

result := nil;

node := lstNodes.nextNode as IXMLDOMNode;

while node <> nil do begin

if node.nodeName = strNome then begin

result := node;

exit;

end;

if node.hasChildNodes then begin

noderet := findNode(node.childNodes,strNome);

if noderet <> nil then begin

result := noderet;

exit;

end;

end;

node := lstNodes.nextNode as IXMLDOMNode;

end;

end;

function FindNodeURI(lstNodes : IXMLDOMNodeList; Tag, URI : String)

: IXMLDOMNode;

var Node,

NodeRet : IXMLDOMNode;

TextXML : String;

begin

Result := nil;

Node := (lstNodes.nextNode As IXMLDOMNode);

while (Node <> nil) do begin

TextXML := Node.XML;

if (Node.NodeName = Tag) And (Pos(URI,TextXML) > 0) Then begin

Result := Node;

Exit;

end;

if (Node.HasChildNodes) then begin

NodeRet := FindNodeURI(Node.ChildNodes,Tag,URI);

if (NodeRet <> nil) then begin

result := NodeRet;

exit;

end;

end;

Node := (lstNodes.nextNode As IXMLDOMNode);

end;

end;

procedure DeleteFindNode(TagURI : String);

begin

nodePai := FindNodeURI(XMLDoc.ChildNodes, 'Signature', TagURI);

nodePai := FindNode(NodePai.ChildNodes,'KeyInfo');

if (nodePai <> nil) Then Begin

nodeX509Data := findNode(nodePai.childNodes,'X509Data');

nodeIrmao := nodeX509Data.nextSibling;

while nodeIrmao <> nil do begin

nodePai.removeChild(nodeIrmao);

nodeIrmao := nodeX509Data.nextSibling;

end;

end;

end;

begin

if (Trim(aValue) = '') then

raise Exception.Create('Não existe informação para fazer a Assinatura Digital');

(*** CONFIGURANDO O XML DOC ***)

XMLDoc := CoDOMDocument50.Create;

XMLDoc.async := false;

XMLDoc.validateOnParse := false;

XMLDoc.preserveWhiteSpace := true;

(******************************)

XMLDSig := CoMXDigitalSignature50.Create;

if (not XMLDoc.LoadXML(aValue) ) then

raise Exception.Create('Não foi possível carregar o "texto" XML');

XMLDoc.setProperty('SelectionNamespaces', DSIGNS); //DSIGNS->Constante declarada 'xmlns:ds="http://www.w3.org/2000/09/xmldsig#"';

CertStoreMem := CoStore.Create;

CertStoreMem.Open(CAPICOM_MEMORY_STORE, 'Memoria', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

CertStoreMem.Add(Certificado);

OleCheck(IDispatch(Certificado.PrivateKey).QueryInterface(IPrivateKey,Privat

eKey));

c:=0;

repeat

NodePai := FindNodeURI(XMLDoc.ChildNodes, 'Signature', URIs.Strings[C]);

XMLDSig.signature := NodePai;

If (XMLDSig.signature = NIL) then

raise Exception.Create('Falha ao setar assinatura.');

If (XMLDSig.signature = NIL) then

raise Exception.Create('É preciso carregar o template antes de assinar.');

xmldsig.store := CertStoreMem;

dsigKey := xmldsig.createKeyFromCSP(PrivateKey.ProviderType,

PrivateKey.ProviderName, PrivateKey.ContainerName, 0);

if (dsigKey = nil) then

raise Exception.Create('Erro ao criar a chave do CSP.');

signedKey := xmldsig.sign(dsigKey, $00000002);

if (signedKey = NIL) then

raise Exception.Create('Assinatura Falhou.');

if (signedKey <> NIL) then

deleteFindNode(URIs.Strings[C]);

Inc©;

until C >= URIs.Count;

Result:= true;

sXML:= XMLDoc.Xml;

dsigKey := NIL;

signedKey := NIL;

xmldoc := NIL;

xmldsig := NIL;

end;

Espero que tenha ajudado.

Qualquer dúvida estou a disposição.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Fundadores

E você ao inves de tentar ajudar... fica criticando... belo colaborador...

Acho que o fato de eu ter criado, mantido e administrado o projeto ACBr por mais de 7 anos é uma colaboração... Não seria ?

Ainda estou aguardando seus fontes com a correção para nossa analise... vamos lá... você também pode ajudar e fazer parte... só não vale ficar sentado e cobrando uma solução...

Mas sinceramente acho que esse post não dará em nada produtivo... vamos fechar o tópico ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Nossa, que discussão mais sem sentido.

Eu em nenhum momento estive cobrando algo de alguém ou pedindo para que alguém fizesse algo por mim.

Aos que estão criticando, favor leiam o tópico inteiro e não somente os últimos 3 posts.

Se fizer isso, vai ver que existem três pessoas tentando desenvolver a mesma coisa para a mesma cidade, verão que nós estamos discutindo sobre o assunto e trocando conhecimentos sobre o que já tentamos e quais foram as respostas pela empresa responsável pela NFSe na cidade de Ponta Grossa.

Eu enviei sim uma mensagem para um dos colaboradores do projeto para que se caso ele pudesse dar uma olhada no nosso tópico, e com a experiência dele, quem sabe tivesse alguma ideia que nós ainda não tivéssemos tentado.

Segue a baixo a mensagem:

Boa noite Italo,

Eu, Rodrigo, e mais duas pessoas aqui do fórum, estamos tentando resolver um problema da NFSe aqui da cidade de Ponta Grossa-PR.

Pensamos que você pudesse dar uma olhada na situação e quem sabe nos dar algum auxilio.

Agradecemos desde já.

Em nenhum momento foi cobrado nada de ninguém, estamos utilizando o fórum para discutir as possibilidades e diariamente consultamos para ver se alguém (ivonel,madalozzo) conseguiu resolver o problema de alguma forma.

Se alguém de fora, que não está desenvolvendo para Ponta Grossa, porem já passou pelo mesmo problema em outra cidade, quiser fazer algum comentário/observação/... qualquer ideia é bem vinda.

Rodrigo.

Se você não gosta do jeito que o projeto é gerido.... Crie um Fork... ou seja...

Baixe os fontes, crie um Novo projeto em código aberto (não se esqueça de dar créditos aos autores originais)... e administre você mesmo as modificações e solicitações dos seus futuros usuários...

Pra mim chega... tópico fechado

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia a todos,

Gostaria de informar que não sou funcionário da ACBr, alias a ACBr não é uma empresa.

Como o Daniel disse, vamos deixar de ser meros espectadores, para se tornar o artista desse espetaculo que é o ACBr.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Bom dia.

Agradeço a abertura do tópico pois como sempre disse o ACBr é fundamental para nós.

Aproveito também para pedir desculpas em meu nome e em nome dos demais colegas (se me permitem) sobre a forma como postamos alguns itens acima, e dizer que a nossa intenção

não era para parcer cobrança de ninguém, de forma alguma.

Vamos acreditar q a reabertura do tópico seja uma motivação a mais e reconquistemos dessa forma a credibilidade e o interesse de nossos colegas em nos ajudar, ou nós ajudar a eles!

Obrigado

__________

Ivonel Jr.

Link para o comentário
Compartilhar em outros sites

Caros colegas, também enfrentei esse problema.

A questão está justamente na forma da assinatura.

1-Na NFe (modelo 55) é necessário montar o template Signature sem adicionar no documento, assinar e só então depois adicionar.

2-No caso da NFSe (serviços) é preciso adicionar o template Signature no documento xml para assinar junto gerando DigestValue, SignatureValue e X509Certificate.

// Meu exemplo funciona para ambos (NFe e NFSe-"Equiplano")

// ANodes vem do documento XML original (é a tag a ser assinada)

// Eu faço uma array com todos os nodes necessarios (FindNode) e depois vou assinado um a um

// Não utilizo SelectNodes pq houveram problemas com isso, até pq a Signature não está no documento ainda.

// Isso somente funcionava bem com nota NFe (modelo 55).

// Informar o Id e a URI a ser assinada e preparar o Signature para receber a assinatura

xmldsig.signature := CreateSignature( ANodes ); // gera a estrutura para assinatura () --> template

if ReferenceById(ANodes) = '' then // Não tem atributo "Id" (é uma NFSe), adicionar no documento antes de assinar.

ANodes.appendChild( xmldsig.signature );

// Informar a URI como referencia antes de assinar(xmldsig.sign). Ex: xmldsig.setReferenceData('#L001', ANodes);

// xmldsig.setReferenceData( "", ANodes ); // Id="NFe...." ou sem Id fica "" como na NFse.

// xmldsig.setReferenceData( "#NFe1232131...", ANodes );

xmldsig.setReferenceData( ReferenceById(ANodes), ANodes );

// Assinar o conteudo xml da tag informada na URI

oSigned := xmldsig.sign(oKey, PURGE or CERTIFICATES) // exporta X509Certificate junto com a assinatura.

if oSigned = nil then // Não gerou assinatura

begin

result := WebResponseNew( EC_XML_NOSIGNER, 'A assinatura do conteúdo não foi realizada.' );

Exit;

end;

if ReferenceById(ANodes) <> '' then // TEM atributo "Id" (é uma NFe), adicionar no documento somente após assinar.

ANodes.parentNode.appendChild( xmldsig.signature );

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...
  • 3 semanas depois ...

Bom Dia, gostaria de saber se acaso estou fazendo algo de errado no uso e entendimento do exemplo da NFSe.
No Exemplo apresentado pela ACBr configurei as informações do emitente para Natal/RN, sendo assossiado o schema de Natal e ambiente de homologação.

Quando executo o botão "Gerar Lote RPS", o mesmo acusa a seguinte mensagem:

"É preciso carregar o template antes de assinar."

 

O meu certificado é A1 e já está instalado na maquina ao qual estou realizando esses testes.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Tiago,

 

Favor atualizar os fontes e testar novamente.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • 1 mês depois ...

Boa tarde Italo

Atualizei meus Fontes do ACBR esta semana, e gerei uma versão para meus clientes, porém hoje um cliente meu tentou gerar uma NFSe e deu erro ao assinar o RPS, o provedor do mesmo é Pronim, percebi que houve uma Revisão de número 7941, que realiza a assinatura do provedor pronim.

Hoje assino minhas notas pelo MSXML, onde ocorre a excessão é no método AssinarMSXML no seguinte código: signedKey := xmldsig.sign(dsigKey, $00000002);

Saberia me dizer o que posso fazer para corrigir isso??

 

Obrigado pela Atenção

LogoACBr_02.png.d3c72a4756f896a387e063fd64ed6646.png Frederico Westphalen - RS
pbnew.com.br  
[email protected]  
55 3744 - 3880  
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
Em 19/05/2016 at 09:28, Fabio Bacin disse:

Bom Dia,
Está ocorrendo o seguinte erro ao tentar emitir uma nota de serviço pela Betha - Chapecó-SC:
"É preciso carregar o template antes de assinar."

Alguém já se deparou com essa mensagem que consiga me ajudar?

 

Obrigado pela atenção.

Fabio, 

Também estou enfrentando o mesmo problema no Betha de Maravilha/SC...

Editado por luizf
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

olá Bom dia,

Quebrei a cabeça nesta NFS-e de ponta grosa - PR.fiz em C# com c++ gerenciado. vou dizer o que fiz em alguns passos.

1 - Existem dois certificados a serem usados, o primeiro que precisamos é o da prefeitura disponibilizado pela mesma no site: CHAVE PÚBLICA PMPG novo.gif.

2 - Este certificado é usado apenas para o serviço de envio e retorno do SOAP, ou seja ele é usado no service certificate do Custom Bind do WS.

3 - O certificado do cliente é usado também no WS:

    ClientCredentials->ClientCertificate->Certificate = certificateCliente  (certificado do cliente);

    ClientCredentials->ServiceCertificate->DefaultCertificate = certificateService ( certificado do serviço);

    ClientCredentials->ServiceCertificate->Authentication->CertificateValidationMode = X509CertificateValidationMode::ChainTrust;

estes pontos foram cruciais para obter exito no envio do XML para o padrão Elotech.

Espero que ajude a quem precisa.

Att,

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2404 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...