Closed Cassiano86 closed 5 years ago
Boa tarde!
Depois de enviar para a SEFAZ, provavelmente você está alterando o XML, o que não é permitido e causa a diferença entre digestValue e digVal.
Para dúvidas utilize o https://groups.google.com/forum/#!forum/nfephp.
------ Mensagem original ------ De: "cassiano86" notifications@github.com<mailto:notifications@github.com> Para: "nfephp-org/sped-nfe" sped-nfe@noreply.github.com<mailto:sped-nfe@noreply.github.com> Cc: "Subscribed" subscribed@noreply.github.com<mailto:subscribed@noreply.github.com> Enviado(s): 25/06/2019 14:52:14 Assunto: [nfephp-org/sped-nfe] Os documentos se referem a diferentes objetos. Os digest são diferentes. (#686)
Olá, gostaria primeiramente de parabenizar o projeto do sped-nfe, estou trabalhando em uma empresa e fiquei responsável pela implementação da nota fiscal, li várias etapas da documentação e cheguei (acredito eu) a 5° etapa para a emissão da NFe, que no caso se resume ao protocolo.
Já gostaria de adiantar as etapas que obtive sucesso que foram:
Porém não consigo obter sucesso com a protocolagem, estou utilizando o Complements::toAuthorize($xml_assinado, $recibo). Eu procurei bastante conteúdo que me desse suporte neste erro, porém não encontrei nada satisfatório.
Os digestValue e digVal retornam valores diferentes e eu não entendo porque, se puderem me ajudar agradeceria muito pelo tempo que estão disponibilizando para mim.
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHubhttps://github.com/nfephp-org/sped-nfe/issues/686?email_source=notifications&email_token=AD3IAGZ7TWGPGUUZOIC7I6TP4JLM5A5CNFSM4H3KYUVKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4G3TSQIQ, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AD3IAG6ZF2YM7N252ZQM4C3P4JLM5ANCNFSM4H3KYUVA.
rabraga, muito obrigado pela atenção, estou trabalhando com o Laravel, esse framework é 100% MVC, agora que você tocou neste ponto eu creio que esse possa ser o problema, quando você diz em enviar seria o recibo ou o XML assinado?
Agradeço desde já.
você envia o XML assinado e a SEFAZ autoriza. Depois vc altera esse XML e tenta protocolar. Aí dá erro "Os digest são diferentes"
Entendo, vou trabalhar nesta etapa, obrigado pela ajuda.
rabraga, eu fiz o procedimento usando o mesmo XML assinado pela SEFAZ e o erro persiste, vou te enviar o código sem os campos de montagem do XML porque não vejo necessidade.
public function geraNFe(){ /Depois de montar todas as tags com stdClass/
if($nfe->montaNFe()) {
/*Gerando o arquivo XML*/
$xml = $nfe->getXML();
/*Gerando a assinatura*/
$certificadoDigital=file_get_contents("C:/xampp/htdocs/ERP_REMAN_teste/vendor/nfephp-org/223PRONTAXINDUSTRIAECOMERCIO28062019.pfx");
$this->tools=new Tools(json_encode($this->config), Certificate::readPfx($certificadoDigital, "**Ocultei a senha rabraga**"));
try{
$xml_assinado = $this->tools->signNFe($xml);
}catch(Exception $e) {
exit($e->getMessage());
}
/*Gerando o envio do lote*/
try{
$contingency = '{
"motive":"SEFAZ fora do AR",
"timestamp":1484747583,
"type":"SVCAN",
"tpEmis":6
}';
$idLote = str_pad(100, 15, '0', STR_PAD_LEFT);
$indSinc = 0; //usar método assincrono preferencial !! Evite usar não funciona em todos os estados
$compactar = false; //Evite usar não funciona em todos os estados
$retxmls = []; //nessa variável serão retornados os XML já ajustados para mode de contingência
$this->tools->contingency->load($contingency);
/*Nesta etapa o lote está sendo enviado com sucesso, se retornar 103 é porque está tudo ok*/
$resp = $this->tools->sefazEnviaLote([$xml_assinado],$idLote, $indSinc, $compactar, $retxmls);
$st = new Standardize();
$std = $st->toStd($resp);
if ($std->cStat != 103) {
//erro registrar e voltar
return "[$std->cStat] $std->xMotivo";
}
$recibo = $std->infRec->nRec;
}catch(Exception $e){
echo str_replace("\n", "<br/>", $e->getMessage());
}//esse recibo deve ser guardado para a próxima operação que é a consulta do recibo
//NOTA: se o xml foi enviado em contingência a consulta do recibo também deverá ser feita nesse mesmo modo.
/*Consultando o recibo*/
$protocolo = $this->tools->sefazConsultaRecibo($recibo);
/*Protocolando a nota*/
$request = $xml_assinado;
$response = $protocolo;
try{
$protocol = new Complements();
$xml = $protocol->toAuthorize($request, $response);
header('Content-type: text/xml; charset=UTF-8');
return $xml;
/*file_put_contents('nota.xml',$xmlProtocolado);*/
}catch(Exception $e) {
echo "Erro: " . $e->getMessage();
}
} else {
throw new Exception("ERRO AO GERAR NFE");
}
}
Com o retorno do protocolo eu passo para o Controller do Laravel desta forma bem simples.
$nfe_service = new NFEService([ "atualizacao"=>"2015-10-02 06:01:21", "tpAmb"=>2, "razaosocial"=>"PRONTAX INDUSTRIA E COMERCIO LTDA-ME", "siglaUF"=>"SP","cnpj"=>"27401351000160", "schemes"=>"PL_009_V4", "versao"=>"4.00", "tokenIBPT"=>"AAAAAAA", "CSC"=>"GPB0JBWLUR6HWFTVEAS6RJ69GPCROFPBBB8G", "CSCid"=>"000002"]);
header('Content-Type: application/xml; charset=utf-8');
//Gera o XML
$xml=$nfe_service->geraNFe();
echo $xml;
Agradeço a sua ajuda como sempre.
Erro sanado, estou encerrando o tópico.
@cassiano86 como você resolveu o problema?
o xml depois de assinado não pode mais ser alterado. O protocolo tem que ser adicionado nele usando a classe complements
Estou passando pelo mesmo problema, o que difere é que o erro não é constante. Às vezes consigo emitir a nota, outras vezes é apresentado o erro "Os documentos se referem a diferentes objetos. Os digest são diferentes.".
Não estou alterando o XML depois de assinado. Para exemplificar, deixo abaixo o trecho do meu código onde o erro acontece (mas nem sempre)
try {
$this->obterDadosNotaFiscal();
$xml = $this->nfe->monta();
$erros = $this->nfe->getErrors();
if (count($erros) > 0) {
throw new Exception(implode("@*@", $erros));
}
$config = $this->obterConfiguracao();
$certificadoDigital = file_get_contents($this->emitente->certificado);
$tools = new Tools($config, Certificate::readPfx($certificadoDigital, $this->emitente->senhacertificado));
$xmlAssinado = $tools->signNFe($xml);
$idLote = str_pad($this->dadosNotaFiscal->id, 15, '0', STR_PAD_LEFT);
$resp = $tools->sefazEnviaLote([$xmlAssinado], $idLote);
$st = new Standardize();
$std = $st->toStd($resp);
if ($std->cStat != 103) {
return "[$std->cStat] $std->xMotivo";
}
$recibo = $std->infRec->nRec;
$protocolo = $tools->seFazConsultaRecibo($recibo);
$xmlProtocolado = Complements::toAuthorize($xmlAssinado, $protocolo);
$this->salvarXml($xmlProtocolado);
}
Alguma ideia do que pode estar acontecendo?
Olá Thiago, desculpe pela demora em lhe responder, O SEFAZ do Rio Grande do Sul tem um validador de XML para nota fiscal, esse erro que acontecia era algo genérico, no meu caso as vezes era relacionado aos dados do cliente e outras pela assinatura digital ou a validade do certificado digital. Vou lhe deixar o endereço do validador e meu contato caso precise, é importante fazer uma varredura na função MontaNFE(), ela ajuda bastante em alguns casos.
Validador : https://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx
Meu Contato : (12) 99139-4899
De: Thiago Lima notifications@github.com Enviado: segunda-feira, 3 de agosto de 2020 21:51 Para: nfephp-org/sped-nfe sped-nfe@noreply.github.com Cc: cassiano86 cassiano_tst@hotmail.com; Mention mention@noreply.github.com Assunto: Re: [nfephp-org/sped-nfe] Os documentos se referem a diferentes objetos. Os digest são diferentes. (#686)
Estou passando pelo mesmo problema, o que difere é que o erro não é constante. Às vezes consigo emitir a nota, outras vezes é apresentado o erro "Os documentos se referem a diferentes objetos. Os digest são diferentes.".
Não estou alterando o XML depois de assinado. Para exemplificar, deixo abaixo o trecho do meu código onde o erro acontece (mas nem sempre)
try {
$this->obterDadosNotaFiscal();
$xml = $this->nfe->monta();
$erros = $this->nfe->getErrors();
if (count($erros) > 0) {
throw new Exception(implode("@*@", $erros));
}
$config = $this->obterConfiguracao();
$certificadoDigital = file_get_contents($this->emitente->certificado);
$tools = new Tools($config, Certificate::readPfx($certificadoDigital, $this->emitente->senhacertificado));
$xmlAssinado = $tools->signNFe($xml);
$idLote = str_pad($this->dadosNotaFiscal->id, 15, '0', STR_PAD_LEFT);
$resp = $tools->sefazEnviaLote([$xmlAssinado], $idLote);
$st = new Standardize();
$std = $st->toStd($resp);
if ($std->cStat != 103) {
return "[$std->cStat] $std->xMotivo";
}
$recibo = $std->infRec->nRec;
$protocolo = $tools->seFazConsultaRecibo($recibo);
$xmlProtocolado = Complements::toAuthorize($xmlAssinado, $protocolo);
$this->salvarXml($xmlProtocolado);
}
Alguma ideia do que pode estar acontecendo?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/nfephp-org/sped-nfe/issues/686#issuecomment-668295364, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AFJXYU65QLZBM6GNIDOFCVDR65EOTANCNFSM4H3KYUVA.
Obrigado pelo retorno @cassiano86!
Não acho que o erro esteja relacionado aos dados do cliente ou certificado, por que como eu disse, o erro acontece esporadicamente. Por exemplo, as vezes tento emitir uma nota para um cliente, ocorre o erro uma, duas ou até mais vezes consecutivas, e sem alterar dado nenhum, após nova tentativa a nota é emitida. Tem casos também em que a nota é emitida de primeira.
Vou debugar o método mencionado pra vê se encontro alguma coisa que esteja ocasionando esse erro, qualquer descoberta eu documentado aqui. Obrigado mais uma vez pelo feedback e disposição.
Se quiser eu posso enviar meu código, as notas estão sendo geradas de primeira e só acontece erros mais grotescos quando falta informação dos clientes.
Qualquer outro erro que ela possa gerar eu pego as exceções e gero arquivos para saber qual é o erro encontrado, a dica que eu te dei sobre o validador do Rio Grande do Sul é uma boa alternativa para saber desses erros primários que estão acontecendo em sua emissão.
O meu código está em laravel e estou tentando melhora-lo cada dia mais, não sei se vai conseguir entender, não que eu esteja duvidando de sua capacidade, longe disso, é que ele está meio complicado mesmo.
De: Thiago Lima notifications@github.com Enviado: sexta-feira, 4 de setembro de 2020 11:27 Para: nfephp-org/sped-nfe sped-nfe@noreply.github.com Cc: cassiano86 cassiano_tst@hotmail.com; Mention mention@noreply.github.com Assunto: Re: [nfephp-org/sped-nfe] Os documentos se referem a diferentes objetos. Os digest são diferentes. (#686)
Obrigado pelo retorno @cassiano86https://github.com/cassiano86!
Não acho que o erro esteja relacionado aos dados do cliente ou certificado, por que como eu disse, o erro acontece esporadicamente. Por exemplo, as vezes tento emitir uma nota para um cliente, ocorre o erro uma, duas ou até mais vezes consecutivas, e sem alterar dado nenhum, após nova tentativa a nota é emitida. Tem casos também em que a nota é emitida de primeira.
Vou debugar o método mencionado pra vê se encontro alguma coisa que esteja ocasionando esse erro, qualquer descoberta eu documentado aqui. Obrigado mais uma vez pelo feedback e disposição.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/nfephp-org/sped-nfe/issues/686#issuecomment-687144910, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AFJXYU4VCFOTIVEYL7ACO5DSEDTNHANCNFSM4H3KYUVA.
Imagina @cassiano86, entendi perfeitamente a sua colocação, e sim, adoraria receber o seu código para análise, também estou desenvolvendo a minha aplicação em Laravel. O meu e-mail é thiagohenriqueslima@gmail.com
O validador do RS eu já o conhecia, me ajudou muito no início do desenvolvimento, de fato é uma excelente alternativa para tratar esses erros primários.
Mais uma vez, muito obrigado pela ajuda e por disponibilizar o seu código.
Beleza, estou fazendo melhorias hoje, se tudo der certo até semana que vem eu te envio.
De: Thiago Lima notifications@github.com Enviado: sexta-feira, 4 de setembro de 2020 13:59 Para: nfephp-org/sped-nfe sped-nfe@noreply.github.com Cc: cassiano86 cassiano_tst@hotmail.com; Mention mention@noreply.github.com Assunto: Re: [nfephp-org/sped-nfe] Os documentos se referem a diferentes objetos. Os digest são diferentes. (#686)
Imagina @cassiano86https://github.com/cassiano86, entendi perfeitamente a sua colocação, e sim, adoraria receber o seu código para análise, também estou desenvolvendo a minha aplicação em Laravel. O meu e-mail é thiagohenriqueslima@gmail.commailto:thiagohenriqueslima@gmail.com
O validador do RS eu já o conhecia, me ajudou muito no início do desenvolvimento, de fato é uma excelente alternativa para tratar esses erros primários.
Mais uma vez, muito obrigado pela ajuda e por disponibilizar o seu código.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/nfephp-org/sped-nfe/issues/686#issuecomment-687237992, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AFJXYU6F2Q2AJSLIFGFY67DSEEFEJANCNFSM4H3KYUVA.
Olá amigos olha eu sei que não é a melhor solução mais eu consegui resolver isso da seguinte forma :
try{
$xml = Complements::toAuthorize($xmlAssinado, $protocolo);
$filename = "../".$linha_patch3['caminho']."{$chave}-nfce.xml";
}catch (\Exception $e){
$erro = $e->getMessage();
if($erro == "Os documentos se referem a diferentes objetos. Os digest são diferentes."){
}else{
$_SESSION['msg'] = "
Olá, gostaria primeiramente de parabenizar o projeto do sped-nfe, estou trabalhando em uma empresa e fiquei responsável pela implementação da nota fiscal, li várias etapas da documentação e cheguei (acredito eu) a 5° etapa para a emissão da NFe, que no caso se resume ao protocolo.
Já gostaria de adiantar as etapas que obtive sucesso que foram:
Porém não consigo obter sucesso com a protocolagem, estou utilizando o Complements::toAuthorize($xml_assinado, $recibo). Eu procurei bastante conteúdo que me desse suporte neste erro, porém não encontrei nada satisfatório.
Os digestValue e digVal retornam valores diferentes e eu não entendo porque, se puderem me ajudar agradeceria muito pelo tempo que estão disponibilizando para mim.