Implementando a Cielo como meio de pagamento na função crédito

Implementando a Cielo como meio de pagamento na função crédito
4.2 67

Ainda me lembro a primeira vez que me falaram que eu iria ter que implementar a cielo para um cliente, na realidade ainda se chamava Visanet. Na época pensei que seria a coisa mais complexa do mundo, já que tudo que lia falava que era necessário um milhão de itens para ser homologado e etc...

Que decepção! A homologação consistia (e ainda hoje é assim!) em um documento do Word com 2 folhas para você preencher, ai eles pedem para você passar um link do sistema com um produto de R$1,00 para eles avaliarem se está tudo de acordo com o que eles acreditam correto. Pronto.

Para facilitar a vida dos profissionais que irão realizar este processo, estou criando este pequeno tutorial que será dividido em duas partes, a primeira que você está lendo trata da função crédito, a segunda em um futuro (espero que) próximo tratará da função débito . Ambos farão a integração da cielo na modalidade "Buy Page Loja", ou seja, direto no site, isto requer alguns itens de segurança que são descritos no manual da própria Cielo, no futuro talvez faça algum post relativo a integração "Buy Page Cielo", que é usada quando o usuário digita os dados do cartão no ambiente seguro da própria Cielo.

Vou deixar apenas uma observação clara, este tutorial se destina a profissionais, por este motivo não vou explicar nada relativo à lógica de programação, muito menos o motivo pela qual usei a função “A” em vez da “B” ou então como mudar isto ou aquilo para adequar a realidade da instalação do seu servidor, isto é com você!

Enfim mãos a obra.

Antes de qualquer coisa precisamos do manual da Cielo, você pode conseguir a versão mais atual aqui .

Para demonstrar como a integração é simples, vou postar o XML padrão que você terá que enviar:


    
          
          
    
    
         
         
        
        
        
    
    
    
    
    986
    
    
    PT
    
    
         
         
        
    
    
     

Como você pode ver não é nada de outro mundo. Agora uma aplicação prática disto:

<?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 = <<

    
          $cielo_numero
          $chave_cielo
    
    
        $numero_cartao
        $data_vencimento
        $indicador
        $cartao_codigo
        
    
    
    $id
    $valor_total
    986
    $agora
    
    PT
    
    
        $bandeira
        $produto
        $qtd_parcelas
    
    $autorizar
    $captura

XML;

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_SSLVERSION, 3);
    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.'
'; 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; } ?>

Observação: ignore o </xml> depois do ?>, ele não existe de fato, é apenas um bug no syntaxhighlighter.

Observação 2: o que aparece como:
$string = <<<xml <?xml="" version="1.0" encoding="ISO-8859-1" ?="">
O correto é:
$string = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>


No exemplo que passei já há um teste, caso retorne positivo a transação foi autorizada e captura, não há mais nada a ser feito. Pelo menos para quem é normal. No meu caso, mesmo sabendo que está tudo ok sempre faço uma segunda validação, nesta validação eu pego o “TID” e junto com a chave e o número de afiliação junto à Cielo consulto a transação novamente:

<?php
$id = '190'; //ID a compra, geralmente alguma chave primária.
$tid = '1111111111111'; //TID que retornou quando a transação foi criada.

$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 = <<

$tid

$cielo_numero
$chave_cielo


XML;


if($cielo_numero == '1006993069'){
    $url = 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do'; // url homologação
}else{
    $url = 'https://ecommerce.cbmp.com.br/servicos/ecommwsec.do'; // url producao    
}
          
