CakePHP Component Cielo Webservice

CakePhp, Geral, PHP | 11 Jan 2011

Olá, 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:

  1. CakePHP Component Braspress Webservice Buenas! O blog depois de quase 8 meses no limbo,...
  2. 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: , , ,

7 Comments

Newer Comments »
  • Bruno Medeiros

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

Leave a Reply

* - fields are required