Jump to content
Jorge Marmion

Erro em curl_exec na loja exemplo da Cielo

Recommended Posts

Estou tendo um erro no exemplo da loja PHP e não consigo compreender o motivo. Efetuei um rastreamento e o erro está no comando

 

$resultado = curl_exec($sessao_curl);

 

do módulo include.php. Segundo o log:

 

2 WARNING - 2011-06-20 15:38:41 (BRT)

ARQUIVO: /includes/include.php(Linha 73)

MENSAGEM: curl_error(): 8 is not a valid cURL handle resource

 

Instalei o código em 2 servidores diferentes, e o problema é exatamente igual.

 

Aparentemente o XML foi gerado satisfatoriamente, e o comando curl_init() e os curl_setopt anteriores deram true.

 

Alguém poderia me dar uma ideia do que pode estar acontecendo? Suspeito que falte algum recurso, mas não achei nada até agora e o suporte da Cielo nem respondeu até o momento.

Share this post


Link to post
Share on other sites

Estou com mesmo erro em uma situação um pouco diferente, no kit de teste da cielo em um servidor local funciona normal mais quando implemento no site dá o seguinte erro no arq de log.log

 

2 WARNING - 2011-06-21 14:34:22 (BRT)

ARQUIVO: C:\xampp\htdocs\Clientes\...\cielo\includes\include.php(Linha 69)

MENSAGEM:

curl_error(): 54 is not a valid cURL handle resource

 

alguem sabe pq ?

 

[]s

Share this post


Link to post
Share on other sites

em cima dela, coloque:

var_dump( $sessao_curl );

 

e poste tb a linha onde essa varivel é criada.

Share this post


Link to post
Share on other sites

ok vlwss brigadao funcionou

 

estava passando o valor com virgula 11,90 retirei ficou 1190

 

 

mais o erro era uma pasta que nao tinha copiado para a minha aplicação a pasta ssl sem ela nao funciona

 

 

 

vlwss ai

[]s

Share this post


Link to post
Share on other sites

Eu mesmo respondo: há um erro de lógica no script do exemplo. A função curl_error é passada APÓS o fechamento da sessão e portanto o handle não existe mais. Deveria ser:

$resultado = curl_exec($sessao_curl);

if (!$resultado) $curl_error = curl_error($sessao_curl); // Capturo o erro ANTES de fechar

curl_close($sessao_curl);

// pronto! Agora tenho em $curl_error a mensagem do erro.

if (!$resultado) echo "<br><font size=6>" . $curl_error ;

else

// deu certo. prosseguir .....

 

Estou tendo um erro no exemplo da loja PHP e não consigo compreender o motivo. Efetuei um rastreamento e o erro está no comando

 

$resultado = curl_exec($sessao_curl);

 

do módulo include.php. Segundo o log:

 

2 WARNING - 2011-06-20 15:38:41 (BRT)

ARQUIVO: /includes/include.php(Linha 73)

MENSAGEM: curl_error(): 8 is not a valid cURL handle resource

 

Instalei o código em 2 servidores diferentes, e o problema é exatamente igual.

 

Aparentemente o XML foi gerado satisfatoriamente, e o comando curl_init() e os curl_setopt anteriores deram true.

 

Alguém poderia me dar uma ideia do que pode estar acontecendo? Suspeito que falte algum recurso, mas não achei nada até agora e o suporte da Cielo nem respondeu até o momento.

 

Há um erro de lógica no script do exemplo. A função curl_error é passada APÓS o fechamento da sessão e portanto o handle não existe mais. Deveria ser:

$resultado = curl_exec($sessao_curl);

if (!$resultado) $curl_error = curl_error($sessao_curl); // Capturo o erro ANTES de fechar

curl_close($sessao_curl);

// pronto! Agora tenho em $curl_error a mensagem do erro.

if (!$resultado) echo "<br><font size=6>" . $curl_error ;

else

// deu certo. prosseguir .....

em cima dela, coloque:

var_dump( $sessao_curl );

 

e poste tb a linha onde essa varivel é criada.

Share this post


Link to post
Share on other sites

Eu tive esse problema também...

Não mexam na função cRUL que já vem pronta.

 

Se não me engano o problema era devido ao fato de eu ter esquecido de copiar a pasta SSL que vem no exemplo para o mesmo local dos arquivos .php da loja.

 

