Jump to content
Fórum Script Brasil
  • 0

Implementação CIELO


Carlos Rocha

Question

Pessoal.

Bom Dia!

Peguei um site para fazer de um cliente que tem aquela maquininha da CIELO na loja dele.

Agora, ele quer vender pelo site tambem.

A loja virtual, com a ajuda de vocês, já consegui fazer.

Inclusive, para pagamento com boleto e deposito on line já funciona.

Agora preciso de implentar pagamento CIELO.

Baixei um pacote nbo site da CIELO onde, a pagina principal, é o script abaixo:

<?php 

    require "../includes/include.php";

    $Pedido = new Pedido();
    
    // Lê dados do $_POST
    $Pedido->formaPagamentoBandeira = $_POST["codigoBandeira"]; 

    $Pedido->formaPagamentoProduto = 3; // Administradora
    $Pedido->formaPagamentoParcelas = $_POST["formaPagamento"];
    
    $Pedido->dadosEcNumero = CIELO;
    $Pedido->dadosEcChave = CIELO_CHAVE;
    
    $Pedido->capturar = false;    
    $Pedido->autorizar = 1;
    
    $Total_Pedido = str_replace($_POST["TOTAL"], ",", "");
    $Total_Pedido = str_replace($Total_Pedido, ".", "");
    
    $Pedido->dadosPedidoNumero = $_POST["NUMPEDIDO"]; 
    $Pedido->dadosPedidoValor = $Total_Pedido;
    
    $Pedido->urlRetorno = ReturnURL();
    
    // ENVIA REQUISIÇÃO SITE CIELO
    $objResposta = $Pedido->RequisicaoTransacao(false);
    
    $Pedido->tid = $objResposta->tid;
    $Pedido->pan = $objResposta->pan;
    $Pedido->status = $objResposta->status;
    
    $urlAutenticacao = "url-autenticacao";
    $Pedido->urlAutenticacao = $objResposta->$urlAutenticacao;

    // Serializa Pedido e guarda na SESSION
    $StrPedido = $Pedido->ToString();
    $_SESSION["pedidos"]->append($StrPedido);
    

    echo '<script type="text/javascript">
            window.location.href = "' . $Pedido->urlAutenticacao . '"
         </script>';

?>
Fiz as devidas configuraçoes, enviei para esta pagina via post, os dados necessários, mas esta me retornando esse erro:
Ocorreu um erro em sua transação!
Detalhes do erro:

     Código do erro: 001
     Mensagem: 
O XML informado não é valido:
- Invalid decimal value: expected at least one digit: ''
- Invalid boolean value '': ''

Mas não esta especificado que erro é esse.

É esse mesmo procedimento?

Não estaria faltando nada?

Grato a quem puder ajudar.

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Ainda não consegui e grato na quem puder contribuir.

Todo xml que eu coloco da pagina em branco.

E, quando vou ver o que tem em Exibir-> codigo fonte, dá isso:

string(194) "<?xml version="1.0" encoding="ISO-8859-1"?>
<erro xmlns="http://ecommerce.cbmp.com.br"><codigo>001</codigo><mensagem>XML inválido: 'error: XML declaration is not well-formed'.</mensagem></erro>
"
int(0)
string(0) ""
Seguindo no manual da Cielo. Cheguei nesse xml:
<?php
 /**
 * Template do XML que será usado para criação da mensagem
 */
 $autenticacao ='
<?xml version="1.0" encoding="ISO-8859-1"?>
<requisicao-transacao id="1" versao="1.0.0" xmlns="http://ecommerce.cbmp.com.br">
        <dados-ec>
                <numero>1001734898</numero>
                <chave>e84827130b9837473681c2787007da5914d6359947015a5cdb2b8843db0fa832</chave>
                <nome>eden</nome>
                <codigo-pais>097</codigo-pais>
        </dados-ec>
        <dados-portador>
                <numero>285813768<</numero>
                <validade>201212</validade>
                <indicador>1</indicador>
                <codigo-seguranca>1</codigo-seguranca>
                <nome-portador>José Elias</nome-portador>
        </dados-portador>
        <dados-pedido>
                <numero>23</numero>
                <valor>100</valor>
                <moeda>986</moeda>
                <data-hora>'.date("Y-m-d").'T'.date("H:i:s").'</data-hora>
                <descricao></descricao>
                <idioma>PT</idioma>
        </dados-pedido>
        <forma-pagamento>
                <bandeira>1</bandeira>
                <produto>1</produto>
                <parcelas>1</parcelas>
        </forma-pagamento>
        <url-retorno>http://localhost/php/silvinhoeletronica.com.br/retorno_cartao.php</url-retorno>     
        <autorizar>2</autorizar>
        <capturar>false</capturar>
        <campo-livre></campo-livre>
        <bin>813768</bin>        
