Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte para extensões de Formas de Pagamento
Por azerdran
#50085
Fatal error: Uncaught exception 'Exception' with message 'CURL can't connect: connect() timed out!' in /home/xxxxx/public_html/system/library/PagSeguroLibrary/utils/PagSeguroHttpConnection.class.php:120 Stack trace: #0 /home/xxxxx/public_html/system/library/PagSeguroLibrary/utils/PagSeguroHttpConnection.class.php(59): PagSeguroHttpConnection->curlConnection('POST', 'https://ws.pags...', Array, 20, 'UTF-8') #1 /home/xxxxx/public_html/system/library/PagSeguroLibrary/service/PagSeguroPaymentService.class.php(78): PagSeguroHttpConnection->post('https://ws.pags...', Array, 20, 'UTF-8') #2 /home/xxxxx/public_html/system/library/PagSeguroLibrary/domain/PagSeguroPaymentRequest.class.php(626): PagSeguroPaymentService::createCheckoutRequest(Object(PagSeguroAccountCredentials), Object(PagSeguroPaymentRequest)) #3 /home/xxxxx/public_html/catalog/controller/payment/pagseguro.php(170): PagSeguroPaymentRequest->register(Object(PagSeguroAccountCredentials)) #4 /home/xxxxx/public_html/system/engine/controller.php(43): Co in /home/xxxxx/public_html/system/library/PagSeguroLibrary/utils/PagSeguroHttpConnection.class.php on line 120
Utilizei o Pagseguro da http://www.lojaopencart.com.br/ uma vez que a versão do site oficial não funcionou tb
Versão OpenCart: 1.5.6.1

Alguma ajuda?
Por mateusjeronimo
#50455
O problema ainda nao foi resolvido, mas a solução de contorno é:

Alterações na classe system\library\PagSeguroLibrary\utils\PagSeguroHttpConnection.class.php
1. Aumentar variavel $timeout nos métodos post e get para 40

2. Alteração no método curlConnection

2.1 Descomentar a seguinte linha no método curlConnection
CURLOPT_TIMEOUT => $timeout

2.2
Alterar
if ($error) {
throw new Exception("CURL can't connect: $errorMessage");
Para
if ($error) {

if (strtoupper($method) === 'POST'){

return $this->curlReConnection('POST', $url, $data, $timeout, $charset);
}else{
return $this->curlReConnection('GET', $url, null, $timeout, $charset);
}

3. Criar novo método:
private function curlReConnection($method, $url, array $data, $timeout, $charset)
{

if (strtoupper($method) === 'POST') {
$postFields = ($data ? http_build_query($data, '', '&') : "");
$contentLength = "Content-length: " . strlen($postFields);
$methodOptions = array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postFields,
);
} else {
$contentLength = null;
$methodOptions = array(
CURLOPT_HTTPGET => true
);
}

$options = array(
CURLOPT_HTTPHEADER => array(
"Content-Type: application/x-www-form-urlencoded; charset=" . $charset,
$contentLength,
'lib-description: php:' . PagSeguroLibrary::getVersion()
),
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_CONNECTTIMEOUT => $timeout,
CURLOPT_TIMEOUT => $timeout
);

// adding module version
if (!is_null(PagSeguroLibrary::getModuleVersion())) {
array_push($options[CURLOPT_HTTPHEADER], 'module-description: ' . PagSeguroLibrary::getModuleVersion());
}

// adding CMS version
if (!is_null(PagSeguroLibrary::getCMSVersion())) {
array_push($options[CURLOPT_HTTPHEADER], 'cms-description: ' . PagSeguroLibrary::getCMSVersion());
}

$options = ($options + $methodOptions);

$curl = curl_init();
curl_setopt_array($curl, $options);
$resp = curl_exec($curl);
$info = curl_getinfo($curl);
$error = curl_errno($curl);
$errorMessage = curl_error($curl);
curl_close($curl);
$this->setStatus((int) $info['http_code']);
$this->setResponse((String) $resp);
if ($error) {


throw new Exception("CURL can't reconnect: $errorMessage");
} else {
return true;
}
Avatar do usuário
Por flaviot7
#50457
Estou com o mesmo problema.
Obrigado ao mateusgeronimo pela contribuição.
A modificação sugerida acima é bastante trabalhosa para um iniciante, não arrisquei fazer.
Avatar do usuário
Por denisgomes
Mensagens
#50493
A mensagem 'CURL can't connect: connect() timed out' indica que o módulo do Pagseguro não foi capaz de conectar-se ao servidor do Pagseguro, ou a conexão demorou mais do que o tempo limite especificado pelo módulo (ele também não pode esperar pra sempre, ou demais, senão o usuário vai achar que travou).

Isso muito provavelmente é um erro da parte do Pagseguro, afinal o servidor deles não respondeu. Então não há nada que vocês possam fazer a não ser cobrar explicações deles, pois eles podem estar com um problema de capacidade.

Ontem, dia 29/04, pela manhã o próprio site do Pagseguro não estava abrindo. Até achei estranho, afinal um site desses já deve esperar um alto volume de tráfego. Chegou até a aparecer uma mensagem indicando que o site estava com problemas mas que a API e os pagamentos prosseguiam normalmente.

Então o jeito é cobrar uma solução deles, e possivelmente modificar o módulo de modo a lidar com esse tipo de problema exibindo uma mensagem do tipo 'Desculpe mas o Pagseguro não respondeu, enviaremos a cobrança mais tarde' sem interromper o fluxo de compras da loja'.Assim como o módulo de Sedex deve mostrar um aviso quando o webservice está fora do ar.
Avatar do usuário
Por flaviot7
#50500
denisgomes escreveu:A mensagem 'CURL can't connect: connect() timed out' indica que o módulo do Pagseguro não foi capaz de conectar-se ao servidor do Pagseguro, ou a conexão demorou mais do que o tempo limite especificado pelo módulo (ele também não pode esperar pra sempre, ou demais, senão o usuário vai achar que travou).

Isso muito provavelmente é um erro da parte do Pagseguro, afinal o servidor deles não respondeu. Então não há nada que vocês possam fazer a não ser cobrar explicações deles, pois eles podem estar com um problema de capacidade.

Ontem, dia 29/04, pela manhã o próprio site do Pagseguro não estava abrindo. Até achei estranho, afinal um site desses já deve esperar um alto volume de tráfego. Chegou até a aparecer uma mensagem indicando que o site estava com problemas mas que a API e os pagamentos prosseguiam normalmente.

Então o jeito é cobrar uma solução deles, e possivelmente modificar o módulo de modo a lidar com esse tipo de problema exibindo uma mensagem do tipo 'Desculpe mas o Pagseguro não respondeu, enviaremos a cobrança mais tarde' sem interromper o fluxo de compras da loja'.Assim como o módulo de Sedex deve mostrar um aviso quando o webservice está fora do ar.
Muito obrigado pela sua contribuição valiosa interpretando para nós esse erro. Ontem eu tive esse problema e hoje está normal em alguns teste que realizei.
Tinha até desativado o módulo e retirado o banner do PagSeguro por achar que poderia ser incompatibilidade com a versão opencart da minha loja que é 1.5.6.1, embora já tinha funcionado muito bem antes na mesma versão.
Mais uma vez, muitíssimo obrigado.