Class: Nfcom::Utils::ResponseDecompressor
- Inherits:
-
Object
- Object
- Nfcom::Utils::ResponseDecompressor
- Defined in:
- lib/nfcom/utils/response_decompressor.rb
Overview
Descompressor de respostas da SEFAZ
Processa respostas SOAP da SEFAZ, extraindo e descompactando o XML de resposta quando necessário.
Class Method Summary collapse
-
.extract_and_decompress(soap_response) ⇒ Nokogiri::XML::Document
Extrai e descompacta resposta da SEFAZ.
Class Method Details
.extract_and_decompress(soap_response) ⇒ Nokogiri::XML::Document
Extrai e descompacta resposta da SEFAZ
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/nfcom/utils/response_decompressor.rb', line 17 def self.extract_and_decompress(soap_response) doc = soap_response.dup doc.remove_namespaces! # Verificar se tem Fault if (fault = doc.at_xpath('//Fault')) error_msg = fault.at_xpath('.//Text')&.text || 'Erro desconhecido' raise Errors::SefazError, "Erro SOAP: #{error_msg}" end # Extrair nfcomResultMsg result_msg_node = doc.at_xpath('//nfcomResultMsg') raise Errors::SefazError, 'Resposta SOAP não contém nfcomResultMsg' unless result_msg_node # Verificar se tem retNFCom direto (resposta não comprimida - geralmente erros) ret_nfcom_direto = result_msg_node.at_xpath('.//retNFCom') xml_descomprimido = if ret_nfcom_direto # Resposta NÃO está comprimida (erro de processamento) result_msg_node.to_xml else # Resposta está comprimida (normal) base64_comprimido = result_msg_node.text.strip Compressor.ungzip_base64(base64_comprimido) end Nokogiri::XML(xml_descomprimido) end |