nfephp-org / sped-nfe

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

SOAP EXCEPTION #670

Closed cecon closed 5 years ago

cecon commented 5 years ago

Nota: para questões de suporte, use Google Groups https://groups.google.com/forum/#!forum/nfephp . Os problemas deste repositório são reservados para solicitações de recursos e relatórios de erros.

Comportamento esperado

Deveria fazer a comunicação com o SEFAZ

Comportamento Atual

"An error occurred while trying to communication via soap, HTTP/2 stream 0 was not closed cleanly: HTTP_1_1_REQUIRED (err 13) [https://homologacao.nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx]"

Solução possível

Não tenho ideia.

Passos para reproduzir

Instalei o XAMPP 3.2.3 habilitei a extensão php_soap que estava desabilitada

Contexto (Ambiente)

Tenho a impressão que o sistema não é estável

/**

class SoapException extends \RuntimeException implements ExceptionInterface { public static function unableToLoadCurl($message) { return new static("Unable to load cURL, " . "verify if libcurl is installed. $message"); }

public static function soapFault($message)
{
    return new static("An error occurred while trying to communication "
        . "via soap,  $message");
}

}

Arguments "An error occurred while trying to communication via soap, HTTP/2 stream 0 was not closed cleanly: HTTP_1_1_REQUIRED (err 13) [https://homologacao.nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx]"

Descrição detalhada

<! --- Forneça uma descrição detalhada da alteração ou adição que você está propondo ->

Possível implementação

<! --- Não é obrigatório, mas sugere uma ideia para implementar adição ou alteração ->

Para mais informações, consulte o guia de CONTRIBUTING.

lukinhaspm commented 5 years ago

Esse assunto foi tradado a alguns meses já... e está amplamente discutido no grupo... abs https://groups.google.com/forum/#!searchin/nfephp/$20HTTP_1_1_REQUIRED%7Csort:date/nfephp/Ri5iN7iQGqQ/c4lTMS6vAAAJ

robmachado commented 5 years ago

Como o colega @lukinhaspm , já comentou esse assunto está tratado várias vezes no forum. Esse problema, não é da API e sim do ambiente em que opera (como muitos outros) devido a forma com que o PHP é compilado e também devido a variações do ambiente das SEFAZ. O uso do protocolo HTTP 1.0, 1.1 ou 2.0 é negociado normalmente durante o handshake do cURL (o que é sempre verdade em DEBIAN e derivados), mas em outros SO isso nem sempre ocorre por isso foi criado um método para "FORÇAR" o uso do protocolo desejado na comunicação cURL. Esse método pode ser invocado a partir da classe Tools::class $tools->soap->httpVersion('1.1'); Dito isso encerro essa ISSUE.

cecon commented 5 years ago

Obrigado funcionou.

Em sáb, 4 de mai de 2019 às 12:07, Lucas Augusto Milanes < notifications@github.com> escreveu:

Esse assunto foi tradado a alguns meses já... e está amplamente discutido no grupo... abs

https://groups.google.com/forum/#!searchin/nfephp/$20HTTP_1_1_REQUIRED%7Csort:date/nfephp/Ri5iN7iQGqQ/c4lTMS6vAAAJ

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/nfephp-org/sped-nfe/issues/670#issuecomment-489335057, or mute the thread https://github.com/notifications/unsubscribe-auth/AAL34LM3PYDTBG26WPBASOTPTWRD7ANCNFSM4HKYTHVA .

--

marcioarp commented 3 years ago

Ola,

Eu precisei adicionar o seguinte comando na linha 112 (imediatamente antes de $response = curl_exec($oCurl); )

Linha 112 do arquivo vendor\nfephp-org\sped-common\src\Soap\SoapCurl.php curl_setopt($oCurl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

OBS $tools->soap->httpVersion('1.1'); não funcionou pra mim, aparentemente devido ao soap não estar instaciada, porém não costumo utilizar muito este pacote, então não soube como instanciar. Acredito eu que o mais correto seria ter instaciado o sopa e utilizar o httpVersion disponibilizado no pacote. Se alguém puder postar aqui como instanciá-lo, agradeço

$tools->soap->httpVersion('1.1') causou o seguinte erro: Call to a member function httpVersion() on null

robmachado commented 3 years ago

Marcio A classe SoapCurl deve ser instanciada e setada ANTES de chamar os métodos da classe tools, ex.:

$soap = new SoapCurl($certificate);
$soap->httpVersion('1.1');

$tools = new Tools($configJson, $certificate);
$tools->loadSoapClass($soap);
marcioarp commented 3 years ago

Perfeito, muito obrigado !!

iberemendes commented 2 years ago

robmachado, tudo bem? Tenho meu sistema em PHP rodando e hospedado na AWS. Tudo estava normal até ontem quando estou tendo erro de SOAP. No caso aqui é uma simples consulta pela chave.

use NFePHP\NFe\Tools; use NFePHP\Common\Certificate; use NFePHP\NFe\Common\Standardize;

try {

$certificate = Certificate::readPfx($pfxcontent, $password ); $tools = new Tools($configJson, $certificate); $tools->model('55');

$response = $tools->sefazConsultaChave($chave,$ambiente); E está me retornando agora esse erro:

"Erro de comunicação via soap, Serviço indisponível"

Já tentei de tudo e procurei um monte na net mas não consegui resolver. Poderia me ajudar? Obrigado!

robmachado commented 2 years ago

Isso ocorre quando o webservice da SEFAZ está FORA DO AR ou está com problemas internos (como sobrecarga)

iberemendes commented 2 years ago

Ok Roberto, obrigado pelo retorno. Esse serviço até voltou ao normal. Mas, o

    $xmls = array();
    $idLote = str_pad(100, 15, '0', STR_PAD_LEFT); // Identificador do lote
    $tools->model('65');    
    $resp = $tools->sefazEnviaLote([$xml], $idLote, 1, false, $xmls );

não está finalizando e está me retornando.....

Erro de comunicação via soap, Operation timed out after 40001 milliseconds with 0 bytes received

Desde ontem a tarde está assim... Será que é algo da SEFAZ ou da AWS ?

Se eu testo em LOCALHOST funciona normalmente. Mas se executo pela página, me dá esse erro.

robmachado commented 2 years ago

Caso esteja funcionando na sua maquina local e não esteja no seu servidor, conclui-se que o problema está no seu SERVIDOR !!

andreluizmacedo commented 1 year ago

Ok Roberto, obrigado pelo retorno. Esse serviço até voltou ao normal. Mas, o

    $xmls = array();
    $idLote = str_pad(100, 15, '0', STR_PAD_LEFT); // Identificador do lote
    $tools->model('65');  
    $resp = $tools->sefazEnviaLote([$xml], $idLote, 1, false, $xmls );

não está finalizando e está me retornando.....

Erro de comunicação via soap, Operation timed out after 40001 milliseconds with 0 bytes received

Desde ontem a tarde está assim... Será que é algo da SEFAZ ou da AWS ?

Se eu testo em LOCALHOST funciona normalmente. Mas se executo pela página, me dá esse erro.

Desculpe reviver o assunto, mas você conseguiu resolver o problema no seu servidor? aqui consigo consultar normalmente no meu ambiente local, e quando testo em um servidor com CentOS v7.9.2009 STANDARD não funciona