$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_SSLVERSION, 3);
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 AND $xml->captura->codigo == '6' AND $xml->autorizacao->codigo == '6'){
    echo 'Transação aprovada e capturada

'; print_r($xml); }else{ echo 'Oops, erro.

'; print_r($xml); } ?>

Bom, basicamente é isto, tudo muito simples e funcional, apenas algumas observações:

1 – Neste modelo mostrado a autorização e captura são feitas no mesmo momento, contudo é possível realizar a transação e só posteriormente a captura, neste caso há um segundo procedimento que não foi descrito aqui, mas é basicamente igual a confirmação que está no segundo exemplo.

2 – Caso você copie e cole os exemplos e os mesmos não funcionem, primeiro verifique se a chave a número de filiação estão iguais ao manual que você baixou, e também se o número do cartão e data de vencimento também estão de acordo com o manual, caso estejam e mesmo assim não funcione, provavelmente o ambiente de homologação não está funcionando, acredite isto é super normal de acontecer.

3 – Como citado antes de tudo, isso se destina a ser um guia para quem já tem conhecimento da linguagem, basicamente é um guia para copiar/colar e sair para abraço. Caso você não tenha conhecimentos de PHP e etc recomendo não tentar alterar um sistema, ou se alterar, tenha em mente que é por sua conta e risco.

Em breve postarei o exemplo com a função débito.

Até mais!

ATUALIZADO (de novo!).
Para facilitar (e devido aos problemas do sistema que colore os scripts) estou deixando um arquivo com os dois scripts prontinhos e testados, pode clicar com vontade vivente!

Comentários (67)

  • Felipe

    Amigo, gostaria de saber como adiciono na programação o modo de pagamento recorrente?

    27 de Setembro de 2016 às 20:12
  • Danilo

    Artigo top, funcionou, sistema homologado junto a Cielo! Obrigado!

    29 de Agosto de 2016 às 13:57
  • Ismael castro

    Olá, primeiramente muito obrigado pelo post pois ajuda muito quem ta começando e não tem experiencia e acha que é um "bixo de sete cabeças". Uma duvida que tenho pois não achei nenhum conteúdo bom no assunto é o seguinte: O que faz o XML ir criptografado para o webservice da cielo? são os endpoints $url = 'https://ecommerce.cbmp.com.br/servicos/ecommwsec.do' ou o certificado SSL que instalei no servidor da minha aplicação?

    09 de Agosto de 2016 às 01:05
  • Marcos

    Olá amigo. Eu sou leigo no assunto. Gostaria de colocar o Cielo Webserve no meu site? Quanto custa para inserir o sistema de pagamento? E qual é o melhor? Pág seguro ou Cielo.
    Abraço
    Marcos.

    21 de Novembro de 2015 às 16:33
    • Edgar Serra

      O custo depende de vários fatores.

      25 de Novembro de 2015 às 00:10
  • Marcus Vinicius

    Olá Pessoal!

    Uma dúvida simples: este modelo, Buy Page Loja, seria o mesmo que o atual Webservice? Eu pergunto porque ao desenvolver a solução para o Webservice atual, estou encontrando dificuldades na validação do XML da transação.

    Aguardo um retorno dos amigos!

    10 de Outubro de 2015 às 05:04
  • Kielvi Del Santoro

    Olá Edgar, seu tuto me ajudou muito, só preciso tirar uma dúvida.
    Ele sempre tá me retornando o:

    SimpleXMLElement Object ( [codigo] => 003 [mensagem] => Não foi encontrada transação para o Tid '100173489802E31B3012'. )

    Sabe me informar por que?

    02 de Outubro de 2015 às 11:01
  • Rovert

    Achei a sollução depois de muito apanhar, pra quem tá tendo problema de dar transação nao autorizada e nenhuma mensagem! Basta trocar:
    curl_setopt($ch, CURLOPT_SSLVERSION, 3); por
    curl_setopt($ch, CURLOPT_SSLVERSION, 4);

    02 de Setembro de 2015 às 14:56
  • Rovert

    Oi Edgard, Por enquanto não funfou no locahost, mas como é a tal sandbox, vc disse que fica fora do ar sempre... vou testar de novo depois. Mas uma coisa, aqui no heredoc $string = << quando há esse fechamento do code block (?>) interrompe a coloração em qualquer dreamweaver da vida, seria mais elegante colocar umas aspaz, não?

    02 de Setembro de 2015 às 02:46
  • ricardo

    Quantos aos ssl válidos

    Posso optar por uma opção mais barata ao invés de um caro

    Tem um ssl que custa 96 por ano,

    e outro custa 400 reais por ano

    Posso optar pelo mais barato?

    Obrigado!

    31 de Agosto de 2015 às 11:25
    • Edgar Serra

      Sim, pode ser o SSL mais barato.

      31 de Agosto de 2015 às 14:04
  • Rodrigo

    Mto bom o post porém o erro abaixo persiste e já revirei o manual da Cielo, pode me ajudar ?

    Erro: O XML informado não é valido

    27 de Agosto de 2015 às 19:30
  • ronaldo

    Existe a possibilidade de guardar os dados dos cartões de creditos em uma base de dados?

    Sei que isso é errado, e nem pode acontecer. Mas gostaria de saber se isso é possivel?

    06 de Julho de 2015 às 16:07
    • Edgar Serra

      Sim, é totalmente possível, mas totalmente irregular também.

      06 de Julho de 2015 às 18:04
  • Ehinarr

    A Cielo alterou a versão do SSL de 3 para 4. Ok, mas agora aqui me dá >SSL connection timeout, se voltar a versão do SSL algumas vezes dá erro de versão, mas 99% >SSL connection timeout. Não dá para entender mesmo...

    05 de Fevereiro de 2015 às 12:49
  • fabio

    Boa tarde, muito bom o artigo!

    Queria tirar duas duvidas

    1 - No caso do parcelamento, como é feito?
    2 - Sou obrigado a ter segurança SSL ?

    Obrigado

    10 de Novembro de 2014 às 13:05
    • Edgar Serra

      Leia o artigo e o manual, as duas questões estão respondidas já.

      11 de Novembro de 2014 às 10:10
  • Fernando Nunes

    A única coisa que precisa ser atualizada no artigo é que na segunda linha do XML tem um padrão:


    Fora isso ocorreu tudo certo.
    É sempre bom lembrar que no ambiente de testes os valores decimais devem acabar com 00, ou seja, trabalhe com valores redondos, pois mesmo com o pedido certinho ele vai recusar a transação.

    22 de Outubro de 2014 às 11:33
  • Nilton da silva lopes filho

    Edgar gostei muito do seu artigo, mas ainda me restou dúvidas.
    Como faço pra saber se o pagamento chegou na cielo ?

    20 de Outubro de 2014 às 15:00
    • Edgar Serra

      Niltom, se você ler o script vai ver que no fim dos dois existem if/elses com mensagens, elas por si só dizem quando a transação ocorreu com sucesso ou não.

      20 de Outubro de 2014 às 21:44
  • Renato

    Edgar seu artigo é muito bom, como o William Wiechorek comentou, você tem como colocar um exemplo "buypage cielo", se acrescentar um exemplo nesse artigo vai ajudar muito, vc até comentou que é mais fácil, mas um exemplo "buypage cielo" semelhante esse que tem aqui no artigo seria de extrema ajuda.

    Abraços,
    Renato

    06 de Outubro de 2014 às 07:50
  • William Wiechorek

    Primeiramente, muito bom artigo! Porém eu preciso fazer com buypage cielo, tens como me ajudar com isso? Tens como colocar um exemplo do xml que é necessário pra criar o buypage cielo?

    12 de Setembro de 2014 às 09:08
    • Edgar Serra

      O buypage cielo é bem mais simples, basta gerar o XML na loja de exemplo.

      12 de Setembro de 2014 às 11:54
  • Rafael Sousa

    Olá amigos, minha aplicação com integração com a cielo está rodando perfeitamente no localhost, mas quando subo ela para fazer testes online não retorna o xml, já apliquei o certificado digital.

    alguem poderia me ajudar ?

    11 de Setembro de 2014 às 12:36
    • Edgar Serra

      Rafael, ative todos os debugs, e comece verificando se o cURL está ativo no servidor.

      12 de Setembro de 2014 às 11:54
  • Fabio

    Muito bom o artigo! Uma coisa não citada é o tal do tentar autenticar. Nos forms quando pedem para homologar eles citam o verify by visa. Mas não achei em nenhum lugar sobre como implementar. Alguém tem alguma dica? Estou usando o cieloBuyPageLoja também. Obrigado!

    28 de Agosto de 2014 às 10:51
  • Christopher Persaud

    resolveu adicionando a versao:
    curl_setopt($ch, CURLOPT_SSLVERSION, 3);

    nao sei pq, mas resolveu hehehe

    16 de Agosto de 2014 às 12:23
  • Christopher Persaud

    Ola Edgar, em localhost funciona normal, mas hospedado ele vai na ultima mensagem, transação não autorizada, e não aparece a mensagem $xml->mensagem, é algum serviço que a hospedagem não ta fornecendo, qual seria?

    11 de Agosto de 2014 às 18:13
    • Edgar Serra

      Ative todos os erros, provavelmente isto mostre o problema, mas eu começaria chutando que cURL não está habilitado no seu servidor.

      13 de Agosto de 2014 às 10:39
  • Christopher Persaud

    Edgar Serra muito obrigado pelas dicas! Depois pago uma gelada! :p

    24 de Julho de 2014 às 15:55
  • Christopher Persaud

    Antes estava com a ideia de usar Buy Page Cielo, mas agora vou deixar o Buy Page Loja, fiz os testes com o teu código e deu muito certo, mas estou com uma dúvida, eu informei uns numeros de cartão que encontro pela internet visa por exemplo, e informei qualquer nome data de vencimento e código do cartão também, e sempre dava Transação autorizada pela operadora do cartão! no primeiro script e Transação aprovada e capturada no segundo script, como eu poderia evitar isso pra não causar fraudes?!!?

    23 de Julho de 2014 às 15:59
    • Edgar Serra

      Christopher, quem verifica a validade dos dados do portador do cartão é a Cielo, provavelmente você esteja utilizando o ambiente de testes, este ambiente funciona meio "a Deus dará", tem hora que ele não autoriza nada, tem hora que autoriza tudo e etc, enfim, mas quem faz essa validação que você está se preocupando é a Cielo.

      Só observe que a Cielo faz a validação dos dados do cartão, eles estiverem certos eles autorizam a operação, mas mesmo assim você ainda corre risco com os chargebacks.

      23 de Julho de 2014 às 19:23
  • Christopher

    Eu estou usando o buypage Cielo, que redireciona pra pagina da Cielo, quando acontece algum erro de retorno, o XML printa na pagina da cielo como faço pra interpretar esse xml, para que nao aparece para o cliente aqueles codigos, todos, teria como interpretar eles e mostrar pro cliente de forma amigavel?
    Um exemplo é o retorno de timeout que as vezes acontece!

    22 de Julho de 2014 às 08:38
    • Edgar Serra

      Christopher, desconheço qualquer tipo de XML printado na página da Cielo, sempre que há algum problema (CC inválido, transação não autorizada, etc...), o Cielo devolve o cliente para o site de origem e este deve requisitar para saber o status da transação.

      Vale ressaltar que você não tem nenhum tipo de controle sobre o ambiente da Cielo, logo mesmo que eles "printassem" alguma coisa lá, você não teria o que fazer.

      23 de Julho de 2014 às 13:24
  • FBaldin

    Boa Iniciativa Edgar !
    Estou iniciando os trabalhos de integração com seu fonte, porém a mensagem de retorno na saída do segundo else do arquivo de geração de pagamento não retorna nenhuma mensagem. É normal isso acontecer ?

    if ($xml->tid){
    echo 'TID da transação: '.$xml->tid.'
    ';
    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; // NESTE ITEM NÃO EXIBE A MENSAGEM
    }

    23 de Junho de 2014 às 11:06
    • Edgar Serra

      Não, não é normal.

      24 de Junho de 2014 às 08:39
  • hugo borges

    como assim sandbox?

    20 de Junho de 2014 às 09:54
    • Edgar Serra

      Sandbox é a URL de testes, os você não usa as credenciais verdadeiras.

      20 de Junho de 2014 às 14:53
  • hugo borges

    Bom acho que aconteceu alguma coisa alguma atualização na ciclo, pois o sistema parou de funcionar, fica exibindo apenas Transação não autorizada: e não retorna erro algum

    19 de Junho de 2014 às 09:37
    • Edgar Serra

      Hugo, tenho vários clientes usando Cielo e está tudo ok com eles, se estiver usando a sandbox é normal ficar sem funcionar.

      19 de Junho de 2014 às 13:26
  • Vitor

    Edgar Serra, muito bom o seu post, tenho apenas uma dúvida, no seu código você não utiliza a verificação do certificado de segurança já no manual exige que tenha um certificado de segurança e faça a verificação e validação do mesmo, minha duvida é a seguinte, vou conseguir homologar meu sistema utilizando como base o seu código(ou seja sem o certificado de segurança)?! lembrando que o sistema vai utilizar a plataforma Cielo By Page.

    Obrigado por compartilhar o teu conhecimento.

    04 de Junho de 2014 às 08:47
    • Edgar Serra

      Vitor, você só vai conseguir homologar se tiver um certificado de segurança válido, pois a homologação é feita por um funcionaro da Cielo e ter o SSL válido é um dos ítens conferidos, já a nível de script isso é desnecessário.

      04 de Junho de 2014 às 13:21
  • Jorge Marmion

    O sistema de E-Commerce da Cielo reutilizou, em 24 de maio de 2014, TIDs (identificadores de transação) já gerados no dia 23 de maio. Com isso, as vendas originais (feitas no dia 23) se perderam para o vendedor (nós). O problema só foi percebido porque em nosso sistema usamos o TID como Primary Key e deu duplicate, algo que jamais poderia dar. Se você usa como PK um outro valor (ex: número de pedido) e não tem uma Unique Key no valor de TID você não perceberá este problema a menos que efetue um processo de monitoramento de TIDs duplicados. Já enviamos até notificação extra judicial à Cielo e nem assim obtivemos resposta. Sofremos um prejuizo sério. Se alguém também foi vítima deste erro me contate; pretendemos entrar na Justiça para tentar reaver esse valores.

    02 de Junho de 2014 às 23:17
    • Edgar Serra

      Jorge, acabei de verificar nos meus clientes e isto não ocorreu com nenhum deles, inclusive um que gerou mais de 500 transações nos dias que você especificou, é até estranho dar duplicidade, porque até onde eu seu o TID é um número totalmente aleatório e pela quantidade de caracteres tem bilhões de possibilidades de combinações.

      03 de Junho de 2014 às 09:07
  • Ganzert

    Sim, entendi, obrigado. Boa idéia a da verificação adicional, implementei como uma camada extra de segurança usando seu código mesmo, com poucas adaptações. Achei mais fácil entender a sua explicação do que a do manual da Cielo.

    26 de Maio de 2014 às 08:07
    • Edgar Serra

      Ganzert, o manual tem várias coisas importantes, mas como de praxe não tem um tipo "direto ao ponto", essa foi a proposta deste post, dar um copiar/colar para a pessoa já usar.

      Fico feliz que tenha sido útil a você.

      26 de Maio de 2014 às 10:17
  • Ganzert

    Oi Edgar, obrigado pelo tutorial, completo e funcional.

    Uma dúvida: Quando aparecer a mensagem "Transação autorizada pela operadora do cartão!", isso significa que posso informar ao sistema que o dinheiro do cliente já foi para a conta do lojista, ou melhor dizendo, já posso mudar o status da conta do meu sistema de "pendente" para "fechada"?


    obrigado desde já,


    fabrício

    24 de Maio de 2014 às 15:11
    • Edgar Serra

      Ganzert, se você estiver utilizando a captura automática, sim, você já poderá alterar o status, de qualquer jeito eu sempre faço uma verificação adicional conforme citei no tutorial.

      25 de Maio de 2014 às 18:26
  • Victor Magalhães Pacheco

    Muito bom!
    Obrigado por compartilhar seu conhecimento.
    Não sei se você passou por isso, mas acontece que quando passo um valor
    de R$ 25,90 = 2590, o sistema retorna autorização engada.
    Mas quando coloco o valor fechado como 15,00 = 1500 funciona de boa.
    Já passou por isso,? valeu!

    30 de Abril de 2014 às 11:30
    • Edgar Serra

      Victor, enquanto você estiver usando o ambiente de testes sempre deve usar valor "fechado", isto consta como observação no manual.

      30 de Abril de 2014 às 19:49
  • Renato

    Olá, alguém sabe se isso pode ser implementado em uma hospedagem comum ?? Ou tem que ter servidor próprio (VPS,DEDICADO etc). É obrigatório certificado ssl ?

    14 de Abril de 2014 às 09:11
    • Edgar Serra

      Renato, pode ser executado em uma hospedagem comum e sim, você terá que ter um certificado de segurança.

      16 de Abril de 2014 às 08:35
  • Vander Bulegon

    Nunca tinha usado cielo, sempre usei PagSeguro, que apesar de ser bem mais fácil de usar, é tosco, pois o usuário precisa se cadastrar novamente lá pra inserir os dados do cartão. Segui o tutorial, e apareceu a TID, e a mensagem de "Transação autorizada pela operadora do cartão". A dúvida é a seguinte: pra esse modelo que vc passou, é necessário o usuário entrar com os dados do cartão já na minha página, correto?

    07 de Abril de 2014 às 13:30
    • Edgar Serra

      Vander, sim, neste exemplo o cartão é inserido direto no site, mas a Cielo tem a opção de informar os dados do cartão no ambiente seguro deles, é até mais fácil de integrar e o XML é muito parecido.

      08 de Abril de 2014 às 13:32
  • Victor Magalhães Pacheco

    Valeu cara!

    me ajudou bastante :]

    26 de Março de 2014 às 09:36
  • Jorge

    vitor: tenta usar utf8_decode

    20 de Fevereiro de 2014 às 10:07
  • Jorge

    Alexandre: o problema é que ha um erro de codificação no string
    $string = <<
    Nesse tipo de sintaxe, que se chama heredoc, só pode haver uma newline depois do identificador; teria de ser assim
    $string = <<
    Quanto à falta de retorno, provavelmente há um erro na conexão (curl_exec($ch)). Dá um print do curl_error ($ch) e verifica qual é a mensagem de erro.
    $resposta = curl_exec($ch);
    if (empty ($resposta))
    {
    echo "Erro de conexão: " . curl_error ($ch);
    curl_close($ch);
    exit;
    }

    19 de Fevereiro de 2014 às 12:59
  • Victor

    Muito bom o post!
    Estou com um problema no retorno. Os caracteres especiais não estão aparecendo corretamente.
    Ex. Transação não autorizada: Venda com Parcelado tipo '1' não habilitado.
    Alguma sugestão?

    14 de Janeiro de 2014 às 09:06
  • alexandre

    Ola fiz um teste com o código que você disponibilizou e esta dando um erro de sintaxe na atribuição do código XML para a variável string
    coloquei aspas duplas no inicio e no fim do código XML por causa das variáveis para ver se funcionava o erro parou porem não tenho retorno nenhum com $string = curl_exec($ch);

    sabe me dizer se houve alguma modificação no código ?

    obrigado

    21 de Outubro de 2013 às 20:52
  • Eduardo

    Salvou a minha vida também, só fiz uns ajustes na string do xml, muito bom, mesmo, agradeço!

    28 de Agosto de 2013 às 14:19
  • celio ribeiro

    Muito bom amigos !!! eu estou com um problema como eu faço para enviar um pedido simples para a cielo ?

    exemplo uma pagina apenas com os campos obrigatórios e o cliente clicar em enviar e pronto.. ja li o lance do manual do desenvolvedor, mas la ele esta voltado para webcommerce e tudo mais ...

    18 de Junho de 2013 às 11:51
    • Edgar Serra

      Como dito no tutorial, o objetivo aqui é servir de ponto de referência para profissionais da área, se você não tem know-how contrate um freelancer.

      22 de Junho de 2013 às 11:20
  • Daniel Fonseca

    Cara, muito bom o seu post bem simples e direto, mas quando pego esse código e ponho pra testar no meu dominio ele consegue acessar o webservice da cielo mas retorna um erro de xml.

    001XML inválido: 'error: Unexpected character encountered (lex state 5): '=''.

    já olhei o xml várias vezes inclusive comparei com o do manual não encontro erro algum e o código é exatamente esse que vc postou, se puder me dar alguma dica pra resolver esse problema serei grato

    15 de Maio de 2013 às 09:03
  • Leandro

    Aproveito aqui para partilhar o arquivo de captura:


    // recebendo as variáveis...
    $tid = $_GET['tid']; // número da tid
    $valor = $_GET['valor']; // Para R$ 20,00 remeta '2000'
    $id = $_GET['id']; // Identificação da compra, geralmente o número do pedido, ex.: '12172'
    $cod_est = $_GET['id']; // Código do estabelecimento, ex.: '1001734898'
    $chave = $_GET['id']; // Chave de conexão, ex.: 'e84827130b9837473681c2787007da5914d6359947015a5cdb2b8843db0fa832'

    //montando o XML
    $string = '

    '. $tid .'

    '. $cod_est .'
    '. $chave .'

    '. $valor .'
    ';

    //Ambiente de produção
    $url = 'https://ecommerce.cielo.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.'
    ';
    echo 'PAN da transação: '.$xml->pan.'
    ';
    if($xml->captura->codigo == '6' AND $xml->autorizacao->codigo == '6'){
    echo 'Transação capturada!';
    }else{
    echo 'Não capturada: '.$xml->autorizacao->mensagem.'.';
    }
    }else{
    echo 'Não capturada: '.$xml->mensagem;
    }
    ?>

    11 de Março de 2013 às 20:52
  • Leandro

    Prezado Edgar, você simplesmente "salvou a minha vida" com esse post.
    Já trabalho com integração Cielo, possuo algumas lojas operando ecommerce, no entanto todas utilizam captura automática. O teu post está muito claro e muito objetivo, através dele consegui resolver rapidamente minha necessidade na requisição de captura via php, que precisei implementar às pressas para um cliente. Agradeço tua boa-vontade em ajudar a comunidade. Saúde amigo, um abraço!

    11 de Março de 2013 às 20:36
    • Edgar Serra

      Leandro, que bom que isto fui útil para você! A idéia era exatamente esta, algo direto ao ponto para quem trabalha na área não perder tempo no confuso manual da Cielo.

      16 de Março de 2013 às 16:33

Comente =)

Atenção: Todos os comentários são moderados, por isto não perca seu tempo postando bobagens ou spam.