-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Assinatura do XML #3
Comments
Olá, Rodrigo! Na verdade eu só comecei esse projeto, minha necessidade imediata eram as consultas de situação da NFe e de cadastro. O restante (incluindo geração, assinatura e transmissão dos XMLs) ficou pra depois e eu acabei entrando em outro projeto que está bastante distante da NFe. |
obrigado pelo retorno, eu ja tenho sistema que emite Nfe e assinatura feito em Python, estava migrando pra Go e queria emitir a partir de um servidor na nuvem em um programa Go, cheguei a testar esse russellhaering/goxmldsig#65 e conseguir fazer gerar uma assinatura válida, porém, ele tem um bug que so assinsa se o Id tiver na raiz do XML. eu conheço o Acbr, tentei o AcbrLib com comunicação via C para ser usada em Go mas nao conseguir funcionar. https://acbr.sourceforge.io/ACBrLib/CdeclouStdCallqualusar.html novamente, obrigado pelo retorno |
@rodrigorodriguescosta você ainda tem interesse em assinar e enviar? |
@alexrosabr eu conseguir assinar o XML em Go usando essa lib acima que falei |
@rodrigorodriguescosta Você precisou mexer na https://github.com/russellhaering/goxmldsig ou conseguiu fazer funcionar de outra forma? Tenho interesse em dar continuidade, pode ser aqui nesse projeto ou em algum fork. |
Interessante poderia apresentar um exemplo da assinatura utilizando essa Lib? |
Não fui eu, foi o @rodrigorodriguescosta que conseguiu. |
fala galera, segue a fucnao que fiz funcionar, precisa adaptar keyPair, _ := tls.X509KeyPair(certBytes, keBytes)
keyStore := dsig.TLSCertKeyStore(keyPair)
ctx := dsig.NewDefaultSigningContext(keyStore)
ctx.Hash = crypto.SHA1
ctx.IdAttribute = "Id"
ctx.Canonicalizer = dsig.MakeC14N10RecCanonicalizer()
ctx.Prefix = ""
doc := etree.NewDocument()
//procura pele elemento que precisa de assinatura
elementToSign := doc.FindElement(fmt.Sprintf("//%s", tagAssinatura))
if elementToSign == nil {
err = fmt.Errorf("nao foi possivel achar a tag de referencia '%s' para assinatura ", tagAssinatura)
return
}
// so assina corretamente se tiver o xmlns dentro da tag que precisa assinar, entao caso nao exista, adicione
// para poder efetuar a assinatura corretamente
if elementToSign.SelectAttr("xmlns") == nil {
if strings.Contains(xml, "http://www.portalfiscal.inf.br/mdfe") {
elementToSign.CreateAttr("xmlns", "http://www.portalfiscal.inf.br/mdfe")
} else {
elementToSign.CreateAttr("xmlns", "http://www.portalfiscal.inf.br/nfe")
}
}
// realiza a assinatura
signedElement, err2 := ctx.SignEnveloped(elementToSign) |
ou seja, a lib em si nao precisou de ajuste, precisou de ajuste na funcao para assinar o XML da nota |
Obteve algum sucesso na assinatura? |
Ao enivar para a Sefaz eu recebo: |
preste atencao aos comentários no código |
Legal, eu estou faz algum tempo tentando realizar a assinatura! |
eu passei mais de mês até descobrir o porque, que no caso é esse código que mandei |
Como você faz a manipulação do xml? |
utilizando o etree, aqui está meu import import (
"comps/utils"
"crypto"
"crypto/tls"
"encoding/xml"
"fmt"
"net/http"
"strings"
"time"
"github.com/beevik/etree"
dsig "github.com/russellhaering/goxmldsig"
) |
essas alterações estão no seu Fork? |
nao, eu nao dei seguimento ao projeto, essas alteracoes fazem parte do projeto erp que eu desenvolvi, eu copiei do código aqui essa parte de assinatura, eu nao alterei o projeto de assinatura, na verdade vou ate excluir esse fork pq acabei nao utilizando ele |
então vc não efetuou alterações na Lib |
Obrigado pela resposta, precisando estou a disposição! |
na variavel doc você carrega o arquivo xml? |
sim, esqueci de colocar essa parte, carrego o xml na variavel doc doc := etree.NewDocument()
err = doc.ReadFromString(xml)
if err != nil {
return
} |
@rodrigorodriguescosta A tag para assinatura você passa a infNFe ? ou a NFe? |
eu passo a |
Olá, de uma olhada no seu código e não vi se tinha como assinar um XML usando o certificado, vi que vc ler o certificado, tem alguma função para assinatura do XML?
The text was updated successfully, but these errors were encountered: