Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wagner Martins - SC

Cielo, Curl

Recommended Posts

Estou com problema para fazer a integração da Cielo, está retornando esse erro

 

06-28 13:52:07 (BRT)
     ARQUIVO: /home//public_html/lojaexemplo-php/includes/include.php(Linha 141)
     MENSAGEM: 
curl_error(): 10 is not a valid cURL handle resource
O que pode ser?
Meu código é esse?
<?php






require 'errorHandling.php';


require_once 'pedido.php';


require_once 'logger.php';






define('VERSAO', "1.1.0");






session_start();






if(!isset($_SESSION["pedidos"]))


{


$_SESSION["pedidos"] = new ArrayObject();


}






// CONSTANTES


define("ENDERECO_BASE","https://ecommerce.cielo.com.br"); 


define("ENDERECO", ENDERECO_BASE."/servicos/ecommwsec.do");






define("LOJA", "1061233968"); 


define("LOJA_CHAVE", "2457a530c38381b2bf34608da2c3521f41ecdfdefb9ee01d25fc981ad09f5ed7");










// 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, 3);






//  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);


}


}






// Monta URL de retorno


function ReturnURL()


{


$pageURL = 'http';






if ($_SERVER["SERVER_PORT"] == 443) // protocolo https


{


$pageURL .= 's';


}


$pageURL .= "://";


if ($_SERVER["SERVER_PORT"] != "80")


{


$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];


} else {


$pageURL .= $_SERVER["SERVER_NAME"]. substr($_SERVER["REQUEST_URI"], 0);


}


// ALTERNATIVA PARA SERVER_NAME -> HOST_HTTP






$file = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);






$ReturnURL = str_replace($file, "retorno.php", $pageURL);






return $ReturnURL;


}






?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está chamando curl_error depois de usar o curl_close.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz assim e agora retorna isso

 

Ocorreu um erro em sua transa��o!
Detalhes do erro:
C�digo do erro: 99


Mensagem: HTTP READ TIMEOUT - o Limite de Tempo da transa��o foi estourado
<?php






require 'errorHandling.php';


require_once 'pedido.php';


require_once 'logger.php';






define('VERSAO', "1.1.0");






session_start();






if(!isset($_SESSION["pedidos"]))


{


$_SESSION["pedidos"] = new ArrayObject();


}






// CONSTANTES


define("ENDERECO_BASE","https://ecommerce.cielo.com.br"); 


define("ENDERECO", ENDERECO_BASE."/servicos/ecommwsec.do");






define("LOJA", "1061233968"); 


define("LOJA_CHAVE", "2457a530c38381b2bf34608da2c3521f41ecdfdefb9ee01d25fc981ad09f5ed7");










// 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, 3);






//  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);












if ($resultado)


{


return $resultado;


}


else


{


return curl_error($sessao_curl);


}
curl_close($sessao_curl);




}






// Monta URL de retorno


function ReturnURL()


{


$pageURL = 'http';






if ($_SERVER["SERVER_PORT"] == 443) // protocolo https


{


$pageURL .= 's';


}


$pageURL .= "://";


if ($_SERVER["SERVER_PORT"] != "80")


{


$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];


} else {


$pageURL .= $_SERVER["SERVER_NAME"]. substr($_SERVER["REQUEST_URI"], 0);


}


// ALTERNATIVA PARA SERVER_NAME -> HOST_HTTP






$file = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);






$ReturnURL = str_replace($file, "retorno.php", $pageURL);






return $ReturnURL;


}






?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é o erro que o curl_error está informando...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vi ali que precisa trocar essa linha

curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 3);
por essa
curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 4);
agora esta retornando isso
Transação Status transa��o
Número pedido 5335340
Finalizado com sucessonão
Transação 1061233968000000059A
Status: Não autorizada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tchê, a primeira coisa que eu recomendo, leia o manual da cielo, depois tenha certeza que está usando as credenciais corretas, se tudo isto estiver ok, ai ligue na cielo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por gustavopinent
      Olá! Esse erro ocorre em um php simples rodando em um servidor compartilhado Locaweb: SSL certificate problem: unable to get local issuer certificate. O php faz uma requisição ao site do Cep Aberto para consulta de endereço informando o CEP (https://www.cepaberto.com/api/v3/cep?cep=95020520)
       
      Olhei o php.ini e não tem nenhuma menção ao arquivo de certificados. Então peguei alguns tutoriais, baixei o arquivo "cacert.pem", coloquei lá e defini o curl no próprio php, ficou assim:
      $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Token token="' . $token . '"']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_CAINFO, $cacert); curl_setopt($ch, CURLOPT_CAPATH, $cacert); $res = curl_exec($ch); if($res===FALSE) { $Res["erro"] = "curl"; $Res["msg"] = "Execução CURL falhou!"; $Res["descr"] = curl_error($ch); } else { $Res["dados"] = json_decode($res); $Res["http"] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $Res["erro"] = ($Res["http"]==200)? "OK" : "http" ; $Res["msg"] = ($Res["http"]==200)? "" : "Erro HTTP ".$Res["http"] ; } Onde $cacert é o endereço do arquivo "cacert.pem", verificado antes por is_file. Mas o erro é o mesmo, como se eu nada tivesse feito. Tem que configura o Apache? Não sei como configurar o Apache, será que posso? Desabilitar o SSL do php é uma opção que não tentei ainda, dizem que não é aconselhável...
       
      O PHP é o 5.6 (pretendo ir pro 7.4 em breve) e o servidor é CENTOS 5.11 compartilhado, hospedagem Locaweb.
       
      Alguma ideia? 
    • Por Wyrv
      Boa tarde pessoal, 

      Sou meio novo em programação web.
      Estou com o seguinte problema, qualquer ajuda será bem vinda.

      Em PHP, etou montando uma URL pra ser acessada com o comando Curl. 
      Tudo está funcionando, consigo executar e receber o retorno da URL no meu script.

      Porém o retorno parece vir em html, e a resposta que eu quero estar está no meio de tudo.
       
      <form name="IntegracaoForm" method="post" action="/integracao.do;jsessionid=C221B55C9AF93E1A94403FAA52943FB0" enctype="multipart/form-data" id="IntegracaoForm"> <table > <tbody> <tr> <td> 000 </td> </tr> </tbody> </table> </form><br>FIM<br>-> <br /> O código de retorno vem onde está o 000.
      No caso eu preciso validar esse retorno, mas eu não estou conseguindo uma forma de jogar esse valor pra uma variável pra realizar um if.

      Alguém pode me dar alguma ideia?

      Agradeço desde já.
       
    • Por arlindophp
      <?php
       
      function doPut($url, $fields)
      {
          $fields = (is_array($fields)) ? http_build_query($fields) : $fields;
       
          if ($ch = curl_init($url)) {
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
              curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
              curl_exec($ch);
              //$resp = curl_exec($ch);
       
              $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       
              curl_close($ch);
       
              return (int) $status;
          } else {
              return false;
          }
      }
       
      session_start();
      $s_chave = $_POST['edtChave'];
      $_SESSION['s_chave'] = $s_chave;
      $edtChave = $_POST['edtChave'];
       
      $edtCultura = $_POST['edtCultura'];
      $edtPraga = $_POST['edtPraga'];
      $edtDose = $_POST['edtDose'];
      $edtEspecificacao = $_POST['edtEspecificacao'];
      $edtAplicaTerrestre = $_POST['edtAplicaTerrestre'];
      $edtAplicarea = $_POST['edtAplicarea'];
      $edtIntseg = $_POST['edtIntseg'];
      $edtIntEntrada = $_POST['edtIntEntrada'];
      $edtDadosGerais = $_POST['edtDadosGerais'];
       
      $url = "www.api.site.com";
      echo 'Url = ' . $url;
      echo '<br>';
       
          $data_array2 = array();
          for ($i = 0; $i < 5; $i++) {
              $montagem_array = array(
                  'cultura' => $_POST['edtCultura'],
                  'praga' => $_POST['edtPraga'],
                  'dose' => $_POST['edtDose'],
                  'especificacao' => $_POST['edtEspecificacao'],
                  'aplicaterrestre' => $_POST['edtAplicaTerrestre'],
                  'aplicaerea' => $_POST['edtAplicarea'],
                  'intseg' => $_POST['edtIntseg'],
                  'intentrada' => $_POST['edtIntEntrada'],
                  'dadosgerais' => $_POST['edtDadosGerais'],
              );
       
              $data_array2[$i] = $montagem_array;
          }
       
          //$json = json_encode($data_array2);
       
      echo '<br>';
      echo 'Array convertido para formato json: ' . json_encode($data_array2);
      echo '<br>';
      //$data = $array_para_string;
      //echo $data.'+cultura=asdf&praga=asdf&dose=dasf&especificacao=sadf&aplicaterrestre=sadf&aplicaerea=asdf&intseg=2&intentrada=1&dadosgerais=sdaf';
       
      $header = array(
          'Authorization: falkdsjçlaskf'
       
      );
       
      //Nova tentativa 07/01/2022
      if (doPut($url, $data_array2) == 200) {
       
          echo 'Passou!';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      // do something
      else {
          echo 'Não deu certo';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      //Nova tentativa
       
      //header('location:jsonpostprodutobula_teste.php');
    • Por arlindophp
      <?php
       
      function doPut($url, $fields)
      {
          $fields = (is_array($fields)) ? http_build_query($fields) : $fields;
       
          if ($ch = curl_init($url)) {
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
              curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
              curl_exec($ch);
              //$resp = curl_exec($ch);
       
              $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       
              curl_close($ch);
       
              return (int) $status;
          } else {
              return false;
          }
      }
       
      session_start();
      $s_chave = $_POST['edtChave'];
      $_SESSION['s_chave'] = $s_chave;
      $edtChave = $_POST['edtChave'];
       
      $edtCultura = $_POST['edtCultura'];
      $edtPraga = $_POST['edtPraga'];
      $edtDose = $_POST['edtDose'];
      $edtEspecificacao = $_POST['edtEspecificacao'];
      $edtAplicaTerrestre = $_POST['edtAplicaTerrestre'];
      $edtAplicarea = $_POST['edtAplicarea'];
      $edtIntseg = $_POST['edtIntseg'];
      $edtIntEntrada = $_POST['edtIntEntrada'];
      $edtDadosGerais = $_POST['edtDadosGerais'];
       
      $url = "www.api.site.com";
      echo 'Url = ' . $url;
      echo '<br>';
       
          $data_array2 = array();
          for ($i = 0; $i < 5; $i++) {
              $montagem_array = array(
                  'cultura' => $_POST['edtCultura'],
                  'praga' => $_POST['edtPraga'],
                  'dose' => $_POST['edtDose'],
                  'especificacao' => $_POST['edtEspecificacao'],
                  'aplicaterrestre' => $_POST['edtAplicaTerrestre'],
                  'aplicaerea' => $_POST['edtAplicarea'],
                  'intseg' => $_POST['edtIntseg'],
                  'intentrada' => $_POST['edtIntEntrada'],
                  'dadosgerais' => $_POST['edtDadosGerais'],
              );
       
              $data_array2[$i] = $montagem_array;
          }
       
          //$json = json_encode($data_array2);
       
      echo '<br>';
      echo 'Array convertido para formato json: ' . json_encode($data_array2);
      echo '<br>';
      //$data = $array_para_string;
      //echo $data.'+cultura=asdf&praga=asdf&dose=dasf&especificacao=sadf&aplicaterrestre=sadf&aplicaerea=asdf&intseg=2&intentrada=1&dadosgerais=sdaf';
       
      $header = array(
          'Authorization: falkdsjçlaskf'
       
      );
       
      //Nova tentativa 07/01/2022
      if (doPut($url, $data_array2) == 200) {
       
          echo 'Passou!';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      // do something
      else {
          echo 'Não deu certo';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      //Nova tentativa
       
      //header('location:jsonpostprodutobula_teste.php');
    • Por arlindophp
      Pessoal estou tentando realizar um put com um json utilizando a biblioteca curl, mas só consigo fazer um por vez. Existe alguma forma de fazer isso usando a biblioteca Curl do php? Segue o código fonte funcionando, mas o curl não está aceitando um array multidimensional.
      *****************************
      <?php   function doPut($url, $fields) {     $fields = (is_array($fields)) ? http_build_query($fields) : $fields;       if ($ch = curl_init($url)) {         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);         curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));         curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);         curl_exec($ch);         //$resp = curl_exec($ch);           $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);           curl_close($ch);           return (int) $status;     } else {         return false;     } }   session_start(); $s_chave = $_POST['edtChave']; $_SESSION['s_chave'] = $s_chave; $edtChave = $_POST['edtChave'];   $edtCultura = $_POST['edtCultura']; $edtPraga = $_POST['edtPraga']; $edtDose = $_POST['edtDose']; $edtEspecificacao = $_POST['edtEspecificacao']; $edtAplicaTerrestre = $_POST['edtAplicaTerrestre']; $edtAplicarea = $_POST['edtAplicarea']; $edtIntseg = $_POST['edtIntseg']; $edtIntEntrada = $_POST['edtIntEntrada']; $edtDadosGerais = $_POST['edtDadosGerais'];   $url = "www.api.site.com"; echo 'Url = ' . $url; echo '<br>';       $data_array2 = array();     for ($i = 0; $i < 5; $i++) {         $montagem_array = array(             'cultura' => $_POST['edtCultura'],             'praga' => $_POST['edtPraga'],             'dose' => $_POST['edtDose'],             'especificacao' => $_POST['edtEspecificacao'],             'aplicaterrestre' => $_POST['edtAplicaTerrestre'],             'aplicaerea' => $_POST['edtAplicarea'],             'intseg' => $_POST['edtIntseg'],             'intentrada' => $_POST['edtIntEntrada'],             'dadosgerais' => $_POST['edtDadosGerais'],         );           $data_array2[$i] = $montagem_array;     }       //$json = json_encode($data_array2);   echo '<br>'; echo 'Array convertido para formato json: ' . json_encode($data_array2); echo '<br>'; //$data = $array_para_string; //echo $data.'+cultura=asdf&praga=asdf&dose=dasf&especificacao=sadf&aplicaterrestre=sadf&aplicaerea=asdf&intseg=2&intentrada=1&dadosgerais=sdaf';   $header = array(     'Authorization: falkdsjçlaskf'   );   //Nova tentativa 07/01/2022 if (doPut($url, $data_array2) == 200) {       echo 'Passou!';     echo '<br>';     echo json_encode($data_array2);     echo '<br>'; } // do something else {     echo 'Não deu certo';     echo '<br>';     echo json_encode($data_array2);     echo '<br>'; } //Nova tentativa   //header('location:jsonpostprodutobula_teste.php');
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.