</requisicao-transacao>
     ';

 $afiliacao = 123456;
 $chave = 'chave';
 $loja = 'Sua Loja';
 $pedido = 123;
 $valor = 100;
 $data = strftime( '%Y-%m-%dT%H:%M:%S' );
 $produto = '1';
 $parcelas = 1;
 $retorno = sprintf( 'http://teste.sualoja.com.br/pedido/%d' , $pedido );
 $mensagem = sprintf( $autenticacao , $afiliacao , $chave , $loja , $pedido , $valor , $data , $produto , $parcelas , $retorno );
 $curl = curl_init();

 if ( is_resource( $curl ) ){
        curl_setopt($curl, CURLOPT_CAINFO, getcwd() .
            "/ssl/VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt");
        curl_setopt($curl, CURLOPT_SSLVERSION, 3);
     
        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 {
                var_dump( $xml , $ern , $err );
        }
 } else {
        echo 'Opz, não foi possível criar o recurso da cURL';
 }
?>

Obrigado ESerra.

Edited by Carlos Rocha
Link to comment
Share on other sites

  • 0

Bom, vamos tentar de outra forma:

Utilizando novamente o modelo do manual,

Agora só resta um erro para corrigir mas não acho ele.

Ocorreu um erro em sua transação!
Detalhes do erro:

     Código do erro: 001
     Mensagem: 
O XML informado não é valido:
- Invalid boolean value '': ''

Link to comment
Share on other sites

  • 0

O problema do booleano era que a variavel

$Pedido->capturar = 'false';

estava assim:

$Pedido->capturar = false;

E ai não estava aceitando.

Mas isso ai resolveu.

Agora só esta restando o problema de que, mesmo enviando os dados do cartão ainda é redirecionado para uma pagina que solicita os dados do cartão.

Vê o que tem de errado:

<?php 

    require "../includes/include.php";

    $Pedido = new Pedido();
    $tipoParcelamento=3; //Administradora
    // Lê dados do $_POST
    $Pedido->formaPagamentoBandeira = $_POST["codigoBandeira"]; 

    $Pedido->formaPagamentoProduto = 3; // Administradora

    if($_POST["formaPagamento"] != "A" && $_POST["formaPagamento"] != "1")
    {
        $Pedido->formaPagamentoProduto = $tipoParcelamento;
        $Pedido->formaPagamentoParcelas = $_POST["formaPagamento"];
    } 
    else 
    {
        $Pedido->formaPagamentoProduto = $_POST["formaPagamento"];
        $Pedido->formaPagamentoParcelas = 1;
    }
    //$Pedido->formaPagamentoParcelas = $_POST["formaPagamento"];
    
    $Pedido->dadosEcNumero = CIELO;
    $Pedido->dadosEcChave = CIELO_CHAVE;
    
    $Pedido->capturar = 'false';    
    $Pedido->autorizar = 2;
    
    $Pedido->dadosPedidoNumero = $_POST["NUMPEDIDO"]; 
    $Pedido->dadosPedidoValor = str_replace(",", "",str_replace(",", "", $_POST["TOTAL"]));
    
    $Pedido->urlRetorno = ReturnURL();
    
    // ENVIA REQUISIÇÃO SITE CIELO
    $objResposta = $Pedido->RequisicaoTransacao(false);
    
    $Pedido->tid = $objResposta->tid;
    $Pedido->pan = $objResposta->pan;
    $Pedido->status = $objResposta->status;
    
    $urlAutenticacao = "url-autenticacao";
    //$urlAutenticacao = "https://qasecommerce.cielo.com.br/servicos/ecommwsec.do";
    $Pedido->urlAutenticacao = $objResposta->$urlAutenticacao;

    // Serializa Pedido e guarda na SESSION
    $StrPedido = $Pedido->ToString();
    $_SESSION["pedidos"]->append($StrPedido);
    

    echo '<script type="text/javascript">
            window.location.href = "' . $Pedido->urlAutenticacao . '"
         </script>';

?>
include.php
<?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://qasecommerce.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/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_cartao.php", $pageURL);

    return $ReturnURL;
}

?>

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...