Ir para conteúdo

POWERED BY:

Arquivado

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

Wagner Martins - SC

Integração Cielo função curl

Recommended Posts

Boa tarde pessoal,

 

Estou com um e-commerce para colocar no ar e só preciso agora finalizar a parte do cartão de crédito, estou utlizando a Cielo, liguei para o suporte deles e falaram que é só fazer uma requisição Post que dps iria para o ambiente Cielo, então pesquisando na internet vi que da pra usar a função Curl do PHP, e cheguei a este código, quero ver como vcs se estou no caminho certo e se puderem me ajudar no meu código porque ele esta retornando pagina em branco.

 

 

<?php


$autenticacao = '<?xml version="1.0" encoding="ISO-8859-1"?>
<requisicao-transacao id="7" versao="1.1.1">
<dados-ec>
<numero>1001734898</numero>
<chave>e84827130b9837473681c2787007da5914d6359947015a5cdb2b8843db0fa832</chave>
</dados-ec>
<dados-portador>
<numero>4012001037141112</numero>(*=0)
<validade>201805</validade>
<indicador>1</indicador>
<codigo-seguranca>123</codigo-seguranca>
</dados-portador>
<dados-pedido>
<numero>1530561447</numero>
<valor>10000</valor>
<moeda>986</moeda>
<data-hora>2013-07-27T20:52:34</data-hora>
<descricao>descricaoDoPedido</descricao>
<idioma>PT</idioma>
</dados-pedido>
<forma-pagamento>
<bandeira>visa</bandeira>
<produto>1</produto>
<parcelas>1</parcelas>
</forma-pagamento>
<autorizar>3</autorizar>
<capturar>false</capturar>
</requisicao-transacao>';


$afiliacao = '99999999999';
$chave = "992411144122124cvdg747117007da5914d6359947015a5cdb2b8843db0fa832";
$loja = 'Empresa X';
$data = strftime( '%Y-%m-%dT%H:%M:%S' );
$retorno = sprintf( 'http://www.site.com.br/detpedido.php?pedido=%d' , $nrpedido );


$mensagem = sprintf( $autenticacao , $afiliacao , $chave , $loja , $nrpedido , $valor , $data , $produto , $parcela[0], $retorno );


/**
* Iniciando CURL
*/
$curl = curl_init();


