nfephp-org/sped-nfe

Erro TimeOut NFC-e SP

SistemaParaLojas opened this issue · 48 comments

Olá pessoal, estou enfrentando problemas com a emissão de NFC-e / NF-e para o estado de SP

Erro: An error occurred while trying to communication via soap, Connection timed out after 60000 milliseconds

Aumentei o Tempo de 20000 milliseconds para 60000 porém mesmo assim não comunica para emissão.
em LocalHost esta emitindo normalmente, entretanto no servidor onde tenho a hospedagem da esse erro.

Isso começou dia 30/01/2023

Alguem pode me ajudar? ou esta com o mesmo erro?

No monitor de NFC-e de SP e NF-e Nacional esta verde, verde, verdinho...

É um problema com a rota externa, até o momento nenhuma solução. E o belo atendimento da SEFAZ de SP só piora a falta de informações.

Há usuários sugerindo alterações no DNS para conseguir se comunicar com a SEFAZ.

Nem contingência estão liberando uma vergonha, fazer o quê isso aqui é Brasil. Você precisa pedir pra ser roubado hoje em dia

Erros de timeout são comuns devido a sobrecarga dos servidores, em SP isso ocorre menos vezes.
Nesse momento não há problemas de comunicação com SP.
Eu tenho meus servidores em NY e não existem problemas de acesso.
Porém alguns DNS não são mantidos de forma adequada, e eu tive de alterar os servidores de DNS nos meus servidores para consultarem a CloudFlare e o Google esses são rápidos e mantidos muito atualizados.

Alguém conseguiu resolver isso?
No meu localhost está funcionando, mas no meu servidor dedicado parou de funcionar desde o dia 30/01
Tinha configurado nameserver 1.1.1.1
Mudei para
nameserver 8.8.8.8
nameserver 8.8.4.4
Mas continua com o mesmo problema de timeout...
Alguma sugestão @robmachado ?

Mas o problema não é só o timeout, há rotas que funcionam e outras como o meu caso que simplesmente não conectam. É problema de rota e não de dns de quem está consumindo, nem da sefaz de sp.

Simplesmente não conecta, mas vai explicar isso pra sefaz se sp que nem atendimento funciona, e pra cliente que está esperando nfe sair com caminhão carregando na porta.

Isso é Brasil, você precisa pedir pra ser roubado 👍

@SmileYzn , mas quando eu rodo a API no meu servidor local ele consegue emitir NFCe sem problema... por isso que fico confuso em qual é o real problema. No mês de janeiro o sistema funcinou redondo...

O problema eh a rota ou provedor que conecta de onde se emite a nota até na Sefaz de sp, por isso há servidor que funciona e outros servidores não. como no meu caso seria necessário trocar o link de internet do servidor onde estou tentando emitir nota.

É um problema que nem a hospedagem resolve, nem a Sefaz.

Seria possível então usar algum tipo de proxy para conseguir acessar esse webservice, concorda? Você já tentou alguma solução do tipo @SmileYzn?

Eu utilizo hospedagem, estou dependendo do suporte deles para qualquer alteração nessa parte, com certeza não vão querer ativar nenhum proxy para essa tarefa.

Eles fizeram uma proposta de migrar o servidor, mas como está na produção é impossível no momento kk

Eu uso servidores em NY da Digital Ocean e sei de muitos outros que usam servidores no Canada, e na Inglaterra entre outros, usando com o mesmo fonte, e sem problemas.
Fica muito difícil, saber o que ocorre no caso de vocês, sem investigar adequadamente, saber exatamente ONDE ocorre o problema e identificar a real CAUSA.

Algumas causas podem ser:
1- versões não testadas do sistema operacional linux
2 - versões do openssl (em versões mais atuais do linux é usado um OpenSSL versão 3 que não suporta conexão com a SEFAZ, que usa uma encriptação legada mais antiga)
3 - Erros de DNS (por isso devem usar o 1.1.1.1 ou 8.8.8.8 ou 8.8.4.4)
4 - falhas de configuração do linux para usar o esses DNS (é também tem isso)
5 - Ambientes compartilhados (ERPS não devem nunca rodar em servidores compartilhados)

@robmachado

Nenhuma dessas, como já citei anteriormente, o problema é na rota que é feita para alcançar os servidores da SEFAZ de SP.

Se o problema fosse somente a mudança de DNS já seria resolvido pois já testaram vários na hospedagem e ainda continua sem conexão com a SEFAZ

  1. Estava emitando antes.
  2. O problema não é SSL no meu caso, visto que mesmo diretamente não chega a pingar na sefaz.
  3. Como dito, foram tentados vários servidores DNS e nada.
  4. Se fosse o caso, nenhuma outra conexão ia responder nem as outras autorizadoras como a SEFAZ PR (Vale também para o item citado 2)
  5. SIM, o problema não é ser compartilhado e sim migrar tudo para outro servidor quando se está utilizando todo o sistema NFE em produção.

