signNFe(string $xml) mesmo com xml invalido com base no schema, nao retorna exceção
GlauberF opened this issue · 3 comments
- Estou enviando um ...
- bug
- requisição de funcionalidade
- requisição de suporte => Por favor, não envie solicitação de suporte aqui, veja a nota no topo deste modelo.
Comportamento esperado
Utilizar o signNFe
para assinar o XML e na assinatura, já faz a validação do XML com base no schema.
Comportamento Atual
Estou chamando signNFe($xml)
porem mesmo que o xml não seja válido não retorna um exceção.
Descrição detalhada
Dentro do método signNFe
tem $this->isValid($this->versao, $signed, 'nfe');
e conforme o descritivo da biblioteca.
//exception will be throw if NFe is not valid
Ou seja o xml não é valido, entao teria que ter gerado uma exceção
pois o mesmo xml que ali passa sem exceção, no validator https://www.sefaz.rs.gov.br/nfe/nfe-val.aspx
recebo o erro de schema.
Em resumo pelo que vejo a função signNFe(string $xml)
mesmo com xml inválido com base no schema, nao retorna exceção.
acaba retornando sempre o $signed
fazendo com que o processo de emissão siga e estore erro mais para frente de forma generica
o xml em questão que nao gerou exceção em signNFe (https://gist.github.com/GlauberF/47769cac47586ed6251111574e38dc1b), porem gerou/mostrou o erro de forma correta aqui https://www.sefaz.rs.gov.br/nfe/nfe-val.aspx
Não sei como você está usando esses métodos para poder lhe dar uma resposta.
Provavelmente não localizou o xsd e nesse caso retorna TRUE na validação !
Meu processo de emissão utilizando essa forma, ja faço uso a um bom tempo, porem depois das ultimas atualizações começou esse comportamento para min.
Mas em resumo o que eu faço é, na minha função que monto o xml e transmito, chamo o signNFe($xml).
Passos:
1 -> monto o xml($xml)
2 -> xml montado, assino com signNFe passando para ela o xml montado acima $xml_assinado = signNFe($xml);
.
3 -> segue o fluxo de transmitir com o $xml_assinado
No passo 2, quando eu chamo e passo o xml, no passado acusava erro no schema e parava por ali o processo.
E como o metodo signNFe
é da biblioteca e ele chama $this->isValid($this->versao, $signed, 'nfe');
, não passo o caminho do xsd.
Meu amigo, eu testei aqui na minha maquina fazendo o xCpl exceder o limite de 60 caracteres e isso foi detectado e disparada a exception.
Não é um problema no código mas alguma coisa ai na sua maquina !!! ou na forma que está usando os recursos.