CakePHP Component Cielo Webservice
CakePhp, Geral, PHP | 11 Jan 2011Olá, estava segurando este post por um tempo, pois estava sem tempo para desenvolve-lo.
Neste post irei disponibilizar 2 metodos para utilização do webservice da cielo utilizando os padrões do kit.ecommerce.cielo-1.5.5.
com estes metodos será possível efetivar compras utilizando as bandeiras VISA e MASTER.
OBS:O webservice da cielo disponibiliza vários metodos de consulta se der tempo desenvolverei eles em seguida, e talvez criarei um plugin de carrinho de compras no futuro. mais isso é no futuro. hehehehehe
O componente.
/app/controllers/components/cielo.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | <?php /** * Cielo CakePHP Component * Copyright (c) 2011 Luan Garcia * www.implementado.com * * @author Luan Garcia <luan.garcia@gmail.com> * @version 1.0 * @license MIT * */ class CieloComponent extends Object { public $teste = false; //por padrao é false. public $shopid = null; //Número de afiliação da loja com a Cielo.. public $chave = null; //Chave de acesso da loja atribuída pela Cielo. public $loja_nome = null; //Nome da Loja public $pedido = null; //Id do pedido na loja public $bandeira = null; //visa ou master public $parcelas = null; //verificar na cielo a quantidade liberada para cada bandeira public $valor = null; //valor da compra public $capturar = false; //[true|false]. Define se a transação será automaticamente capturada caso seja autorizada. public $autorizar = 3; //Indicador de autorização automática: 0 (não autorizar) 1 (autorizar somente se autenticada) 2 (autorizar autenticada e não-autenticada) 3 (autorizar sem passar por autenticação – válido somente para crédito) public $url_teste = 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do'; public $url = 'https://ecommerce.cbmp.com.br/servicos/ecommwsec.do'; public $url_retorno = null; //Url de retorno apos informar os dados do cartão na no by page cielo /** * Metodo realiza a criacao do pedido junto a visa * Return mixed dados do pedido na visa junto com TID do pedido,url-autenticacao (tela finalizacao da compra) */ function criar_pedido() { /** * Se as parcelas forem > 1 produto=Crédito à Vista senão produto=Parcelado loja */ $produto = $this->parcelas > 1 ? 2 : 1; /** * Data hora do pedido */ $data = date("Y-m-d\TH:i:s"); /** * Limpa o valor para a visa */ $valor = preg_replace('/[^0-9]+/', "", number_format($this->valor, 2, ",", ".")); $post = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> <requisicao-transacao id=\"1\" versao=\"1.1.0\" xmlns=\"http://ecommerce.cbmp.com.br\"> <dados-ec> <numero>{$this->shopid}</numero> <chave>{$this->chave}</chave> <nome>{$this->loja_nome}</nome> <codigo-pais>097</codigo-pais> </dados-ec> <dados-pedido> <numero>{$this->pedido}</numero> <valor>{$valor}</valor> <moeda>986</moeda> <data-hora>{$data}</data-hora> </dados-pedido> <forma-pagamento> <bandeira>{$this->bandeira}</bandeira> <produto>{$produto}</produto> <parcelas>{$this->parcelas}</parcelas> </forma-pagamento> <url-retorno>{$this->url_retorno}</url-retorno> <autorizar>{$this->autorizar}</autorizar> <capturar>{$this->capturar}</capturar> </requisicao-transacao>"; App::import("Xml"); $retorno = Set::reverse(new Xml($this->file_post_contents($post))); #Log para debug futuro em produção, facilita o debug no cliente if(isset($retorno['Erro'])) { $log = var_export($retorno, true); $this->log('ERRO - AO CRIAR TID\r\n'.$log.'\r\n', LOG_DEBUG); }else { $log = var_export($retorno, true); $this->log('SUCESSO - AO CRIAR TID\r\n'.$log.'\r\n', LOG_DEBUG); } return $retorno; } /** * Metodo realiza a consulta do pedido na visa * @param @tid do pedido * @return mixed */ function consultar_pedido($tid) { $post = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <requisicao-consulta id=\"5\" versao=\"1.0.0\" xmlns=\"http://ecommerce.cbmp.com.br\"> <tid>{$tid}</tid> <dados-ec> <numero>{$this->shopid}</numero> <chave>{$this->chave}</chave> </dados-ec> </requisicao-consulta>"; App::import("Xml"); $retorno_visa = Set::reverse(new Xml($this->file_post_contents($post))); return $retorno_visa; } /** * Metodo realiza o post do xml local para a visa * @param String Xml com os dados do pedido * @return mixed */ function file_post_contents($msg) { $postdata = http_build_query(array('mensagem' => $msg)); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); if ($this->teste === true) { $url = $this->url_teste; }else{ $url = $this->url; } return file_get_contents($url, false, $context); } } ?> |
Como utilizar?
/app/controllers/carrinho_controller.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | <?php class CarrinhoController extends AppController { public $name = 'Carrinho'; public $uses = array(); public $components = array('Cielo'); function criar_pedido() { $this->Cielo->teste = true; $this->Cielo->shopid = 'xxxxxxxxxxxx'; $this->Cielo->chave = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $this->Cielo->loja_nome = 'Minha Loja'; $this->Cielo->bandeira = 'visa'; $this->Cielo->parcelas = 2; $this->Cielo->pedido = 1; $this->Cielo->valor = 4.33; $this->Cielo->capturar = false; $this->Cielo->autorizar = 3; $this->Cielo->url_retorno = 'https://minhaloja.com.br/carrinho/consultar_pedido'; debug($this->Cielo->criar_pedido()); /** * irá retornar algo paracido com isso Array ( [Transacao] => Array ( [id] => 1 [versao] => 1.1.0 [xmlns] => http://ecommerce.cbmp.com.br [tid] => xxxxxxxxxxxxxxxx [Dados-pedido] => Array ( [numero] => 1 [valor] => 433 [moeda] => 986 [data-hora] => 2011-01-10T00:54:13.559-02:00 [idioma] => PT ) [Forma-pagamento] => Array ( [bandeira] => visa [produto] => 2 [parcelas] => 2 ) [status] => 0 [url-autenticacao] => https://qasecommerce.cielo.com.br/web/index.cbmp?id=xxxxxxxxxxxxxxxxxxxxxx ) ) */ # .... # Regra de negocio apos criar o pedido. # .... } function consultar_pedido() { $this->Cielo->teste = true; $this->Cielo->shopid = 'xxxxxxxxxxxxxxxx'; $this->Cielo->chave = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; debug($this->Cielo->consultar_pedido("xxxxxxxxxxxxxxxxxxx")); /* Array ( [Transacao] => Array ( [id] => 5 [versao] => 1.0.0 [xmlns] => http://ecommerce.cbmp.com.br [tid] => xxxxxxxxxxxxxxxxxx [Dados-pedido] => Array ( [numero] => 1 [valor] => 433 [moeda] => 986 [data-hora] => 2011-01-10T00:54:13.559-02:00 [idioma] => PT ) [Forma-pagamento] => Array ( [produto] => 2 [parcelas] => 2 ) [status] => 0 ) ) */ # .... # Regra de negocio apos ver o status do pedido. # .... } } ?> |
Observações:
1 – Aconselho na configuração do componennt não colocar a captura automatica vendo que senão possuir produtos em estoque você terá que estornar o valor do produto.
Dúvidas,Sugestões ou Reclamações:
post ai!!!
Quero colaborar com o component como faço?
Criei um repositório no GitHub entra lá clique aqui
Related posts:
- CakePHP Component Braspress Webservice Buenas! O blog depois de quase 8 meses no limbo,...
- CakePHP Component Correios consultar frete Eaitahh!!! um tempo fora, de ferias literalmente de tudo… voltei...
Related posts plugin by:Related posts plugin
Start earning money online in one hour visit:Ways to make money.
Tags: cielo, cielo webservice, component, kit.ecommerce.cielo-1.5.5













ótimo post.
Estou começando a brincar com o cake e é uma ferramente muito interessante.