Volto a dizer, o problema não é a hospedagem, DNS, versões SSL, versões linux etc. E sim um súbito problema de conectar dois servidores por uma rota.

Ps. Esqueci de mencionar, no outro servidor que está sem problemas com a SEFAZ de SP as configurações são idênticas as do que não funcionam, o que muda é justamente a bendita rota usada para se comunicar com a SEFAZ

Bom, o caminho pelos meandros da internet também afeta, mas você pode verificar isso usando o TRACEROUTE

Pode ser que na rota usada tenha um reteador mal configurado, ou com problemas, isso já aconteceu anteriormente com um servidor localizado na Inglaterra.

Bom, o caminho pelos meandros da internet também afeta, mas você pode verificar isso usando o TRACEROUTE

Pode ser que na rota usada tenha um reteador mal configurado, ou com problemas, isso já aconteceu anteriormente com um servidor localizado na Inglaterra.

É bizarro mesmo, posso tentar isso 🙏

@SmileYzn , mas quando eu rodo a API no meu servidor local ele consegue emitir NFCe sem problema... por isso que fico confuso em qual é o real problema. No mês de janeiro o sistema funcinou redondo...

Sim em LocalHost esta emitindo normal pq seu computador vira um servidor.

Se essa é preocupação em ter servidores fora do Brasil, ai não tem jeito anão ser migrar para um datacenter no Brasil, isso diminui um pouco a latência.
Eu mesmo estou estudando usar a AWS Brasil, apesar de ser um pouco mais cara, ou mesmo o GoogleCloud Brasil, que são reais provedores em nuvem. Mas tem outros como a Locaweb que tem VPSs (não é a mesma coisa mas pode servir em alguns casos)

Se essa é preocupação em ter servidores fora do Brasil, ai não tem jeito anão ser migrar para um datacenter no Brasil, isso diminui um pouco a latência. Eu mesmo estou estudando usar a AWS Brasil, apesar de ser um pouco mais cara, ou mesmo o GoogleCloud Brasil, que são reais provedores em nuvem. Mas tem outros como a Locaweb que tem VPSs (não é a mesma coisa mas pode servir em alguns casos)

@robmachado, Roberto!! Parabéns pelo projeto.
Tenho VPS no Brasil com servidor em SP e MG utilizo a mais de 2 anos, nunca tive problemas em relação a isso.
Liberamos até o IP dos servidores NFE e NFC-e mas nada funciona.

Fiz tudo que estão comentando porém acredito que a SEFAZ esta com algo errado na rota conforme informou o colega @SmileYzn SmileYzn

Um abraço e vamos torcer para resolver isso!

Enquanto houver contingência há esperança, ainda bem que consigo migrar o sistema emissor entre servidores individualmente para fugir desse problema.

@robmachado

Obrigado pelo belo trabalho com NFE-PHP 🙏

Amigos, estou emitindo normalmente tanto NFe como NFCe em SP sem problemas. O que eu sei é nos últimos dias eles fizeram uma manutenção no SAT e o SAT ficou fora do ar durante um bom tempo.
Nos últimos 3 dias emitimos milhares de NFe em SP sem problemas

O que tem acontecido é uma grande oscilação, com muitos retornos referentes incapacidade de processamento dos servidores. Mas isso tem que ser tratado pelo sistema que faz esses envios.
OU seja tem corrido mais timeouts e desligamentos pelo servidor da SEFAZ que o normal, mas mesmo assim, com o tratamento adequado conseguimos emitir.
Já no caso das ocorrências disso no Brasil, MT tem um record de ocorrências seguido por MG

Estou enfrentando o mesmo problema de timeout na rota "https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx".
Estou em contato com suporte de hospedagem para ver se há algo que eles possam ajudar, pq, há outros clientes, mas com servidor diferente, e está rodando e emitindo normal.

Nesse momento é GO apresentando instabilidade !!!

Timeout é uma ocorrência comum, ocorre em TODOS os servidores de TODAS as SEFAZ, a alguns anos a SEFAZ SP ficou fora do ar por horas e não habilitou a contingência !!

As SEFAZ somente habilitam a contingência quando o problema é grave, no caso da NFe tem dois mecanismos de contingência.

  • SVC - recomendado, mas devemos esperar a SEFAZ liberar para enviar. Nesse caso envia e esquece pois é igual a emissão normal
  • EPEC - NÃO RECOMENDADO, a não ser que tenha estudado muito bem o manual e tenha feito uma implementação a prova de falhas. Nesse caso as consequências de erros no sistema podem ser "malignas"

