Contingência MG

238 views
Skip to first unread message

Sérgio Santos

unread,
Mar 19, 2018, 8:40:27 AM3/19/18
to NFePHP
Pessoal, estou tentando enviar uma NF em contingência. Está retornando o seguinte erro. Isso significa que até o servidor de contingência está fora do ar ?

Obrigado

An error occurred while trying to
 communication via soap
,  
[https://nfe.fazenda.mg.gov.br/nfe2/services/NFeAutorizacao4]HTTP/1.1
100 Continue

HTTP
/1.1 503 Service Temporarily Unavailable
Date: Mon, 19 Mar 2018 12:38:19 GMT
Server: Apache/2.2.32 (Unix) mod_ssl/2.2.32 OpenSSL/1.0.2k DAV/2
mod_jk
/1.2.41
Content-Length: 323
Connection: close

Roberto Machado

unread,
Mar 19, 2018, 9:20:20 AM3/19/18
to nfe...@googlegroups.com
Sergio !

A contingência é ativada APENAS quando a SEFAZ autorizadora PEDE isso.

Se a SEFAZ MG (ainda) não pediu a contingência não funciona 

Roberto

Sérgio Antônio dos Santos

unread,
Mar 19, 2018, 9:22:35 AM3/19/18
to nfe...@googlegroups.com
Sim Roberto. A Sefaz MG ativou. Veja

Contingência Ativada
MG
De 16/03/2018 12:10:00 até 20/03/2018 12:00:00

http://www.nfe.fazenda.gov.br/portal/principal.aspx



Sérgio Antônio dos Santos
Bacharel em Sistemas de Informação

-----------
“O que vale a pena possuir, vale a pena esperar”.
Santa Teresa Benedita da Cruz (Edith Stein 1891-1945)

--
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+unsubscribe@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 em um tópico no grupo "NFePHP" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/nfephp/mHSse5Cl36M/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para nfephp+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Roberto Machado

unread,
Mar 19, 2018, 9:41:39 AM3/19/18
to nfe...@googlegroups.com
Olha o endereço da sua chamada original NÃO É CONTINGENCIA

Roberto

Sérgio Santos

unread,
Mar 19, 2018, 10:35:09 AM3/19/18
to NFePHP
Roberto. Veja o código que estou usando... Pode ser que tenha que fazer algo ainda que não fiz:

            $contingency = new Contingency();
            $acronym
= "MG";
            $motive
= "SEFAZ MG INSTAVEL.";
            $type
= "SVCAN";
            $status
= $contingency->activate($acronym, $motive, $type);

O erro é o seguinte:

An error occurred while trying to
 communication via soap
, Operation timed out after 40001 milliseconds
with 0 bytes received
[https://nfe.fazenda.mg.gov.br/nfe2/services/NFeAutorizacao4]


Roberto Machado

unread,
Mar 19, 2018, 10:36:55 AM3/19/18
to nfe...@googlegroups.com
E como você está passando a informação de contingência para a classe TOOLS ?

Roberto

Sérgio Santos

unread,
Mar 19, 2018, 10:42:42 AM3/19/18
to NFePHP
Não estou. Não sei como fazer...

seria isso?

$contingencia = $tools->contingency->deactivate();


Roberto Machado

unread,
Mar 19, 2018, 10:45:39 AM3/19/18
to nfe...@googlegroups.com

--
--
Você recebeu esta mensagem porque está inscrito no Grupo "NFePHP".
Para Postar: nfe...@googlegroups.com
Para Sair do Grupo: nfephp+unsubscribe@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+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



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

Sérgio Santos

unread,
Mar 19, 2018, 11:01:06 AM3/19/18
to NFePHP
Roberto, perdão, Li a tools. Li outros posts aqui. E não consegui entender como fazer. Veja o que eu fiz.. mas deve estar errado

<?

//Criando o "Objeto" contingency
$contingency
= new Contingency();

//UF para qual a contingência está ativa
$acronym
= "MG";

//A justificativa

$motive
= "SEFAZ MG INSTAVEL.";

//O tipo de contingência
$type
= "SVCAN";

//No link https://github.com/nfephp-org/sped-nfe/blob/master/docs/Contingency.md
//Pede para fazer assim. Não entendi, só fiz pq lá está pedindo
//O retorno de status guardei no banco de dados.
/*
Class Factories\Contingency
USAGE

Habilitando o modo de contingência
use NFePHP\NFe\Factories\Contingency;
$contingency = new Contingency();
$acronym = 'SP';
$motive = 'SEFAZ fora do AR';

$type = 'SVCAN';
$status = $contingency->activate($acronym, $motive, $type);
$status irá conter uma string JSON ENCODED, com as informações sobre a condição de contingência.
{
   "motive":"SEFAZ fora do AR",
   "timestamp":1484747583,
   "type":"SVCAN",
   "tpEmis":6
}
Essa string deverá ser arquivada, em disco ou em base de dados para uso posterior, até que o modo de contingencia seja desabilitado. Ou seja, a cada vez que carregar a classe Tools deverá ser passada a classe contingency, ou será considerado que o ambiente é normal.
*/

$status
= $contingency->activate($acronym, $motive, $type);

//Esta parte fiz pq a tools pede para fazer.Veja:
/*
Ativando as contingências
Ao carregar a classe é instaciada a classe Factories\Contingency automaticamente na propriedade publica $contingency e a partir dessa propriedade podem ser ativadas ou desativdos os modos de contingencia. Lembrando que isso deverá ser usado também na criação das NFe.
ATIVANDO
$contJson = $tools->contingency->activate($sigla, $motivo, $tipo = '');
O modo de contingência pode ser melhor entendido ao se estudar Contingency. O parametro tipo é opcional e só deve ser passado em caso do uso de contingência FS-DA, EPEC ou OFFLINE (para NFCe).
REATIVANDO Cada vez que a classe é invocada o modo de contingência esta desabilitado, e nesta versão da API passa a ser trabalho do aplicativo manter o estado da contingência a sua maneira em arquivo ou em base de dados. Caso o sistema de contigência ainda esteja ativo é necessário recarrega-lo na classe, com os mesmos parâmetros de sua ativação. Para isso usamos a string json retornada na ativação.
$tools->contingency->load($contJson);
*/

$contJson
= $tools->contingency->activate($acronym, $motive, $type);
$tools
->contingency->load($contJson);
?>


Sérgio Santos

unread,
Mar 19, 2018, 11:05:00 AM3/19/18
to NFePHP
O código final ficou assim. Mas sei que está errado:


use NFePHP\NFe\Factories\Contingency;

$contingency
= new Contingency();

$acronym
= "MG";

$motive
= "SEFAZ fora do AR";
$type
= "SVCAN"
$status = $contingency->activate($acronym, $motive, $type);

Roberto Machado

unread,
Mar 19, 2018, 11:10:09 AM3/19/18
to nfe...@googlegroups.com
Para você chavear a aplicação para contingencia, são necessárias várias informações.

Para criar essas informações usa-se a classe Contingência que retorna um OBJETO JSON com essas informações.
Esse JSON você deve gravar em algum lugar, ENQUANTO ESTIVER EM CONTINGÊNCIA, e deve passa-lo para a classe TOOLS toda VEZ que instancia-la, enquanto ele existir.

Para passar esse objeto use

$tools->contingency->load($contJson);

Quando sair de contingência, o objeto JSON deve ser apagado e não mais enviado para a classe TOOLS, quando essa for instanciada.

Voce não deve usar a classe Contingency mais de UMA vez, use-a somente quando entrar em contingência !!! E não cada vez que for usar a classe TOOLS

Roberto 

Sérgio Santos

unread,
Mar 19, 2018, 1:02:53 PM3/19/18
to NFePHP
Oi Roberto. Acho que entendi. No entando, ainda está retornando erro na comunicação. Veja que agora o servidor é de fato um de contingência:

An error occurred while trying to
 communication via soap
, Could not resolve host: svc.fazenda.gov.br
[https://svc.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx] -

Obrigado

Sérgio Santos

unread,
Mar 19, 2018, 1:09:56 PM3/19/18
to NFePHP
Roberto, no se o que vou falar tem alguma coisa boa. Mas entrando no arquivo:

/home/sergio/sistemas/nfephpv5/vendor/nfephp-org/sped-nfe/storage/wsnfe_4.00_mod55.xml

Conta os seguintes endereços para produção:


        <producao>
           
<NfeStatusServico method="nfeStatusServicoNF" operation="NFeStatusServico4" version="4.00">https://svc.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx</NfeStatusServico>
           
<NfeAutorizacao method="nfeAutorizacaoLote" operation="NFeAutorizacao4" version="4.00">https://svc.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx</NfeAutorizacao>
           
<NfeConsultaProtocolo method="nfeConsultaNF" operation="NFeConsulta4" version="4.00">https://svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx</NfeConsultaProtocolo>
           
<NfeInutilizacao method="nfeInutilizacaoNF" operation="NFeInutilizacao4" version="4.00"></NfeInutilizacao>
           
<NfeRetAutorizacao method="nfeRetAutorizacaoLote" operation="NFeRetAutorizacao4" version="4.00">https://svc.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx</NfeRetAutorizacao>
           
<RecepcaoEvento method="nfeRecepcaoEvento" operation="NFeRecepcaoEvento4" version="1.00">https://svc.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx</RecepcaoEvento>
           
<NfeConsultaCadastro method="consultaCadastro4" operation="CadConsultaCadastro4" version="2.00"></NfeConsultaCadastro>
       
</producao>

No entanto, no site da fazenda, no link: http://hom.nfe.fazenda.gov.br/PORTAL/WebServices.aspx
conta os endereços:

RecepcaoEvento1.00https://hom.svc.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx
NfeConsultaProtocolo3.10https://hom.svc.fazenda.gov.br/NfeConsulta2/NfeConsulta2.asmx
NfeStatusServico3.10https://hom.svc.fazenda.gov.br/NfeStatusServico2/NfeStatusServico2.asmx
NFeAutorizacao3.10https://hom.svc.fazenda.gov.br/NfeAutorizacao/NfeAutorizacao.asmx
NFeRetAutorizacao3.10https://hom.svc.fazenda.gov.br/NfeRetAutorizacao/NfeRetAutorizacao.asmx
NfeConsultaProtocolo4.00https://hom.svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx
NfeStatusServico4.00https://hom.svc.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx
RecepcaoEvento4.00https://hom.svc.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx
NFeAutorizacao4.00https://hom.svc.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx
NFeRetAutorizacao4.00https://hom.svc.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx


Obrigado

Roberto Machado

unread,
Mar 19, 2018, 1:33:24 PM3/19/18
to nfe...@googlegroups.com
Sim produção é diferente de homologação !!

Roberto

Sérgio Santos

unread,
Mar 19, 2018, 1:39:24 PM3/19/18
to NFePHP
Roberto, na verdade eu estava dizendo outra coisa. Veja os endereços que o site mostra e o que está no sistema. Ambos em produção:

Site: http://hom.nfe.fazenda.gov.br/PORTAL/WebServices.aspx
Sistema NFePHP


<producao>
   
<NfeStatusServico method="nfeStatusServicoNF" operation="NFeStatusServico4" version="4.00">https://svc.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx</NfeStatusServico>
   
<NfeAutorizacao method="nfeAutorizacaoLote" operation="NFeAutorizacao4" version="4.00">https://svc.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx</NfeAutorizacao>
   
<NfeConsultaProtocolo method="nfeConsultaNF" operation="NFeConsulta4" version="4.00">https://svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx</NfeConsultaProtocolo>
   
<NfeInutilizacao method="nfeInutilizacaoNF" operation="NFeInutilizacao4" version="4.00"></NfeInutilizacao>
   
<NfeRetAutorizacao method="nfeRetAutorizacaoLote" operation="NFeRetAutorizacao4" version="4.00">https://svc.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx</NfeRetAutorizacao>
   
<RecepcaoEvento method="nfeRecepcaoEvento" operation="NFeRecepcaoEvento4" version="1.00">https://svc.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx</RecepcaoEvento>
   
<NfeConsultaCadastro method="consultaCadastro4" operation="CadConsultaCadastro4" version="2.00"></NfeConsultaCadastro>
</producao>

Pegando 1 única URL para compar:

https://hom.svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx //Nfe Consulta Protocolo (Site da Fazenda)
https://svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx //Sistema NFePHP

A pergunda é. As URL's estão diferente. Tudo bem?



Roberto Machado

unread,
Mar 19, 2018, 1:42:26 PM3/19/18
to nfe...@googlegroups.com
Não meu amigo !

Você está consultando o SITE de homologação da RECEITA


Roberto

Sérgio Santos

unread,
Mar 19, 2018, 1:44:57 PM3/19/18
to NFePHP
Ignora a mensagem anterior. Eu confundi as URL's. Perdão.

Mesmo assim. Está errado. Na URL do site tem um "WWW" antes. Não sei se isso pode interferir. Veja: http://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=

URL que o site fornece:
https://www.svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx

URL do NFePHP
https://svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx


Roberto Machado

unread,
Mar 19, 2018, 1:48:45 PM3/19/18
to nfe...@googlegroups.com
OK agora entendi !

Vou providenciar a correção!

Roberto

Sérgio Santos

unread,
Mar 19, 2018, 3:24:00 PM3/19/18
to NFePHP
Roberto, fiz a atualização aqui manualmente por enquanto. Deu certo o envio. Porém, ainda está com problema.

Quando gero o xml, antes de enviar para a SEFAZ, é criado eum "Digest Value". Porém, quando faz-se o envio por meio, lá na sefaz, aparece outro Digest Value completamente diferente. E com isso, não consigo protocoloar a nota.

Você sabe se ainda estou fazendo alguma coisa errada. Segui o que vc falou. Ou seja, depois que gravo no banco de dados a string json com as configurações da contingência, eu apensa uso isso:

$tools->contingency->load($contJson);

Obrigado

Sérgio Santos

unread,
Mar 19, 2018, 3:26:00 PM3/19/18
to NFePHP
* onde $contJson é a string json que gravei no banco de dados anteriormente. Isso por exemplo:

{"motive":"SEFAZ MG INSTAVEL.","timestamp":1521477479,"type":"SVCAN","tpEmis":6}


Roberto Machado

unread,
Mar 19, 2018, 3:53:31 PM3/19/18
to nfe...@googlegroups.com
Isso já foi explicado nos documentos

A NFe é alterada quando entra em contingência portanto você deve recuperar a NFe da classe tools nesse caso e substituir a sua original.


Você pode pegar após a assinatura usando a classe Tools JÁ EM CONTINGÊNCIA, após o  envio a partir da propriedade $tools->lastRequest

Estou fazendo uma atualização para pegar após a assinatura EM CONTINGÊNCIA para facilitar

Roberto

Sérgio Santos

unread,
Mar 19, 2018, 4:51:50 PM3/19/18
to NFePHP
Roberto, como vou fazer isso? Tentei de várias formas(tentativa e erro) e só deu erro. Veja o que eu fiz:


$resp = $tools->sefazEnviaLote([$xml], $idLote);
$xml
= $tools->lastRequest;

Salvo este "$xml" no lugar do anterior. Ele até muda o DigestValue. Tudo certinho. Mas a estrutura do xml muda completamente. Veja em anexo
A responsa que eu ganho é:

Este documento [EnviNFe] não recebe protocolos. Confira a ordem dos parâmetros.


nfe_1803_7095468_000285450.xml

Sérgio Santos

unread,
Mar 19, 2018, 5:00:35 PM3/19/18
to NFePHP
Pelo que eu vi, foi colocado estas tags na frente:

<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00"><idLote>000000000000001</idLote><indSinc>0</indSinc>


Roberto Machado

unread,
Mar 19, 2018, 5:14:26 PM3/19/18
to nfe...@googlegroups.com
Sergio;

Você tem que extrair a NFe de dentro desse envio, usando o DOM, para fazer isso (por enquanto, até eu alterar a forma de assinar).

Mas essa semana faço a alteração para facilitar a tarefa.

Robero

Roberto Machado

unread,
Mar 20, 2018, 8:11:12 AM3/20/18
to nfe...@googlegroups.com
Sergio;

Promovi um ajuste na classe Tools !

Caso esteja em contingência ao assinar o XML ele será ajustado para esse ambiente e lhe retornará o XML correto para envio e procolo

Roberto

Sérgio Santos

unread,
Mar 20, 2018, 8:43:35 AM3/20/18
to NFePHP
Roberto. Muito obrigado!
Deus o abençoe...
Reply all
Reply to author
Forward
0 new messages