Consulta cadastro (sefazCadastro) - xmlParseEntityRef: no name in Entity

149 views
Skip to first unread message

Guilherme Calabria Filho

unread,
Apr 8, 2015, 5:19:36 PM4/8/15
to nfe...@googlegroups.com
Olá,
  
    Ao realizar consulta de cadastro nos Sefaz, quando o nome do cliente possui &, causa o  erro:
<b>Warning</b>:  DOMDocument::loadXML(): xmlParseEntityRef: no name in Entity, line: 1 in libs/NFe/ReturnNFe.php</b> on line <b>32

    Alguma indicação para evitarmos esse erro? 
Abraços,
Guilherme

Guilherme Calabria Filho

unread,
Apr 8, 2015, 8:30:38 PM4/8/15
to nfe...@googlegroups.com
Por enquanto eu deixei dessa forma:

$xmlResp = str_replace('&','&amp;',$xmlResp);

E oo método  zReadConsultaCadastro2 alterei como abaixo. Estava tendo erro no endereço pois o estado do Paraná não retorna o endereço e dava erro no $ender;


protected static function zReadConsultaCadastro2($dom)
    {
        $aResposta = array(
            'bStat' => false,
            'version' => '',
            'cStat' => '',
            'verAplic' => '',
            'xMotivo' => '',
            'UF' => '',
            'IE' => '',
            'CNPJ' => '',
            'CPF' => '',
            'dhCons' => '',
            'cUF' => '',
            'aCad' => array()
        );
        $tag = $dom->getElementsByTagName('retConsCad')->item(0);
        if (! isset($tag)) {
            return $aResposta;
        }
        $infCons = $tag->getElementsByTagName('infCons')->item(0);
        $iest = !empty($infCons->getElementsByTagName('IE')->item(0)->nodeValue) ?
                $infCons->getElementsByTagName('IE')->item(0)->nodeValue : '';
        $cnpj = !empty($infCons->getElementsByTagName('CNPJ')->item(0)->nodeValue) ?
                $infCons->getElementsByTagName('CNPJ')->item(0)->nodeValue : '';
        $cpf =  !empty($infCons->getElementsByTagName('CPF')->item(0)->nodeValue) ?
                $infCons->getElementsByTagName('CPF')->item(0)->nodeValue : '';
        $aResposta = array(
            'bStat' => true,
            'version' => $tag->getAttribute('versao'),
            'cStat' => $infCons->getElementsByTagName('cStat')->item(0)->nodeValue,
            'verAplic' => $infCons->getElementsByTagName('verAplic')->item(0)->nodeValue,
            'xMotivo' => $infCons->getElementsByTagName('xMotivo')->item(0)->nodeValue,
            'UF' => $infCons->getElementsByTagName('UF')->item(0)->nodeValue,
            'IE' => $iest,
            'CNPJ' => $cnpj,
            'CPF' => $cpf,
            'dhCons' => $infCons->getElementsByTagName('dhCons')->item(0)->nodeValue,
            'cUF' => $infCons->getElementsByTagName('cUF')->item(0)->nodeValue,
            'aCad' => array()
        );
        $aCad = array();
        $infCad = $tag->getElementsByTagName('infCad');
        if (! isset($infCad)) {
            return $aResposta;
        }
        foreach ($infCad as $cad) {
            $ender = $cad->getElementsByTagName('ender')->item(0);
            $aCad[] = array(
                'IE' => $cad->getElementsByTagName('IE')->item(0)->nodeValue,
                'CNPJ' => $cad->getElementsByTagName('CNPJ')->item(0)->nodeValue,
                'UF' => $cad->getElementsByTagName('UF')->item(0)->nodeValue,
                'cSit' => $cad->getElementsByTagName('cSit')->item(0)->nodeValue,
                'indCredNFe' => $cad->getElementsByTagName('indCredNFe')->item(0)->nodeValue,
                'indCredCTe' => $cad->getElementsByTagName('indCredCTe')->item(0)->nodeValue,
                'xNome' => $cad->getElementsByTagName('xNome')->item(0)->nodeValue,
                'xFant' => !empty($cad->getElementsByTagName('xFant')->item(0)->nodeValue) ? $cad->getElementsByTagName('xFant')->item(0)->nodeValue:'',
                'xRegApur' => $cad->getElementsByTagName('xRegApur')->item(0)->nodeValue,
                'CNAE' => $cad->getElementsByTagName('CNAE')->item(0)->nodeValue,
                'dIniAtiv' => $cad->getElementsByTagName('dIniAtiv')->item(0)->nodeValue,
                'dUltSit' => $cad->getElementsByTagName('dUltSit')->item(0)->nodeValue);
             if ($ender)
             {
                $aCad['xLgr'] = !empty($ender->getElementsByTagName('xLgr')->item(0)->nodeValue) ? $ender->getElementsByTagName('xLgr')->item(0)->nodeValue : '';
                $aCad['nro'] = !empty($ender->getElementsByTagName('nro')->item(0)->nodeValue) ? $ender->getElementsByTagName('nro')->item(0)->nodeValue : '';
                $aCad['xCpl'] = !empty($ender->getElementsByTagName('xCpl')->item(0)->nodeValue) ? $ender->getElementsByTagName('xCpl')->item(0)->nodeValue: '';
                $aCad['xBairro'] = !empty($ender->getElementsByTagName('xBairro')->item(0)->nodeValue) ? $ender->getElementsByTagName('xBairro')->item(0)->nodeValue: '';
                $aCad['cMun'] = !empty($ender->getElementsByTagName('cMun')->item(0)->nodeValue) ? $ender->getElementsByTagName('cMun')->item(0)->nodeValue: '';
                $aCad['xMun'] = !empty($ender->getElementsByTagName('xMun')->item(0)->nodeValue) ? $ender->getElementsByTagName('xMun')->item(0)->nodeValue: '';
                $aCad['CEP'] = !empty($ender->getElementsByTagName('CEP')->item(0)->nodeValue) ? $ender->getElementsByTagName('CEP')->item(0)->nodeValue : '';
            }
        }
        $aResposta['aCad'] = $aCad;
        return $aResposta;

Roberto Machado

unread,
Apr 9, 2015, 10:44:17 AM4/9/15
to nfe...@googlegroups.com
Já alterei veja como está

Roberto

Guilherme Calabria Filho

unread,
Apr 9, 2015, 5:18:11 PM4/9/15
to nfe...@googlegroups.com
Roberto, boa tarde.
   
     O nome fantasia e o endereço foi resolvido. 
     Porém quando o nome do cliente possui & dá erro na leitura.
     Você pode utilizar o cnpj 73645103000182 (Paraná) para fazer esse teste. Eu tive que acrescentar a linha (34):
$xmlString = str_replace('&','&amp;',$xmlString);
No Common/Dom/Dom.php

     Para não ocorrer o erro na leitura.
     É estranho que ele retorna um Warning e não um Exception que você colocou.
     Porém acredito que esse XML deve ser lido de alguma forma já que muitas empresas possuem & no fantasia ou razão social.

Abraços,
Guilherme Filho

Em quarta-feira, 8 de abril de 2015 18:19:36 UTC-3, Guilherme Calabria Filho escreveu:

Roberto Machado

unread,
Apr 10, 2015, 8:17:16 AM4/10/15
to nfe...@googlegroups.com
Conforme o manual deles mesmos

5.3 Tratamento de Caracteres Especiais no Texto de XML
Todos os textos de um documento XML passam por uma análise do “parser” específico da
linguagem. Alguns caracteres afetam o funcionamento deste “parser”, não podendo
aparecer no texto de uma forma não controlada.
Os caracteres que afetam o “parser” são:
> (sinal de maior),
< (sinal de menor),
& (e-comercial),
“ (aspas),
‘ (sinal de apóstrofe).
Alguns destes caracteres podem aparecer especialmente no campo de Razão Social,
Endereço e Informação Adicional. Para resolver esses casos, é recomendável o uso de uma
seqüência de “escape” em substituição ao caractere que causa o problema.

Isso foi tirado do manual.
No nosso caso como só temos o xml já montado, e para desmonta-lo é necessário p parser (DOM) o único caracter que podemo trocar é o & mas mesmo assim com um certo cuidado. Pois outros SEFAZ podem estar fazendo corretamente a transformação e nesse caso existirão "&amp;" ou "&quot;" ... etc. 

Para isso vamos trocar o & seguido de um espaço em branco por "&amp;" 

Estou corrigindo

Roberto Machado

unread,
Apr 10, 2015, 8:22:05 AM4/10/15
to nfe...@googlegroups.com
Guilherme me passe o CNPJ desse que tem o & comercial

--
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+un...@googlegroups.com
Link: http://groups.google.com.br/group/nfephp?hl=pt-BR
-------
Repositório: https://github.com/nfephp-org/nfephp
---
Você recebeu essa mensagem porque está inscrito no grupo "NFePHP" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nfephp+un...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Roberto
Nisi utile est quod facimus stulta est gloriae (Julius Phaedous)

Roberto Machado

unread,
Apr 10, 2015, 8:29:05 AM4/10/15
to nfe...@googlegroups.com
Achei o problema está na classe CurlSoap ela está fazendo essa conversão ... burrice 

Roberto

Roberto Machado

unread,
Apr 10, 2015, 8:29:19 AM4/10/15
to nfe...@googlegroups.com
Já verifiquei !  realmente o & comercial causa um erro de formatação do XML é um erro que a SEFAZ do Paraná está criando.

Eles não estão observando seu próprio manual que manda trocar os caracteres especiais quando montar o xml.
Vou ver se encontro alguma alternativa, ou se teremos mesmo que adotar a solução mais "RUDE" mesmo.
Porém podem haver outros casos em que isso possa ocorrer se tratarmos apenas o & comercial.

Roberto

Roberto Machado

unread,
Apr 10, 2015, 8:50:44 AM4/10/15
to nfe...@googlegroups.com
Já foi corrigido Guilherme. Atualize

Roberto

Guilherme Calabria Filho

unread,
Apr 10, 2015, 10:33:22 AM4/10/15
to NFePHP
Roberto, bom  dia.
     
    Realizei a atualização por favor confira a linha 146
$aProt[] = self::zGetProt($tag);
    Deve ser alterada para 
$aProt[] = self::zGetProt($dom,$tag);
  
   Vou verificar o retorno com &.
Abraços!

Em 10 de abril de 2015 09:50, Roberto Machado <linu...@gmail.com> escreveu:
Já foi corrigido Guilherme. Atualize

Roberto

--

Guilherme Calabria Filho

unread,
Apr 10, 2015, 10:34:19 AM4/10/15
to NFePHP
Linha 146 do arquivo ReturnNFe.php

Roberto Machado

unread,
Apr 10, 2015, 10:40:13 AM4/10/15
to nfe...@googlegroups.com
FEITO


Guilherme Calabria Filho

unread,
Apr 10, 2015, 10:49:07 AM4/10/15
to NFePHP
Roberto,

    Testes realizados com sucesso! 
    Nenhum erro encontrado!

Abraços!

Em 10 de abril de 2015 11:40, Roberto Machado <linu...@gmail.com> escreveu:
FEITO


Roberto Machado

unread,
Apr 10, 2015, 10:50:22 AM4/10/15
to nfe...@googlegroups.com
É a primeira vez que alguém me ajuda com os testes .... VALEU

Roberto

Guilherme Calabria Filho

unread,
Apr 10, 2015, 12:43:30 PM4/10/15
to NFePHP
Que isso! 
Fico feliz de poder ajudar. Você e a nfephp já me ajudaram muito!!

Em 10 de abril de 2015 11:50, Roberto Machado <linu...@gmail.com> escreveu:
É a primeira vez que alguém me ajuda com os testes .... VALEU

Roberto

Reply all
Reply to author
Forward
0 new messages