Só uma nota, não adianta dar PING para checar a resposta desses endereços, em geral o firewall impede a resposta do ping e a finalização no caso do traceroute.
O único meio de saber se a rota completa está funcional é usar o cURL para trazer o WSDL do webservice, se o WSDL for retornado, em principio o webservice está funcional, não significa entretanto que irá processar sua requisição seja ela qual for. É o método que usam neste site https://www.nfe.fazenda.gov.br/portal/disponibilidade.aspx

//
$ch = curl_init();
//
curl_setopt($ch, CURLOPT_URL, "https://nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5000);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
//
$output = curl_exec($ch);
//
if (curl_errno($ch))
{
    $error_msg = curl_error($ch);
    //  
    var_dump($error_msg);
}
//
curl_close($ch);     
//
var_dump($output);

//string(94) "Failed to connect to nfe.fazenda.sp.gov.br port 443 after 63264 ms: Couldn't connect to server"
bool(false)

Isso? Timeout 🤣

Você deve obter o erro do cURL e o codigo http antes de encerrar o cURL

Ex.
$curlerror = curl_error($ch);
$curlerror_code = curl_errno($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Essas informações são muito importantes nessa analise.
Apenas essa resposta, que você obteve, não é suficiente para entender o que ocorre.
Pois existem dezenas de errors que o cURL pode retornar.

Outra coisa use o a URL com a chamada ?WSDL no final após .asmx
assim "https://nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx?WSDL"

Tem um método na classe SoapCurl que pode ser usado para os testes

public function checkWsdlActive($url) //a url pode ou não ter o o ?wsdl no final

Para baixar o WSDL será necessário passar para a classe o certificado digital de um emitente autorizado.
Esse método gera Exceptions mais legíveis pois retorna os erros do cURL e/ou o código http

<?php
echo '<pre>';
//
$ch = curl_init();
//
curl_setopt($ch, CURLOPT_URL, "https://nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx?WSDL");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5000);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
//
$output = curl_exec($ch);
//
if (curl_errno($ch))
{
    $curlerror = curl_error($ch);
    $curlerror_code = curl_errno($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    //  
    var_dump
    ([
        $curlerror,
        $curlerror_code,
        $httpcode,
    ]);
}
//
curl_close($ch);     
//
var_dump($output);

/*
array(3) {
  [0]=>
  string(94) "Failed to connect to nfe.fazenda.sp.gov.br port 443 after 63264 ms: Couldn't connect to server"
  [1]=>
  int(28)
  [2]=>
  int(0)
}
bool(false)
*/

O erro no. 28 do cURL é Timeout interno. OU seja o seu script (a execução do PHP) desfez a conexão.

Mas esse timeout está estranho pois você colocou um tempo MONSTRUOSO no cURL, eu colocaria algo como 60 e 80 segundos.

Então o seu script deve demorar pelo menos UM MINUTO aguardando a resposta antes de encerrar a conexão.
Quanto tempo está demorando antes de desistir e encerrar ?

Uns 30 segundos kk

Veja lá o que está ocorrendo pois acredito que tem outros problemas no seu servidor.
Por exemplo na configuração do PHP (lembre tem 3 estruturas do PHP o php-fpm , php-cli e o php cgi)
Tente usar o método da classe cURL para fazer o teste.

Não é o PHP, tentei utilizar diretamente pelo cURLda máquina e acontece o mesmo problema

Se funcionava, a uma semana atras, deveria funcionar agora.

Fizeram algum update no S.O. nesse período ??

Pior que não

A resposta da sua chamada deveria durar 0.5 segundo no máximo e responder algo como

Array
(
[error] => SSL certificate problem: unable to get local issuer certificate
[code] => 60
[http] => 0
)
Pois a url requer acesso com certificado digital

o que deveria ocorrer é exatamente o que o Sr. Roberto disse a resposta é instantanea sobre a falta do certificado.

no passado mesmo qm usava ubuntu16 com gnuTLS teve o mesmo problema, o pessoal teve que sair atualizando.

curl https://nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx?WSDL

sobre rotas 60k é mto tempo pra ser rota ta mais pra falta de comunicação mesmo e voce não controla isso pelo PHP mas voce consegue pelo proprio curl no bash usando parametro --max-time ou ainda na config do PHP (max_execution_time)

@SistemaParaLojas , onde você hospeda a sua API?
Pergunto pois estou na Napoleon e o meu problema também começou exatamente no dia 30/01... Será que os caras fizeram alguma modificação nas configurações de rede?
Estou contratando um novo VPS, agora na OVHCloud, por via das dúvidas...

Olá, consegui resolver o Problema!!!!
Vamos lá contratei a VPS da Kronichostbrasil.

No meu caso tenho mais conhecimento com servidores windows server optei por ele.
Instalaei o PHP o MySQL e o APACHE poderia ter instalado o Xampp também depois fiz as configurações para Liberação de Portas e Configurações dos DNS

Sistema Emitiu Normal NF-e e e NFC-e

O Servidor da Kronic fica em MG

Ruindows !! rapaz você é corajoso e gosta de gastar dinheiro !! ;-)

kkkkk.. Na guerra urubu vira frango!

Eu recomendo aos colegas:
1 - use serviços de provedores reais de cloud (AWS, Digital Ocean, GoogleCloud, Linorg, Microsoft, entre outros)
2 - como segunda opção utilize provedores de VPS (vai ficar provavelmente mais caro e mais complexo, mas tem muitos no Brasil, nem todos muito confiáveis)

IMPORTANTE: Nunca coloque aplicativos em hospedagem compartilhada, isso serve apenas para sites simples.

Um verdadeiro provedor de cloud (Iaas e Paas) tem muitos serviços como:

  • loadbalances
  • fireawalls
  • muitas configurações de maquinas e de discos armazenamento (inclusive nvme)
  • criação de maquinas em segundos
  • serviços de database gerenciados (em clusters), como mysql, postgres, redis, mongo, etc..
  • backups automáticos e snapshots para duplicação e recuperação
  • armazenamento de arquivos em nuvem (famoso S3) com preços baixos
  • serviços de kubernets e
  • aplicativos sem servidor (Paas)
  • e por ai vai ... sabendo usar e configurar vale muito a pena tanto em custo como em carga de manutenção

Roberto, vc usa Digital Ocean? qual plano ali vc utiliza?

A Digital Ocean, não tem planos, alias nenhum provedor Cloud tem planos.
Você paga pelo que usa !! apenas isso.
Para quem nunca usou um provedor de cloudcomputing eu recomendo começar pela Digital Ocean, é muito mais simples que uma AWS, e não tem surpresas.
Na D.O. uma maquina pequena com 1Gb de ram, 25GB de disco, 1 CPU e NVME custa US$ 7.00/mês
Mas não tem RUINDOWS apenas versões do linux

A AWS é a mais completa desses provedores e com datacenter no Brasil, mas para usar a AWS é necessário fazer CURSO pois é complexa a utilização e a configuração o numero de recursos disponíveis é simplesmente absurdo.
Mas uma configuração incorreta pode te deixar muito mais muito pobre mesmo, portanto se forem usar a AWS tem que estudar muito.

Na DO eu tenho mais de 10 maquinas, loadbalances, firewalls, backups, snapshots, bancos de dados e armazenamento de arquivos, todos esses serviços (cada um com o seu preço) tem custos fixos por mês. Sem surpresas.
As maquinas tem inúmeras configurações de CPUs, memoria, e espaço em disco, mas para configurar VOCE deve saber o que seu aplicativo necessita e conhecer intimamente a versão do Linux que for usar, pois será você quem irá configurar o seu ambiente. Isso vale para qualquer provedor Cloud

Para VPS tem também a CONTABO o valor é em EUROS/DOLAR mas é muito barato
Tem datacenter nos EUA, e como eu já disse é muito mas muito barato mesmo, uma fração do que custa uma AWS ou mesmo uma D.O.

Ex. na CONTABO

Cloud VPS S 4vCPU Cores 8GB RAM 50GB NVMe or 200 GB SSD 32TB Traffic Unlimited Incoming por US$8.49

Comecei a ter o esse problema desde o dia 07/02 em RS com NFCe, onde ocorreu alguma atualização no sefaz nesse dia.
Desde então venho recebendo esse erro de timeout SSL de vez enquanto, coisa que antes nunca ocorria.

Erro de comunicação via soap, SSL connection timeout [https://nfce.svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx]

Uso AWS no Brasil e estou rodando a uns 6 meses sem nenhum problema.

Nesse dia 07 acessei o status do sefaz RS e verifiquei que estavam em manutenção.

Vou investigar e retorno caso encontre uma solução ou o serviço se normalize.

Continua ocorrendo o erro para você @andersonfelizari ?
Também estamos enfrentando o problema na Sefaz RS e não encontramos ainda uma solução.

Continua ocorrendo o erro para você @andersonfelizari ? Também estamos enfrentando o problema na Sefaz RS e não encontramos ainda uma solução.

Aqui está caindo direto nesse erro...
Mas estranho que também começou a dar esse mesmo erro em algumas outras APIs que não tem nada a ver... Talvez seja o mesmo fornecedor. No meu caso no Sicredi

Continua ocorrendo o erro para você @andersonfelizari ? Também estamos enfrentando o problema na Sefaz RS e não encontramos ainda uma solução.

Ainda continua esporadicamente. Não conseguir evoluir em uma solução ainda também.

Encerrando essa issue pois o problema não é da biblioteca