X
    Categoria: FeaturedPHP

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 = 'artur@tritoq.com';
 $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

Juliano Rossetto: Formado em Analise e Desenvolvimento de Sistemas. Desenvolvedor dos principais CMS ( Wordpress, Joomla). Desenvolvedor de E-commerce (Opencart e WooCommerce). Analista de SEO: Otimização de sites para mecanismos de buscas. Analista de Infraestrutura voltado para servidores na nuvem: Amazon Web Services (AWS), DigitalOcean e Linode. Para dúvidas ou serviços entre em contato aqui.

Ver comentários (24)

  • Ótimo artigo Juliano parabéns acredito que vai me ajudar demais.
    Valew!!!

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

  • 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

    • Obrigado Jair,
      é preciso estar habilitado a biblioteca Curl do PHP.

  • 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

    • Olá Nilton, vou entrar em contato com você para mais detalhes...

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

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

  • 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

  • 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é?

          • Faça a solicitação para o WebService 1.5. Senão não irá funcionar.

            att
            Juliano