if ( is_resource( $curl ) )
{
curl_setopt( $curl , CURLOPT_HEADER , 0 );
curl_setopt( $curl , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt( $curl , CURLOPT_FOLLOWLOCATION , 1 );
curl_setopt( $curl , CURLOPT_URL , 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do' );
curl_setopt( $curl , CURLOPT_POST , 1 );
curl_setopt( $curl , CURLOPT_POSTFIELDS , http_build_query( array( 'mensagem' => $mensagem ) ) );


$xml = curl_exec( $curl ); $ern = curl_errno( $curl ); $err = curl_error( $curl );


curl_close( $curl );


if ( (bool) $ern )
{
echo 'Opz, ocorreu um erro[' , $ern , ']: ' , $err;
} 
else 
{


$DadosEnvio= simplexml_load_string($xml);
foreach( $DadosEnvio as $c => $v ) // recupera valores
{
$c = str_replace( array("-"), array(""), $c); //para remover os - da variavel a ser criada 
$$c = $v;
}














}
}
else
{
echo 'Opz, não foi possível criar o recurso da cURL';
}




?>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O manual traz uma loja de modelo, basta copiar tudo de lá, lembrando apenas que muitas vezes o ambiente de testes não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Justamente ESerra a loja exemplo faz uns 40 dias q não esta funcionando, vc conhece outra saida, para resolver isso? Coo falei tem que ser por requisição Post, e n o meu código utlizri a uma fnção chamada Curl do PHP, é a mais indicada, pois me retorna uma pagina em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a loja não funciona provavelmente o ambiente de testes esteja off, neste caso você terá que testar com o ambiente de produção mesmo (mas ai precisa fazer a assinatura e etc...).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o link do Gateway Buy Page, e não necessita de servidor Https próprio.

 

Existe um problema no código lojaexemplo-php da Cielo;

 

No arquivo /includes/includes.php:

 

Deve ser comentadas ou excluídas as linhas:

 

define("LOJA", "1006993069");

define("LOJA_CHAVE", "25fbb99741c739dd84d7b06ec78c9bac718838630f30b112d033ce2e621b34f3");

 

Na função httprequest

Modifique o nome do certificado para :

curl_setopt($sessao_curl, CURLOPT_CAINFO, getcwd() .

"/ssl/meu_cerfificado.crt");

 

Modifique o nome do arquivo do certificado em /pages/ssl/

VERISI~1.CRT

 

para

 

meu_certificado.crt

 

Logo a lojaexemplo deles funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de baixar a última versão do manual da Cielo, as URLs que constam nele:

Homologação: https://qasecommerce.cielo.com.br/servicos/ecommwsec.do
Produção: https://ecommerce.cielo.com.br/servicos/ecommwsec.do

 

http://www.cielo.com.br/portal/kit-e-commerce-cielo.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem jeito de funcionar pela loja exemplo, fiz essas modificações todas no include.php, que coisa rsrsrs.

 

 

 

 

<?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", "1006993069");
//define("LOJA_CHAVE", "25fbb99741c739dd84d7b06ec78c9bac718838630f30b112d033ce2e621b34f3");
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, 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/meu_cerfificado.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;
}


?>

 

ESrra, depois eu tinha visto o endereço de produção sim, hehehe mais valeu a informação, tava la embaixo do manual, como eu teinha pego esse código na internet pronto já, resolvi fazer um meu mesmo, mais mesmo assim, me retorna esse erro:

 

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 2: parser error : StartTag: invalid element name in /home/linestur/public_html/ofertas/cielo.php on line 82

Warning: simplexml_load_string() [function.simplexml-load-string]: nsagem>XML inválido: 'error: Unexpected character encountered (lex state 9): '< in /home/linestur/public_html/ofertas/cielo.php on line 82

Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in /home/linestur/public_html/ofertas/cielo.php on line 82


Transação não autorizada:

 

 

 

Teria que redirecionar para o ambiente Cielo, poderia me ajudar nisso?

 

 

<?php
$id = '190'; //ID a compra, geralmente alguma chave primária.


$valor_total = '2200'; //Enviando o valor de R$22,00, observa que não existe separador de milhar e de centavos


$bandeira = 'visa'; //Bandeira, no caso a Visa, outras bandeiras olhar no manual


$agora = date('Y-m-d\TH:i:s'); //Data atual


$cartao_nome_titular = 'Fulano da Silva'; //Nome do dono do cartão exatamente como impresso no mesmo.


$numero_cartao = '4012001038443335'; //Número do cartão de crédito, apenas números.
          
$cartao_codigo = '123'; //Código de segurança do verso do cartão


$indicador = ($cartao_codigo != '')?'1':'0'; //Se o cartão não tiver código de segurança o indicaro é zero, caso contrário um


$data_vencimento = '201805'; //Ano com 4 dígitos e Mês com dois dígitos de vencimento do cartão, no exemplo maio de 2018.


$qtd_parcelas = '3'; //Quantidade total de parcelas


$produto = ($qtd_parcelas == '1')?'1':'3'; //Sempre que a quantidade de parcelas for igual a 1 o produto deve ser 1, caso contrário ele deve ser 2 ou 3 (ver o manual)


$autorizar = '3'; //No caso a '3' é a chamada "autorização direta", para entender o que é e quais as outras opções consulte o manual


$captura = 'true'; //A captura é quando após aprovada a transação você confirma para a operadora que quer o dinheiro, observe que se você não capturar, mesmo uma transação autorizada, não gerará débito para o usuário. No caso estou dizendo que se a transação for autorizada ela deve ser capturada, caso queira fazer a captura posteriormente devo usar false no lugar e posteriormente realizar a captura em outro procedimento.


$cielo_numero = '1006993069'; //Número de filiação da cielo, neste caso é o exemplo da homologação
$chave_cielo = '25fbb99741c739dd84d7b06ec78c9bac718838630f30b112d033ce2e621b34f3'; // Chave de filiação da cielo, neste caso é o exemplo da homologação


$string = "<<<xml <?xml=\"\" version=\"1.0\" encoding=\"ISO-8859-1\" ?=\"\">
<requisicao-transacao id=\"$id\" versao=\"1.1.1\">
    <dados-ec>
          <numero>$cielo_numero</numero>
          <chave>$chave_cielo</chave>
    </dados-ec>
    <dados-portador>
        <numero>$numero_cartao</numero>
        <validade>$data_vencimento</validade>
        <indicador>$indicador</indicador>
        <codigo-seguranca>$cartao_codigo</codigo-seguranca>
        <nome-portador><!--[CDATA[$cartao_nome_titular]]--></nome-portador>
    </dados-portador>
    <dados-pedido>
    <numero>$id</numero>
    <valor>$valor_total</valor>
    <moeda>986</moeda>
    <data-hora>$agora</data-hora>
    <descricao><!--[CDATA[{Exemplo www.profissionaisdaweb.com.br]]--></descricao>
    <idioma>PT</idioma>
    </dados-pedido>
    <forma-pagamento>
        <bandeira>$bandeira</bandeira>
        <produto>$produto</produto>
        <parcelas>$qtd_parcelas</parcelas>
    </forma-pagamento>
    <autorizar>$autorizar</autorizar>
    <capturar>$captura</capturar>
</requisicao-transacao>";


if($cielo_numero == '1006993069'){
    //Ambiente de testes
    $url = 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do';
}else{
    //Ambiente de produção
    $url = 'https://ecommerce.cbmp.com.br/servicos/ecommwsec.do';
}


      
    $ch = curl_init();
    flush();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,  'mensagem=' . $string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 40);
    $string = curl_exec($ch);
    curl_close($ch);
    $xml = simplexml_load_string($string);
    
    if ($xml->tid){
        echo 'TID da transação: '.$xml->tid.'<br>';
        if($xml->captura->codigo == '6' AND $xml->autorizacao->codigo == '6'){
            echo 'Transação autorizada pela operadora do cartão!';
        }else{
            echo 'Transação não autorizada: '.$xml->autorizacao->mensagem.'.';
        }       
    }else{
        echo 'Transação não autorizada: '.$xml->mensagem;
    }
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá eu nunca implementei a cielo buy page e portanto tentei fazer uns testes inicialmente na loja exemplo, fiz as modificações de acordo com o que fui vendo nos posts, mas estou sempre tendo esse erro:


Error 500--Internal Server Error From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1: 10.5.1 500 Internal Server Error

The server encountered an unexpected condition which prevented it from fulfilling the request.

 

Fui ver e o site de vocês também está dando o mesmo erro.

Alguém poderia me ajudar?

https://papelariazonca.com.br/cielo/lojaexemplo-php/pages/

g
rato,

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.