Espero que seja isso e ajude.

Abraços

Share this post


Link to post
Share on other sites

Tive o mesmo problema...

 

para resolver é só fazer o que o amigo André Xori, comentou, caso tenha a pasta verifique o nome do certificado que está no arquivo include.php e o nome do certificado que está na pasta ssl da loja exemplo boa.

 

no meu caso continuou com o problema até eu checar as permissões da pasta ssl precisa estar com permissão de escrita "777".

 

depois que dei permissão 777 para a pasta funcionou perfeitamente..

 

Abrass, tt

Share this post


Link to post
Share on other sites

Mesmo sendo um tópico bem antigo, vou resumir aqui o problema mais comumente encontrado e a solução:

 

O kit da CIELO da loja PHP contém uma pasta chamada "SSL". Quando foi gerado o arquivo .ZIP que está no site da CIELO, o arquivo de extensão ".CRT" acaba ficando com o nome truncado, como "Cert~.crt". Então para resolver faça o seguinte:

 

1. Copie a loja exemplo .php para o seu servidor (com um programa ftp qualquer, por exemplo).

2. Localize a subpasta SSL no seu servidor;

3. Altere o nome do arquivo com extensão .CRT para "verisign.crt";

4. Altere a permissão da pasta SSL para "escrita e leitura", e não somente leitura. A maioria dos provedores de hospedagem possuem um gerenciador de arquivos para conceder permissões de gravação;

5. Acesse o arquivo "includes.php" que está dentro da pasta INCLUDES e localize o seguinte comentário:

// CURLOPT_SSL_CAINFO
Aqui tenha certeza que o nome do arquivo esteja exatamente igual ao nome do arquivo alterado no passo (3):
// informa a localização do certificado para verificação com o peer
curl_setopt($sessao_curl, CURLOPT_CAINFO, getcwd() .
"/ssl/verisign.crt");
curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 3);

 

6. Faça o upload do arquivo includes.php recém alterado em substitução ao arquivo anterior e... pronto!

Edited by Ricardo Pedrassani

Share this post


Link to post
Share on other sites

Obrigado pela dica Ricardo... baixei o modulo no site da cielo e veio com o arquivo .crt diferente do descrito dentro do include.php

 

Thanks!

Share this post


Link to post
Share on other sites

Para aqueles que estão com problemas com a tela que fica parada em redirecionamento aqui vai a solução.

 

Para aqueles que ainda estão com problemas, a Cielo mudou seu protocolo, mudem a linha:

DE: curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 3);
PARA: curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 4);

Share this post


Link to post
Share on other sites

Para aqueles que estão com problemas com a tela que fica parada em redirecionamento aqui vai a solução.

 

Para aqueles que ainda estão com problemas, a Cielo mudou seu protocolo, mudem a linha:

DE: curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 3);

PARA: curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 4);

 

Mesmo seguindo tudo isso, ainda continuo com a tela parando em Redirecionando... e ocorrendo o mesmo erro no log. Podem me dar um help?

Share this post


Link to post
Share on other sites

Olá pessoal alguém teve problema com a Cielo CURL com servidor fora, eu estava no Brasil e migrei para Canadá.

Fiz um FullBackup Cpanel para Cpanel e reistalei o SSL da Godaddy. TUDO OK.. :-)

Estranho quando eu coloco qualquer dominio local (Brasileiro) funciona de primeira, testei em 2 servidores BR e 4 USA e 1 no Canadá não funciona... Mensagem Redirecionando...

Mandei mensagem para Cielo o log.log e XML.log e sempre mete a culpa no servidor canadense.

As configurações do Curl no meu php.ini

 

CURL

cURL support enabled cURL Information 7.38.0 Age 3 Features AsynchDNS No CharConv No Debug No GSS-Negotiate No IDN Yes IPv6 Yes krb4 No Largefile Yes libz Yes NTLM Yes NTLMWB Yes SPNEGO No SSL Yes SSPI No TLS-SRP No Protocols dict, file, ftp, ftps, gopher, http, https, imap, imaps, pop3, pop3s, rtsp, smtp, smtps, telnet, tftp Host x86_64-unknown-linux-gnu SSL Version OpenSSL/1.0.0 ZLib Version 1.2.3 openssl OpenSSL support enabled OpenSSL Library Version OpenSSL 1.0.1e-fips 11 Feb 2013 OpenSSL Header Version OpenSSL 1.0.1e-fips 11 Feb 2013

