-
Notifications
You must be signed in to change notification settings - Fork 214
Description
Agora em goias existe novas urls para QrCode e Url Chave
Resolvi deixando assim no meu pynfe/processamento/serializacao.py
`
class SerializacaoQrcode(object):
"""Classe que gera e serializa o qrcode de NFC-e no xml"""
def gerar_qrcode(self, token, csc, xml, return_qr=False, online=True):
"""Classe para gerar url do qrcode da NFC-e"""
# Procura atributos no xml
ns = {"ns": NAMESPACE_NFE}
sig = {"sig": NAMESPACE_SIG}
# Tag Raiz NFe Ex: <NFe>
nfe = xml
chave = nfe[0].attrib["Id"].replace("NFe", "")
data = nfe.xpath("ns:infNFe/ns:ide/ns:dhEmi/text()", namespaces=ns)[0].encode()
tpamb = nfe.xpath("ns:infNFe/ns:ide/ns:tpAmb/text()", namespaces=ns)[0]
cuf = nfe.xpath("ns:infNFe/ns:ide/ns:cUF/text()", namespaces=ns)[0]
uf = [key for key, value in CODIGOS_ESTADOS.items() if value == cuf][0].upper()
# tenta encontrar a tag cpf
try:
cpf = nfe.xpath("ns:infNFe/ns:dest/ns:CPF/text()", namespaces=ns)[0]
except IndexError:
# em caso de erro tenta procurar a tag cnpj
try:
cpf = nfe.xpath("ns:infNFe/ns:dest/ns:CNPJ/text()", namespaces=ns)[0]
except IndexError:
cpf = None # noqa: F841
total = nfe.xpath("ns:infNFe/ns:total/ns:ICMSTot/ns:vNF/text()", namespaces=ns)[0]
# icms = nfe.xpath('ns:infNFe/ns:total/ns:ICMSTot/ns:vICMS/text()', namespaces=ns)[0]
digest = nfe.xpath(
"sig:Signature/sig:SignedInfo/sig:Reference/sig:DigestValue/text()",
namespaces=sig,
)[0].encode()
lista_dia = re.findall(r"-\d{2}", str(data))
dia = str(lista_dia[1])
dia = dia[1:]
replacements = {"0": ""}
token = re.sub("([0])", lambda m: replacements[m.group()], token)
# VERSAO_QRCODE =2
if online:
# versão online
url = "{}|{}|{}|{}".format(chave, VERSAO_QRCODE, tpamb, token)
else:
# versão offline
digest = digest.hex()
url = "{}|{}|{}|{}|{}|{}|{}".format(
chave, VERSAO_QRCODE, tpamb, dia, total, digest, token
)
url_complementar = url + csc
url_hash = hashlib.sha1(url_complementar.encode()).digest()
url_hash = base64.b16encode(url_hash).decode()
url = "p={}|{}".format(url, url_hash)
# url_chave -Texto com a URL de consulta por chave de acesso a ser impressa no DANFE NFC-e.
# Informar a URL da “Consulta por chave de acesso da NFC-e”.
# A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso
lista_uf_padrao = ["PR", "CE", "RS", "RJ", "RO", "DF"]
if uf in lista_uf_padrao:
qrcode = NFCE[uf]["QR"] + url
url_chave = NFCE[uf]["URL"]
elif uf == "SP":
if tpamb == "1":
qrcode = NFCE[uf]["HTTPS"] + "www." + NFCE[uf]["QR"] + url
url_chave = NFCE[uf]["HTTPS"] + "www." + NFCE[uf]["URL"]
else:
qrcode = NFCE[uf]["HTTPS"] + "www.homologacao." + NFCE[uf]["QR"] + url
url_chave = NFCE[uf]["HTTPS"] + "www.homologacao." + NFCE[uf]["URL"]
# BA tem comportamento distindo para qrcode e url
elif uf == "BA":
if tpamb == "1":
qrcode = NFCE[uf]["HTTPS"] + NFCE[uf]["QR"] + url
else:
qrcode = NFCE[uf]["HOMOLOGACAO"] + NFCE[uf]["QR"] + url
url_chave = url_chave = NFCE[uf]["URL"]
# MG tem comportamento distindos qrcode e url
elif uf == "MG":
qrcode = NFCE[uf]["QR"] + url
if tpamb == "1":
url_chave = NFCE[uf]["HTTPS"] + NFCE[uf]["URL"]
else:
url_chave = NFCE[uf]["HOMOLOGACAO"] + NFCE[uf]["URL"]
elif uf == "GO": #Nova regra para goias
qrcode = "https://nfeweb." + NFCE[uf]["QR"] + url
url_chave = "http://www." + NFCE[uf]["URL"]
# AC, AM, RR, PA,
else:
if tpamb == "1":
qrcode = NFCE[uf]["HTTPS"] + NFCE[uf]["QR"] + url
url_chave = NFCE[uf]["HTTPS"] + NFCE[uf]["URL"]
else:
qrcode = NFCE[uf]["HOMOLOGACAO"] + NFCE[uf]["QR"] + url
url_chave = NFCE[uf]["HOMOLOGACAO"] + NFCE[uf]["URL"]
# adicionta tag infNFeSupl com qrcode
info = etree.Element("infNFeSupl")
if uf == "GO": #Nova regra para goias
etree.SubElement(info, "qrCode").text = qrcode.strip()
else:
etree.SubElement(info, "qrCode").text = etree.CDATA(qrcode.strip())
etree.SubElement(info, "urlChave").text = url_chave
nfe.insert(1, info)
# retorna nfe com o qrcode incluido NT2015/002 e qrcode
if return_qr:
return nfe, qrcode.strip()
# retorna apenas nfe com o qrcode incluido NT2015/002
else:
return nfe
`
e assim no meu pynfe/utils/webservices.py
"GO": { "STATUS": "sefaz.go.gov.br/nfe/services/NFeStatusServico4?wsdl", "AUTORIZACAO": "sefaz.go.gov.br/nfe/services/NFeAutorizacao4?wsdl", "RECIBO": "sefaz.go.gov.br/nfe/services/NFeRetAutorizacao4?wsdl", "CHAVE": "sefaz.go.gov.br/nfe/services/NFeConsultaProtocolo4?wsdl", "INUTILIZACAO": "sefaz.go.gov.br/nfe/services/NFeInutilizacao4?wsdl", "EVENTOS": "sefaz.go.gov.br/nfe/services/NFeRecepcaoEvento4?wsdl", "QR": "sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe?", "CADASTRO": "sefaz.go.gov.br/nfe/services/CadConsultaCadastro4?wsdl", "HTTPS": "https://nfe.", "HOMOLOGACAO": "https://homolog.", "URL": "sefaz.go.gov.br/nfce/consulta", }