nfephp-org / sped-nfe

API para geração e comunicação das NFe com as SEFAZ autorizadoras
Other
1.22k stars 536 forks source link

Erro TimeOut NFC-e SP #971

Closed SistemaParaLojas closed 1 year ago

SistemaParaLojas commented 1 year ago

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...

SmileYzn commented 1 year ago

É 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

robmachado commented 1 year ago

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.

esmlima commented 1 year ago

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 ?

SmileYzn commented 1 year ago

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 👍

esmlima commented 1 year ago

@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...

SmileYzn commented 1 year ago

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.

esmlima commented 1 year ago

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?

SmileYzn commented 1 year ago

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

robmachado commented 1 year ago

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)

SmileYzn commented 1 year ago

@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

robmachado commented 1 year ago

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.

SmileYzn commented 1 year ago

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 :pray:

SistemaParaLojas commented 1 year ago

@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.

robmachado commented 1 year ago

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)

SistemaParaLojas commented 1 year ago

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!

SmileYzn commented 1 year ago

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 :pray:

robmachado commented 1 year ago

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

robmachado commented 1 year ago

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

renandci commented 1 year ago

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.

robmachado commented 1 year ago

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.

robmachado commented 1 year ago

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

SmileYzn commented 1 year ago
//
$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 :rofl:

robmachado commented 1 year ago

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.

robmachado commented 1 year ago

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

SmileYzn commented 1 year ago
<?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)
*/
robmachado commented 1 year ago

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 ?

SmileYzn commented 1 year ago

Uns 30 segundos kk

robmachado commented 1 year ago

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.

SmileYzn commented 1 year ago

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

robmachado commented 1 year ago

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

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

SmileYzn commented 1 year ago

Pior que não

robmachado commented 1 year ago

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

nagahshi commented 1 year ago

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)

esmlima commented 1 year ago

@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...

SistemaParaLojas commented 1 year ago

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

robmachado commented 1 year ago

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

SistemaParaLojas commented 1 year ago

kkkkk.. Na guerra urubu vira frango!

robmachado commented 1 year ago

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:

SistemaParaLojas commented 1 year ago

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

robmachado commented 1 year ago

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.

robmachado commented 1 year ago

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

rabraga commented 1 year ago

Já trabalhei com servidores na ALGAR Telecom, dá uma olhada também, com servidores aqui no BR, Windows e Linux.

https://algartelecom.com.br/empresas/cloud-plus

Ramon Loureiro

-------- Mensagem original -------- De : "Roberto L. Machado" @.> Data: 05/02/2023 10:29 (GMT-03:00) Para: nfephp-org/sped-nfe @.> Cc: Subscribed @.***> Assunto: Re: [nfephp-org/sped-nfe] Erro TimeOut NFC-e SP (Issue #971)

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 recomento 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 mas muito pobre mesmo, portanto se forem usar a AWS tem que estudar muito.

— Reply to this email directly, view it on GitHubhttps://github.com/nfephp-org/sped-nfe/issues/971#issuecomment-1417845037, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AD3IAG6RHNEYUDWNG57SMBTWV6TMPANCNFSM6AAAAAAUPW7S6Y. You are receiving this because you are subscribed to this thread.Message ID: @.***>

robmachado commented 1 year ago

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

andersonfelizari commented 1 year ago

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.

felipebenetti commented 1 year ago

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

gersonfs commented 1 year ago

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

andersonfelizari commented 1 year ago

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.

robmachado commented 1 year ago

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