ERRO
**********************************************************
2 WARNING - 2015-11-23 18:12:36 (BRST)
ARQUIVO: /home/controle/public_html/cielo/includes/include.php(Linha 69)
MENSAGEM:
curl_error(): 8 is not a valid cURL handle resource


***DETALHE ESTOU TESTANTANDO NO MODO PRODUÇÃO, POIS AMBIENTE TESTE NÃO FUNCIONA

 

 

Script PHP ** include.php

define("ENDERECO_BASE", "https://ecommerce.cielo.com.br");
define("ENDERECO", ENDERECO_BASE."/servicos/ecommwsec.do");

define("LOJA", "XXXXXX"); // CODIGO DE ESTABELICIMENTO CIELO ENVIA
define("LOJA_CHAVE", "XXXXXXXXXXX");// CHAVE CIELO ENVIA

require 'errorHandling.php';
require_once 'pedido.php';
require_once 'logger.php';
define('VERSAO', "1.1.0");
// Envia requisição
function httprequest($paEndereco, $paPost){

    $sessao_curl = curl_init();
    curl_setopt($sessao_curl, CURLOPT_URL, $paEndereco);
    
    curl_setopt($sessao_curl, CURLOPT_FAILONERROR, true);

    //  CURLOPT_SSL_VERIFYPEER
    //  verifica a validade do certificado
    curl_setopt($sessao_curl, CURLOPT_SSL_VERIFYPEER, true);
    //  CURLOPPT_SSL_VERIFYHOST
    //  verifica se a identidade do servidor bate com aquela informada no certificado
    curl_setopt($sessao_curl, CURLOPT_SSL_VERIFYHOST, 2);

    //  CURLOPT_SSL_CAINFO
    //  informa a localização do certificado para verificação com o peer
    curl_setopt($sessao_curl, CURLOPT_CAINFO, getcwd() .
            "/ssl/VeriSign.crt");
    curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 4);

    //  CURLOPT_CONNECTTIMEOUT
    //  o tempo em segundos de espera para obter uma conexão
    curl_setopt($sessao_curl, CURLOPT_CONNECTTIMEOUT, 10);

    //  CURLOPT_TIMEOUT
    //  o tempo máximo em segundos de espera para a execução da requisição (curl_exec)
    curl_setopt($sessao_curl, CURLOPT_TIMEOUT, 40);

    //  CURLOPT_RETURNTRANSFER
    //  TRUE para curl_exec retornar uma string de resultado em caso de sucesso, ao
    //  invés de imprimir o resultado na tela. Retorna FALSE se há problemas na requisição
    curl_setopt($sessao_curl, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($sessao_curl, CURLOPT_POST, true);
    curl_setopt($sessao_curl, CURLOPT_POSTFIELDS, $paPost );

    $resultado = curl_exec($sessao_curl);
    
    curl_close($sessao_curl);

    if ($resultado)
    {
        return $resultado;
    }
    else
    {
        return curl_error($sessao_curl);
    }
}

Estou quebrando a cabeça a dias pesquisando tentando uma solução, pois estamos sem pagamento com cartão.
Se achar algo posto aqui!!

Alguem poderia me ajuda?



Share this post


Link to post
Share on other sites

Olá pessoal alguém teve problema com a Cielo CURL com servidor fora, eu estava no Brasil e migrei para Canadá.

Fiz um FullBackup Cpanel para Cpanel e reistalei o SSL da Godaddy. TUDO OK.. :-)

Estranho quando eu coloco qualquer dominio local (Brasileiro) funciona de primeira, testei em 2 servidores BR e 4 USA e 1 no Canadá não funciona... Mensagem Redirecionando...

 

Mandei mensagem para Cielo o log.log e XML.log e sempre mete a culpa no servidor canadense.

As configurações do Curl no meu php.ini

 

CURL

