452 Rejeicao: Solicitada resposta assincrona para Lote com somente 1 (uma) NFC-e
cleivertonalmeida opened this issue · 9 comments
A desde o dia 11/10 tenho recebido rejeição ao emitir a NFC-e, alguem conseguiria me ajudar?
@cleitonsoares conforme a NT 2020.005 v1.20 (Junho 2021) é uma mudança em emitir NFC-e onde exige que transmissão seja síncrona e a forma de transmissão assíncrona só será permitida quando for transmitida mais de uma NFC-e (em lote).
Em um dos parâmetros do método sefazEnviaLote
da classe Tools
($indSinc
), deve ser passada como 1 (ou TRUE).
Lembre-se que não será mais necessário, neste case, o uso do método sefazConsultaRecibo
.
Claro !
Agora é OBRIGATÓRIO fazer envios SÍNCRONO de NFCe (com uma unica NFCe).
Essa obrigatoriedade está ativa desde 04/10/2021 (mas já deveria estar a mais tempo segundo a Nota Técnica)
Quanto ao carácter estranho isso se deve ao fato da SEFAZ ter colocado um carácter não UTF-8 na mensagem
Esse tipo de erro é comum pois muitas SEFAZ usam "Ruindows" para criar e manter os webservices, ai sai essas cacas
Quanto ao carácter estranho isso se deve ao fato da SEFAZ ter colocado um carácter não UTF-8 na mensagem Esse tipo de erro é comum pois muitas SEFAZ usam "Ruindows" para criar e manter os webservices, ai sai essas cacas
Perfeito eu entendi o problema, mas é que o Validator::isXML(), falha ao ler o arquivo e deste modo não temos o Objeto do retorno do lote.
O problema está na função nativa "simplexml_load_string" que não consegue ler o XML por conta deste caractere!
'Input is not proper UTF-8, indicate encoding !Bytes: 0xC3 0x6E 0x63 0x72'
Bom, achei uma solução paleativa aqui, como sabemos que o retorno é em UTF-8 mas que pode vir com alguns lixos por causa do retorno da SEFAZ, o jeito é forçar uma conversão para eliminar as porcarias. Deste modo é possível transformar o retorno do Lote em um Objeto para consultar o status.
$response = $this->tools->sefazEnviaLote([$signed], $idLote, $indSinc, false, $xml);
// FIX RESPOSTA SEFAZ
$FIX= iconv('UTF-8', 'UTF-8//IGNORE', $response);
// ENVIAR RESPOSTA AJUSTADA
$lote = (new Standardize())->toStd($FIX);
ps1: Erro observado em modo de HOMOLOGAÇÃO na SEFAZ-SP, não sei se o mesmo se repete em ambiente de PRODUÇÃO
ps2: Utilizando a versão mais recente da biblioteca
Agora estou recebendo "[104] Lote processado"
Trecho do codigo aonde esta parando:
$idLote = str_pad(10001, 15, '0', STR_PAD_LEFT); // Identificador do lote
$resp = $tools->sefazEnviaLote([$xmlAssinado], $idLote, 1);
$st = new NFePHP\NFe\Common\Standardize();
$std = $st->toStd($resp);
echo "RESPOSTA DO XML ASSINADO 2: ".$std->cStat,"
";
Quando retorna Lote processado, você deve capturar o nRec e fazer a consulta do recibo, através da função
$this->tools->sefazConsultaRecibo($nRec);