Ir para conteúdo
Fórum Script Brasil
  • 0

Implementação CIELO


Carlos Rocha

Pergunta

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 para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 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.

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...