Ir para conteúdo

POWERED BY:

Arquivado

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

Ingrid Louise

Integração com Módulo Cielo em PHP

Recommended Posts

Olá pessoal!

Estou desenvolvendo um E-commerce com módulo de pagamento Cielo - BUY PAGE CIELO.

Com a linguagem PHP. Não tenho conhecimentos sólidos em XML.

Já li diversos tópicos aqui no fórum, porém a dúvida continua.

 

Fiz uma página para o cliente digitar a forma de pagamento (Bem básico):

 

<form action="include.php" method="post">
<p>Valor</p>
  <p><input type="text" name="valor" id="valor" value="1,00"></p>
<p>Pagar com</p>
  <p><select name="bandeira">
     <option value="visa">Visa</option>
     <option value="mastercard">MasterCard</option>
     <option value="visa_electron">Visa Electron</option>
     <option value="diners">Diners</option>
     </select>
  </p>
<p>Número de Parcelas</p>
  <select name="parcelas">
     <option value="1">1</option>
     <option value="2">2</option>
     <option value="3">3</option>
  </select>
<p><input type="submit" value="Comprar" /></p>
</form>

 

Essa página está direcionando para o include.php, que é este:

<?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.cbmp.com.br");
define("ENDERECO", ENDERECO_BASE."/servicos/ecommwsec.do");

define("LOJA", "xxxxx");
define("LOJA_CHAVE", "xxxxx");
define("CIELO", "1001734898");
define("CIELO_CHAVE", "e84827130b9837473681c2787007da5914d6359947015a5cdb2b8843db0fa832");


// 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, false);
       //  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/VeriSignClass3PublicPrimaryCertificationAuthority-G5.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;
}

?>

 

Porém, isso foi a única coisa que fiz, e quando, no meu servidor esse formulário é enviado, simplesmente vai para uma página em branco e não faz mais nada.

Já enviei para o servidor a pasta ssl com o devido certificado.

 

Liguei para a Cielo diversas vezes, porém, não consegui sanar minhas dúvidas.

Como envio os métodos via POST para a Cielo?

Qual arquivo está faltando enviar/modificar?

 

Agradeço a quem poder me ajudar!

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ingrid,

 

Teste o seguinte:

 

no arquivo include.php

 

Troque:

curl_setopt($sessao_curl, CURLOPT_CAINFO, getcwd() .

"/ssl/VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt");

 

Por:

curl_setopt($sessao_curl, CURLOPT_CAINFO,"VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt");

 

Em alguns servidores o getcwd() não traduz o path correto ou mesmo está desabilitado.

 

E deixe o certificado .crt na mesma pasta que o formulário.

 

Mas existe um erro em seu formulário: o action dele não deve ser o include.php, pois neste não há instância da classe Pedido. Utilize o novopedidoAguarde.php que vem no pacote da Cielo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

QUI ESTA A SOLUÇÃO PARA QUEM TEM O ERRO CURL

 

No manual o script include.php na linha 42 tem:

 

curl_setopt($sessao_curl, CURLOPT_CAINFO, getcwd() .
"/ssl/VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt");
realmente não funciona em muitos servidores a solução é colocar o pat do server ONDE ESTA O CERTIFICADO:
exemplo:
curl_setopt($sessao_curl, CURLOPT_CAINFO,"/var/www/vhosts/dominio.com.br/httpdocs/cielo/pages/ssl/VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt");
OBS NO DOC DA CIELO O NOME DO CERTIFICADO ESTÁ ASSIM 'VERISI~1.CRT' RENOMEI ELE OK É IMPORTANTE!
QUEBREI A CABEÇA 02 DIAS PARA ACHAR O PROBLEMA E TÁ AI A SOLUÇÃO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu, vou precisar fazer esta integração em breve, e essas informações são relevantes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, alguém ai já fez liberação de transação após o crédito ser pré aprovado pela cielo?
eu já fiz a integração e homologação preciso fazer isso agora mas não achei nada que ajudasse, alguém consegue dar um norte aeh?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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