cURL support enabled cURL Information 7.38.0 Age 3 Features AsynchDNS No CharConv No Debug No GSS-Negotiate No IDN Yes IPv6 Yes krb4 No Largefile Yes libz Yes NTLM Yes NTLMWB Yes SPNEGO No SSL Yes SSPI No TLS-SRP No Protocols dict, file, ftp, ftps, gopher, http, https, imap, imaps, pop3, pop3s, rtsp, smtp, smtps, telnet, tftp Host x86_64-unknown-linux-gnu SSL Version OpenSSL/1.0.0 ZLib Version 1.2.3 openssl OpenSSL support enabled OpenSSL Library Version OpenSSL 1.0.1e-fips 11 Feb 2013 OpenSSL Header Version OpenSSL 1.0.1e-fips 11 Feb 2013

ERRO

**********************************************************

2 WARNING - 2015-11-23 18:12:36 (BRST)

ARQUIVO: /home/controle/public_html/cielo/includes/include.php(Linha 69)

MENSAGEM:

curl_error(): 8 is not a valid cURL handle resource

 

 

***DETALHE ESTOU TESTANTANDO NO MODO PRODUÇÃO, POIS AMBIENTE TESTE NÃO FUNCIONA

 

 

Script PHP ** include.php

define("ENDERECO_BASE", "https://ecommerce.cielo.com.br");
define("ENDERECO", ENDERECO_BASE."/servicos/ecommwsec.do");

define("LOJA", "XXXXXX"); // CODIGO DE ESTABELICIMENTO CIELO ENVIA
define("LOJA_CHAVE", "XXXXXXXXXXX");// CHAVE CIELO ENVIA

require 'errorHandling.php';
require_once 'pedido.php';
require_once 'logger.php';
define('VERSAO', "1.1.0");
// Envia requisição
function httprequest($paEndereco, $paPost){

    $sessao_curl = curl_init();
    curl_setopt($sessao_curl, CURLOPT_URL, $paEndereco);
    
    curl_setopt($sessao_curl, CURLOPT_FAILONERROR, true);

    //  CURLOPT_SSL_VERIFYPEER
    //  verifica a validade do certificado
    curl_setopt($sessao_curl, CURLOPT_SSL_VERIFYPEER, true);
    //  CURLOPPT_SSL_VERIFYHOST
    //  verifica se a identidade do servidor bate com aquela informada no certificado
    curl_setopt($sessao_curl, CURLOPT_SSL_VERIFYHOST, 2);

    //  CURLOPT_SSL_CAINFO
    //  informa a localização do certificado para verificação com o peer
    curl_setopt($sessao_curl, CURLOPT_CAINFO, getcwd() .
            "/ssl/VeriSign.crt");
    curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 4);

    //  CURLOPT_CONNECTTIMEOUT
    //  o tempo em segundos de espera para obter uma conexão
    curl_setopt($sessao_curl, CURLOPT_CONNECTTIMEOUT, 10);

    //  CURLOPT_TIMEOUT
    //  o tempo máximo em segundos de espera para a execução da requisição (curl_exec)
    curl_setopt($sessao_curl, CURLOPT_TIMEOUT, 40);

    //  CURLOPT_RETURNTRANSFER
    //  TRUE para curl_exec retornar uma string de resultado em caso de sucesso, ao
    //  invés de imprimir o resultado na tela. Retorna FALSE se há problemas na requisição
    curl_setopt($sessao_curl, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($sessao_curl, CURLOPT_POST, true);
    curl_setopt($sessao_curl, CURLOPT_POSTFIELDS, $paPost );

    $resultado = curl_exec($sessao_curl);
    
    curl_close($sessao_curl);

    if ($resultado)
    {
        return $resultado;
    }
    else
    {
        return curl_error($sessao_curl);
    }
}

Estou quebrando a cabeça a dias pesquisando tentando uma solução, pois estamos sem pagamento com cartão.

Se achar algo posto aqui!!

 

Alguem poderia me ajuda?

 

 

 

Depois de muito testes de comando.

Coloque este antes do fechamento do curl e descobri os erros!

 

error_log('---------- Aqui começam os erros do CURL ---------- ');

error_log(print_r(curl_errno($sessao_curl),true));

error_log(print_r(curl_error($sessao_curl),true));

error_log('---------- Aqui acabam os erros do CURL ---------- ');

 

Está funcionado no momento!

*** Percebi que a Cielo fica fora do ar e as vezes o Curl não faz a conexão, interessante um código de verificação antes de executar

ERRO:

curl_error(): 21 is not a valid cURL handle resource

 

Se aparecer mais alguma novidade volto postar aqui!!

 

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.