# -*- coding: utf-8 -*- # © 2016 Danimar Ribeiro, Trustcode # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from uuid import uuid4 from pytrustnfe.client import HttpClient from pytrustnfe.certificado import save_cert_key, extract_cert_and_key_from_pfx from ..xml import sanitize_response common_namespaces = {'soap': 'http://www.w3.org/2003/05/soap-envelope'} soap_body_path = './soap:Envelope/soap:Body' soap_fault_path = './soap:Envelope/soap:Body/soap:Fault' def _soap_xml(body): xml = '' xml += '' xml += '' xml += '433.10' xml += '' xml += body xml += '' return xml.rstrip('\n') def executar_consulta(certificado, url, cabecalho, xmlEnviar): cert, key = extract_cert_and_key_from_pfx(certificado.pfx, certificado.password) cert_path, key_path = save_cert_key(cert, key) url = 'https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx' web_service = 'NfeAutorizacao/nfeAutorizacaoLote' client = HttpClient(url, cert_path, key_path) xmlEnviar = xmlEnviar.replace('', '') xml_enviar = _soap_xml(xmlEnviar) xml_retorno = client.post_soap(xml_enviar, web_service) return sanitize_response(xml_retorno) class Comunicacao(object): url = '' web_service = '' metodo = '' tag_retorno = '' def __init__(self, cert, key): self.cert = cert self.key = key def _preparar_temp_pem(self): cert_path = '/tmp/' + uuid4().hex key_path = '/tmp/' + uuid4().hex arq_temp = open(cert_path, 'w') arq_temp.write(self.cert) arq_temp.close() arq_temp = open(key_path, 'w') arq_temp.write(self.key) arq_temp.close() return cert_path, key_path def _validar_dados(self): assert self.url != '', "Url servidor não configurada" assert self.metodo != '', "Método não configurado" def _executar_consulta(self, xmlEnviar): cert_path, key_path = self._preparar_temp_pem() client = HttpClient(self.url, cert_path, key_path) soap_xml = self._soap_xml(xmlEnviar) xml_retorno = client.post_xml(self.web_service, soap_xml) return sanitize_response(xml_retorno)