MAIS
    Home Featured Integração Cielo com PHP – Rápida, Fácil e Segura

    Integração Cielo com PHP – Rápida, Fácil e Segura

    25
    Integração Cielo com PHP – Rápida, Fácil e Segura

    Para você que quer fazer a Integração Cielo com PHP de forma fácil, rápida e segura segue um tutorial.

    Primeiramente vamos utilizar um conjunto de classes para nos auxiliar na integração do php com o web service da Cielo.

    Nessa biblioteca da Cielo, podemos utilizar os seguinte cartões:

    • American Express
    • Aura
    • Diners
    • Discover
    • Elo
    • JCB
    • Master Card
    • Visa

    Há suporte a integração com a Análise de Risco e AVS, porém para que as funcionalidades de análise de risco funcionem, o serviço precisa estar ativo junto a Cielo.

    Agora vamos ao que interessa, o código de como fazer a Integração Cielo com PHP

    Primeiramente vamos baixar a nossa biblioteca: Tritoq\Payment\Cielo

    Você pode baixar diretamente neste link.

    Para configurar descompacte a pasta baixada, e deixe a pasta Tritoq na raiz, inclua as classes em seu arquivo php:

    use Tritoq\Payment\Cielo\AnaliseRisco;
     use Tritoq\Payment\Cielo\Cartao;
     use Tritoq\Payment\Cielo\CieloService;
     use Tritoq\Payment\Cielo\Loja;
     use Tritoq\Payment\Cielo\Pedido;
     use Tritoq\Payment\Cielo\Portador;
     use Tritoq\Payment\Cielo\Transacao;
     use Tritoq\Payment\Cielo\AnaliseRisco\Modelo\ClienteAnaliseRiscoTest;
     use Tritoq\Payment\Cielo\AnaliseRisco\PedidoAnaliseRisco;
    
    $portador = new Portador();
     $portador
     ->setBairro('Meu Bairro')
     ->setCep('89900000')
     ->setComplemento('Sala 123')
     ->setEndereco('Rua Fulano de Tal');
    
    $loja = new Loja();
     $loja
     ->setNomeLoja('Nome da Loja')
     ->setAmbiente(Loja::AMBIENTE_TESTE)
     ->setUrlRetorno('http://google.com.br')
     ->setChave(Loja::LOJA_CHAVE_AMBIENTE_TESTE)
     ->setNumeroLoja(Loja::LOJA_NUMERO_AMBIENTE_TESTE);
     //->setSslCertificado("caminhodocertificado");
    
    $cartao = new Cartao();
     $cartao
     ->setNumero(Cartao::TESTE_CARTAO_NUMERO)
     ->setCodigoSegurancaCartao(Cartao::TESTE_CARTAO_CODIGO_SEGURANCA)
     ->setBandeira(Cartao::BANDEIRA_VISA)
     ->setNomePortador('Portador 1')
     ->setValidade(Cartao::TESTE_CARTAO_VALIDADE);
    
    
    $transacao = new Transacao();
     $transacao
     ->setAutorizar(Transacao::AUTORIZAR_SEM_AUTENTICACAO)
     ->setCapturar(Transacao::CAPTURA_NAO)
     ->setParcelas(1)
     ->setProduto(Transacao::PRODUTO_CREDITO_AVISTA);
    
    
    $pedido = new Pedido();
     $pedido
     ->setDataHora(new \DateTime('2014-02-02 23:32:12'))
     ->setDescricao('Descrição do Pedido')
     ->setIdioma(Pedido::IDIOMA_PORTUGUES)
     ->setNumero(9024)
     ->setValor(1200);
    
    $pedidoAnalise = new PedidoAnaliseRisco();
     $pedidoAnalise
     ->setEstado('SC')
     ->setCep('89802140')
     ->setCidade('Chapeco')
     ->setComplemento('Sala 1008')
     ->setEndereco('Rua Marechal Deodoro, 400')
     ->setId('123345')
     ->setPais('BR')
     ->setPrecoTotal(400.00)
     ->setPrecoUnitario(390.00);
    
    /// Esta é uma classe criada de exemplo, implementando a interface Tritoq\Payment\Cielo\AnaliseRisco\ClienteAnaliseRiscoInterface
    
    $cliente = new ClienteAnaliseRiscoTest();
     $cliente->nome = 'Artur';
     $cliente->sobrenome = 'Magahalhaes';
     $cliente->endereco = 'Rua Marechal Deodoro, 400';
     $cliente->complemento = 'Sala 1008';
     $cliente->cep = '89802140';
     $cliente->documento = '123456789123';
     $cliente->email = '[email protected]';
     $cliente->estado = 'SC';
     $cliente->cidade = 'Chapeco';
     $cliente->id = '9024';
     $cliente->ip = '192.168.1.254';
     $cliente->pais = 'BR';
     $cliente->senha = '12345';
     $cliente->telefone = '49912341234';
    
    /*
     *
     * Usando a Análise de Risco
     *
     */
    
    // Para qualquer ação será revista com ação manual posterior, caso seja de baixo risco, a transação será capturada automaticamente
    
    $analise = new AnaliseRisco();
     $analise
     ->setCliente($cliente)
     ->setPedido($pedidoAnalise)
     ->setAfsServiceRun(true)
     ->setAltoRisco(AnaliseRisco::ACAO_MANUAL_POSTERIOR)
     ->setMedioRisco(AnaliseRisco::ACAO_MANUAL_POSTERIOR)
     ->setBaixoRisco(AnaliseRisco::ACAO_CAPTURAR)
     ->setErroDados(AnaliseRisco::ACAO_MANUAL_POSTERIOR)
     ->setErroIndisponibilidade(AnaliseRisco::ACAO_MANUAL_POSTERIOR)
     ->setDeviceFingerPrintID(md5('valor'));
    $service = new CieloService(array(
     'portador' => $portador,
     'loja' => $loja,
     'cartao' => $cartao,
     'transacao' => $transacao,
     'pedido' => $pedido,
     'analise' => $analise
     ));
    
    // Setando o tipo de versão de conexão SSL
     $service->setSslVersion(3);
    // Desabilitando a analise de risco
     $service->setHabilitarAnaliseRisco(false);

    Opção de Análise de Risco

    Caso opte por não utilizar o serviço de análise de risco é só remover o $cliente, $analise, $pedidoAnalise

    E o serviço ficará assim

    $service = new CieloService(array(
     'portador' => $portador,
     'loja' => $loja,
     'cartao' => $cartao,
     'transacao' => $transacao,
     'pedido' => $pedido
     ));

    Transação

    Após realizada as configurações acima para realizar uma transação

    // Caso queira enviar o AVS - Verifição de Endereço / Ver manual para maiores informações
    $service->doTransacao(false, true);
    // Sem AVS
    $service->doTransacao(false, false);
    if($transacao->getStatus() == Transacao::STATUS_AUTORIZADA) {
     echo 'Transação Autorizada!';
     } else {
     echo 'Transação Não Autorizada, contate seu banco!';
     }

    Transação com Análise de Risco

    Enviando a transação com análise de risco

    $service->setHabilitarAnaliseRisco(true);
     $service->doTransacao(false,false);
    if($transacao->getStatus() == Transacao::STATUS_AUTORIZADA) {
     echo 'Transação Autorizada!';
     } else {
     echo 'Transação Não Autorizada, contate seu banco!';
     }

    Plugins Desenvolvidos por Jrossetto

    Captura da Transação

    A captura da transação é a efetivação da transação, é nela que você confirma a Cielo que é para proceder com a Transação e a loja poder receber o valor.

    Preferencialmente deixamos a captura para fazer posteriormente, devido as fraudes, é interessante que a Loja faça a verificação da transação antes de captura-la.

    $transacao->setTid('numero_da_transação_já_realizada');
     $service->doCaptura();
    if($transacao->getStatus() == Transacao::STATUS_CAPTURADA) {
     echo 'Transação capturada com sucesso!';
     } else {
     echo 'Não foi possível capturar, status da transação: ' . $transacao->getStatus();
     }

    Consulta da Transação

    A consulta da transação é um procedimento muito importante, pois é nela que a loja tira uma fotografia da transação.

    $transacao->setTid('numero_da_transacao');
     $service->doConsulta();
    // Pegando a requisição e XML
    $requisicoes = $transacao->getRequisicoes(Transacao::REQUISICAO_TIPO_CONSULTA);
    echo 'Status: ' . $transacao->getStatus() . '
    ';
    if(isset($requisicoes[0])) {
     echo 'XML:' . $requisicoes->getXmlRetorno()->asXML();
     }

    Consulta Direta

    // Realizando a transação e a consulta
     $service
     ->doTransacao(false,true)
     ->doConsulta();
    // Pegando a requisição e XML
    $requisicoes = $transacao->getRequisicoes(Transacao::REQUISICAO_TIPO_CONSULTA);
    echo 'Status: ' . $transacao->getStatus() . '
    ';
    if(isset($requisicoes[0])) {
     echo 'XML:' . $requisicoes[0]->getXmlRetorno()->asXML();
     }
    

    Cancelamento

    Cancelamento da transação

    $transacao->setTid('numero_da_transacao');
     $service->doCancela();
    if($transacao->getStatus() == Transacao::STATUS_CANCELADO) {
     echo 'Transação Cancelada com Sucesso';
     } else {
     echo 'Erro no cancelamento, status: ' . $transacao->getStatus();
     }

    Verificação do Resultado da Análise

    Você pode verificar os resultados da análise de Resultado

    // Faz a consulta
     $transacao->setTid('numero_da_transacao');
     $service->doConsulta();
    if($transacao->getAnaliseResultado() || isset($transacao->getStatusAnalise())) {
    $resultado = $transacao->getAnaliseResultado();
    $status = $resultado->getStatus();
    switch($status) {
     case AnaliseResultado::ALTO_RISCO:
     ...
     break
     case AnaliseResultado::BAIXO_RISCO:
     ...
     break;
     case AnaliseResultado::MEDIO_RISCO:
     ...
     break;
    default:
     echo 'Não foi possível obter o status da análise';
     break;
     }
    // Listar os detalhes da análise
    foreach($resultado->getDetalhes() as $detalhe) {
    echo $detalhe;
    }
    }
    
    

    Qualquer dúvida deixe seu comentário abaixo

    Esse tutorial foi útil? Faça uma doação para manter o site e possibilitar novos tutoriais.

    [wpedon id=4081]

    Este tutorial foi utilizado como base o classe: https://github.com/nezkal/Cielo

    Integração com Cielo – API 3.0 – API REST

    25 COMENTÁRIOS

    1. Meus parabéns Juliano, dentre todo conteúdo disponilizado na internet para essa nova integração webservice CIELO, seu tutorial e arquivos foi o único que REALMENTE me ajudou!

      Muito obrigado, com certeza ajudará muita gente!

      Abraço!

    2. Olá,

      Muito bom, parabens pela iniciativa de divulgar,

      Uma duvida, precisa habilitar algum modulo do Apache ou PHP ?? em um servidor funciona e em outro não, tentei comparar as configurações mas não acho o que pode estar errado o script é o mesmo

    3. Boa tarde amigo , sou iniciante em php e gostaria de uma explicação mais clara pois tenho minha loja virtual com pague seguro e gostaria de mudar para a cielo por conta das taxas e a opção de debito se puder me ajudar ficaria grato

    4. Juliano, baixei os arquivos de integração, coloquei no raiz. Porém quanto copio os códigos e tento executar me apresenta a mensagem: Parse error: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING. Mais especificamente no primeiro “use”

      • Boa tarde Rony,

        tente colocar esse código antes do primeiro use:


        spl_autoload_register(function ($class) {
        require_once(str_replace('\\', '/', $class . '.php'));
        });

        ficando assim:

        spl_autoload_register(function ($class) {
        require_once(str_replace('\\', '/', $class . '.php'));
        });

        use Tritoq\Payment\Cielo\Cartao;
        use Tritoq\Payment\Cielo\CieloService;
        use Tritoq\Payment\Cielo\Loja;
        use Tritoq\Payment\Cielo\Pedido;
        use Tritoq\Payment\Cielo\Portador;
        use Tritoq\Payment\Cielo\Transacao;
        use Tritoq\Payment\Cielo\AnaliseRisco\Modelo\ClienteAnaliseRiscoTest;
        use Tritoq\Payment\Cielo\AnaliseRisco\PedidoAnaliseRisco;

    5. Juliano, fizemos do jeito que você falou para fazer, mas esta dando a seguinte mensagem:
      PHP Fatal error: Class ‘Tritoq\\Payment\\Cielo\\Portador’ not found in /var/www/html/Cielo-master/src/Tritoq/Payment/Cielo/teste.php on line 13

      Poderia ajudar?

      • Olá Jessica,
        tente colocar esse código antes de chamar as classes

        spl_autoload_register(function ($class) {
        require_once(str_replace('\\', '/', $class . '.php'));
        });

        ficando assim:

        spl_autoload_register(function ($class) {
        require_once(str_replace('\\', '/', $class . '.php'));
        });

        use Tritoq\Payment\Cielo\Cartao;
        use Tritoq\Payment\Cielo\CieloService;
        use Tritoq\Payment\Cielo\Loja;
        use Tritoq\Payment\Cielo\Pedido;
        use Tritoq\Payment\Cielo\Portador;
        use Tritoq\Payment\Cielo\Transacao;
        use Tritoq\Payment\Cielo\AnaliseRisco\Modelo\ClienteAnaliseRiscoTest;
        use Tritoq\Payment\Cielo\AnaliseRisco\PedidoAnaliseRisco;

        Espero que funcione.

    6. Boa noite Juliano tudo bem meu caro? Rapaz, pode me dizer se seguindo este tutorial consigo integrar minha Loja Virtual com a “Integração API 3.0” da Cielo? Atualmente possuo uma loja virtual criada do zero com PHP porem ela é integrada apenas com PagSeguro. Eu mesmo sou o programador.

      • Olá Herman, com esse tutorial você conseguirá apenas fazer a integração com o WebService 1.5. A API 3.0 da Cielo utiliza REST API para sua integração. Em breve pretendo fazer um tutorial explicando como ela funciona.
        att
        Juliano

    7. Bom dia Juliano,
      Ótimo tutorial, parabens!! Me tira uma dúvida, preciso criar um botão para doação, onde o cliente clica e escolhe o valor que ele quer doar com cartão de crédito ou débito.

      Eu consigo utilizar o seu tutorial para para a minha necessidade?

      Fico no aguardo.

      • Boa tarde Rodrigo,
        é possível fazer sim, basta você criar um formulário para receber os dados do cartão e valor da doação e enviar a requisição para a cielo utilizando está biblioteca.

        att
        Juliano

        • Juliano estou tendo esse erro aqui: Fatal error: Uncaught Error: Class ‘Tritoq\Payment\Cielo\Portador’ not found in /var/www/html/cartao/index.php:17 Stack trace: #0 {main} thrown in /var/www/html/cartao/index.php on line 17

          Utilizo a versão do PHP: 7.0.18 , você acha que pode ser por causa da versão? Obrigaod.

          • Boa noite Rodrigo, antes de chamar as classes, coloque esse código antes, no início do seu arquivo:

            spl_autoload_register(function ($class) {
            require_once(str_replace('\\', '/', $class . '.php'));
            });

            Me diz uma coisa, vc já tem a afiliação junto a cielo? Caso ainda não tenha, vc não vai conseguir utilizar está classe, a partir de Maio de 2017 a cielo só está liberando acesso a API 3.0.
            Está classe funciona somente com a versâo 1.5 da API da cielo.

            att
            Juliano

            • Juliano obrigado pela rápida resposta, com o código que você me mandou agora funcionou (não acusou mais nenhum erro)!!

              Ainda não tenho afiliação a Cielo, porem já estou providenciando isso. Assim que eu tiver eu consigo utilizar sem problemas né?

    8. Boa tarde, juliano você tem algum tipo de formulário de compra por exemplo de 1 real? que eu possa usar esse seu API? obrigado, aguardo respostas.

      Poderia fornecer? obrigado.

    DEIXE UMA RESPOSTA

    Please enter your comment!
    Please enter your name here