nfephp-org/sped-nfe

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.

O problema que estou tendo é o seguinte:

No retorno está vindo com este caracter estranho na palavra "assíncrona" aí o método "Stardardize->toStd()" falha ao ler a XML da resposta: "O argumento passado não é um XML válido."

sped

Alguém pode me dar uma luz? Obrigado.

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);