Version Notes
O Gateway de Pagamento da Locaweb é um facilitador, que permite a contratação e a integração de diversos meios de pagamento em qualquer tipo de loja online.
Atualmente, temos dois meios de pagamento disponíveis na extension do Magento:
* Cielo Buy Page Loja (sem autenticação)
* Redecard Web Service
Além destes, estamos buscando colaboradores para desenvolver os seguintes meios de pagamento:
* Boletos (Bradesco, Itaú, Banco do Brasil, Santander, HSBC e Caixa)
* Itaú Shopline
* Redecard Komerci Integrado
* Cielo Buy Page Cielo
* Cielo Buy Page Loja (com autenticação)
Se você estiver interessado em colaborar com o desenvolvimento da extension, o repositório está disponível no Github, na seguinte url: https://github.com/locaweb/gateway_magento.
Download this release
Release Info
Developer | Locaweb |
Extension | Locaweb_Gateway |
Version | 1.0.2 |
Comparing to | |
See all releases |
Code changes from version 1.0.1 to 1.0.2
- lib/LocawebGateway/.DS_Store +0 -0
- lib/LocawebGateway/LocawebGateway.php +80 -0
- lib/LocawebGateway/LocawebGatewayConfig.inc.php +30 -0
- lib/LocawebGateway/LocawebGatewayPayment.php +81 -0
- lib/LocawebGateway/LocawebGatewayProcessor.php +123 -0
- lib/LocawebGateway/LocawebGatewayRequest.php +102 -0
- lib/LocawebGateway/SimpleRestClient.php +268 -0
- package.xml +5 -5
lib/LocawebGateway/.DS_Store
ADDED
Binary file
|
lib/LocawebGateway/LocawebGateway.php
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require 'LocawebGatewayPayment.php';
|
4 |
+
require 'LocawebGatewayRequest.php';
|
5 |
+
require 'LocawebGatewayConfig.inc.php';
|
6 |
+
|
7 |
+
class LocawebGateway
|
8 |
+
{
|
9 |
+
const SANDBOX_URL = "https://api-sandbox.gatewaylocaweb.com.br/v1/transacao";
|
10 |
+
const PRODUCTION_URL = "https://api.gatewaylocaweb.com.br/v1/transacao";
|
11 |
+
|
12 |
+
public $request_url_append = '';
|
13 |
+
|
14 |
+
function __construct()
|
15 |
+
{
|
16 |
+
$this->request()->token = LocawebGatewayConfig::getToken();
|
17 |
+
$this->request()->url = $this->UrlForEnv(LocawebGatewayConfig::getEnvironment());
|
18 |
+
}
|
19 |
+
|
20 |
+
function UrlForEnv($environment)
|
21 |
+
{
|
22 |
+
if($environment == "sandbox"){
|
23 |
+
return self::SANDBOX_URL;
|
24 |
+
} else {
|
25 |
+
return self::PRODUCTION_URL;
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
static public function criar($data=array())
|
30 |
+
{
|
31 |
+
$gateway = new self;
|
32 |
+
$gateway->_payment = new LocawebGatewayPayment($data);
|
33 |
+
return $gateway;
|
34 |
+
}
|
35 |
+
|
36 |
+
static public function capturar($id=null)
|
37 |
+
{
|
38 |
+
$gateway = new self;
|
39 |
+
$gateway->request_url_append .= '/'.$id.'/capturar';
|
40 |
+
return $gateway;
|
41 |
+
}
|
42 |
+
|
43 |
+
static public function cancelar($id=null)
|
44 |
+
{
|
45 |
+
$gateway = new self;
|
46 |
+
$gateway->request_url_append .= '/'.$id.'/estornar';
|
47 |
+
return $gateway;
|
48 |
+
}
|
49 |
+
|
50 |
+
static public function consultar($id=null)
|
51 |
+
{
|
52 |
+
$gateway = new self;
|
53 |
+
$gateway->request()->httpMethod = 'get';
|
54 |
+
$gateway->request_url_append .= '/'.$id;
|
55 |
+
return $gateway;
|
56 |
+
}
|
57 |
+
|
58 |
+
public function payment()
|
59 |
+
{
|
60 |
+
if(empty($this->_payment)){
|
61 |
+
$this->_payment = new LocawebGatewayPayment;
|
62 |
+
}
|
63 |
+
return $this->_payment;
|
64 |
+
}
|
65 |
+
|
66 |
+
public function request()
|
67 |
+
{
|
68 |
+
if(empty($this->_request)){
|
69 |
+
$this->_request = new LocawebGatewayRequest;
|
70 |
+
}
|
71 |
+
return $this->_request;
|
72 |
+
}
|
73 |
+
|
74 |
+
public function sendRequest()
|
75 |
+
{
|
76 |
+
$this->request()->url .= $this->request_url_append;
|
77 |
+
$this->request()->payload = $this->payment()->toPayload();
|
78 |
+
return $this->request()->execute();
|
79 |
+
}
|
80 |
+
}
|
lib/LocawebGateway/LocawebGatewayConfig.inc.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class LocawebGatewayConfig
|
4 |
+
{
|
5 |
+
const DEFAULT_ENV = "production";
|
6 |
+
const DEFAULT_TOKEN = "3a5bbed0-50d4-012f-8d73-0026bb5a6240";
|
7 |
+
|
8 |
+
static protected $environment = self::DEFAULT_ENV;
|
9 |
+
static protected $token = self::DEFAULT_TOKEN;
|
10 |
+
|
11 |
+
private function __construct(){}
|
12 |
+
|
13 |
+
static public function getToken(){
|
14 |
+
return self::$token;
|
15 |
+
}
|
16 |
+
|
17 |
+
static public function setToken($value){
|
18 |
+
if(self::$token == self::DEFAULT_TOKEN)
|
19 |
+
self::$token = $value;
|
20 |
+
}
|
21 |
+
|
22 |
+
static public function getEnvironment(){
|
23 |
+
return self::$environment;
|
24 |
+
}
|
25 |
+
|
26 |
+
static public function setEnvironment($value){
|
27 |
+
if(self::$environment == self::DEFAULT_ENV)
|
28 |
+
self::$environment = $value;
|
29 |
+
}
|
30 |
+
}
|
lib/LocawebGateway/LocawebGatewayPayment.php
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class LocawebGatewayPayment
|
4 |
+
{
|
5 |
+
# Atributo informando a url de retorno para a loja após a finalização
|
6 |
+
# do processo de pagamento
|
7 |
+
# 'url_retorno' => 'http://www.minha-loja.com.br/confirmacao-pedido.php?id=12345'
|
8 |
+
public $url_retorno = '';
|
9 |
+
|
10 |
+
# Atributo que informa se deverá ocorrer a captura automática.
|
11 |
+
# Valido apenas para operações via Cielo e Redecard.
|
12 |
+
# 'capturar' => 'true'
|
13 |
+
public $capturar = '';
|
14 |
+
|
15 |
+
# Campo contendo os detalhes do pedido a ser enviado:
|
16 |
+
# 'pedido' => array(
|
17 |
+
# 'numero' => "123",
|
18 |
+
# 'total' => "100.00",
|
19 |
+
# 'moeda' => "real",
|
20 |
+
# 'descricao' => "My Camaro car!"
|
21 |
+
# )
|
22 |
+
public $pedido = '';
|
23 |
+
|
24 |
+
# Atributo contendo as informações sobre o pagamento:
|
25 |
+
# 'pagamento' => array(
|
26 |
+
# 'meio_pagamento' => 'redecard' # Nesse campo se determina o convenio utilizado.
|
27 |
+
# 'bandeira' => "visa",
|
28 |
+
# 'cartao_numero' => "4012001037141112",
|
29 |
+
# 'cartao_cvv' => "973",
|
30 |
+
# 'parcelas' => "1",
|
31 |
+
# 'tipo_operacao' => "credito_a_vista",
|
32 |
+
# 'cartao_validade' => "082015"
|
33 |
+
# )
|
34 |
+
public $pagamento = '';
|
35 |
+
|
36 |
+
# Atributo contendo as informações sobre o comprador:
|
37 |
+
# 'comprador' => array(
|
38 |
+
# 'nome' => "Bruna da Silva",
|
39 |
+
# 'documento' => "27836038881",
|
40 |
+
# 'endereco' => "Rua da Casa",
|
41 |
+
# 'numero' => "23",
|
42 |
+
# 'cep' => "09710240",
|
43 |
+
# 'bairro' => "Centro",
|
44 |
+
# 'cidade' => "São Paulo",
|
45 |
+
# 'estado' => "SP"
|
46 |
+
# )
|
47 |
+
public $comprador = '';
|
48 |
+
|
49 |
+
public function __construct(Array $data=array())
|
50 |
+
{
|
51 |
+
extract($data);
|
52 |
+
if (isset($comprador))
|
53 |
+
$this->comprador = $comprador;
|
54 |
+
if (isset($pedido))
|
55 |
+
$this->pedido = $pedido;
|
56 |
+
if (isset($pagamento))
|
57 |
+
$this->pagamento = $pagamento;
|
58 |
+
if (isset($capturar))
|
59 |
+
$this->capturar = $capturar;
|
60 |
+
if (isset($url_retorno))
|
61 |
+
$this->url_retorno = $url_retorno;
|
62 |
+
}
|
63 |
+
|
64 |
+
public function toPayload(){
|
65 |
+
$payload = array();
|
66 |
+
$this->setArrayItemIfValueIsPresent($payload,'pagamento',$this->pagamento);
|
67 |
+
$this->setArrayItemIfValueIsPresent($payload,'comprador',$this->comprador);
|
68 |
+
$this->setArrayItemIfValueIsPresent($payload,'pedido',$this->pedido);
|
69 |
+
$this->setArrayItemIfValueIsPresent($payload,'capturar',$this->capturar);
|
70 |
+
$this->setArrayItemIfValueIsPresent($payload,'url_retorno',$this->url_retorno);
|
71 |
+
return $payload;
|
72 |
+
}
|
73 |
+
|
74 |
+
private function setArrayItemIfValueIsPresent(&$array, $index, $value){
|
75 |
+
if(isset($value) && !empty($value)){
|
76 |
+
$array[ $index ] = $value;
|
77 |
+
return true;
|
78 |
+
}
|
79 |
+
return false;
|
80 |
+
}
|
81 |
+
}
|
lib/LocawebGateway/LocawebGatewayProcessor.php
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require 'LocawebGateway.php';
|
4 |
+
|
5 |
+
class LocawebGatewayProcessor
|
6 |
+
{
|
7 |
+
public $locawebGateway;
|
8 |
+
public $dados_internos;
|
9 |
+
public $formulario;
|
10 |
+
|
11 |
+
public function getFormulario($index){
|
12 |
+
return $this->getValueOrNull($index,$this->formulario);
|
13 |
+
}
|
14 |
+
|
15 |
+
public function getDadosInternos($index){
|
16 |
+
return $this->getValueOrNull($index,$this->dados_internos);
|
17 |
+
}
|
18 |
+
|
19 |
+
public function getValueOrNull($index,$haystack){
|
20 |
+
if(isset($haystack[$index]) && array_key_exists($index,$haystack)){
|
21 |
+
return $haystack[$index];
|
22 |
+
}
|
23 |
+
return null;
|
24 |
+
}
|
25 |
+
|
26 |
+
// Processador que recebe os dados necessários e efetua a requisição ao gateway da locaweb
|
27 |
+
// Recebe 2 váriaveis dados internos e os dados do formulários , os internos são informações
|
28 |
+
// que devem vir do seu sistema , como por exemplo o numero de um pedido , enquanto os dados
|
29 |
+
// do formulário são os enviados pelo usuário no momento da compra, como o nr. do cartão.
|
30 |
+
function __construct($dados_internos,$formulario, $gateway = 'LocawebGateway')
|
31 |
+
{
|
32 |
+
$this->dados_internos = $dados_internos;
|
33 |
+
$this->formulario = $formulario;
|
34 |
+
|
35 |
+
$this->locawebGateway = new $gateway;
|
36 |
+
|
37 |
+
// Preparar dados a serem enviados.
|
38 |
+
$this->preparePayload();
|
39 |
+
}
|
40 |
+
|
41 |
+
public function preparePayload(){
|
42 |
+
|
43 |
+
// Configura a URL que deve ser acessada após o processamento pelo gateway ser efetuado.
|
44 |
+
// Exemplo: 'url_retorno' => 'http://www.minha-loja.com.br/confirmacao-pedido.php?id=12345'
|
45 |
+
$this->locawebGateway->payment()->url_retorno = $this->getDadosInternos('url_retorno');
|
46 |
+
|
47 |
+
// Configura se a captura deve ocorrer automaticamente
|
48 |
+
// Valido apenas para operações via Cielo e Redecard.
|
49 |
+
// Exemplo: 'capturar' => 'true'
|
50 |
+
$this->locawebGateway->payment()->capturar= $this->getDadosInternos('capturar_automaticamente');
|
51 |
+
|
52 |
+
// Configura os dados relacionados ao pedido.
|
53 |
+
// Exemplo: 'pedido' => array(
|
54 |
+
// 'numero' => "123",
|
55 |
+
// 'total' => "100.00",
|
56 |
+
// 'moeda' => "real",
|
57 |
+
// 'descricao' => "My Camaro car!"
|
58 |
+
// )
|
59 |
+
$this->locawebGateway->payment()->pedido = array(
|
60 |
+
'numero' => $this->getDadosInternos('numero_pedido'),
|
61 |
+
'total' => sprintf('%.2f', (double) $this->getDadosInternos('total')),
|
62 |
+
'moeda' => $this->getDadosInternos('moeda'),
|
63 |
+
'descricao' => $this->getDadosInternos('descricao')
|
64 |
+
);
|
65 |
+
|
66 |
+
// Atributo contendo as informações sobre o pagamento:
|
67 |
+
// Exemplo: 'pagamento' => array(
|
68 |
+
// 'bandeira' => "visa",
|
69 |
+
// 'cartao_numero' => "4012001037141112",
|
70 |
+
// 'cartao_cvv' => "973",
|
71 |
+
// 'parcelas' => "1",
|
72 |
+
// 'tipo_operacao' => "credito_a_vista",
|
73 |
+
// 'cartao_validade' => "082015"
|
74 |
+
// )
|
75 |
+
$this->locawebGateway->payment()->pagamento = array(
|
76 |
+
'meio_pagamento' => $this->getDadosInternos('meio_pagamento'),
|
77 |
+
'bandeira' => $this->getFormulario('bandeira'),
|
78 |
+
'cartao_numero' => $this->getFormulario('cartao_numero'),
|
79 |
+
'cartao_cvv' => $this->getFormulario('cartao_cvv'),
|
80 |
+
'cartao_validade' => preg_replace('/[^\d]/','',$this->getFormulario('cartao_validade')) # E.R. para remover tudo que não for numero.
|
81 |
+
);
|
82 |
+
|
83 |
+
#Parcelas e tipo de operações são tratados separadamente para confirmar se o usuario escolheu dentro do nivel permitido.
|
84 |
+
if(is_array($this->getDadosInternos('parcelas_permitidas')))
|
85 |
+
if(in_array($this->getFormulario('parcelas'),$this->getDadosInternos('parcelas_permitidas')))
|
86 |
+
$this->locawebGateway->payment()->pagamento['parcelas'] = $this->getFormulario('parcelas');
|
87 |
+
else
|
88 |
+
throw new Exception('Numero de Parcelas inválidas');
|
89 |
+
|
90 |
+
if(is_array($this->getDadosInternos('operacoes_permitidas')))
|
91 |
+
if(in_array($this->getFormulario('tipo_operacao'),$this->getDadosInternos('operacoes_permitidas')))
|
92 |
+
$this->locawebGateway->payment()->pagamento['tipo_operacao'] = $this->getFormulario('tipo_operacao');
|
93 |
+
else
|
94 |
+
throw new Exception('Tipo de operação inválida');
|
95 |
+
|
96 |
+
// Atributo contendo as informações sobre o comprador:
|
97 |
+
// 'comprador' => array(
|
98 |
+
// 'nome' => "Bruna da Silva",
|
99 |
+
// 'documento' => "27836038881",
|
100 |
+
// 'endereco' => "Rua da Casa",
|
101 |
+
// 'numero' => "1",
|
102 |
+
// 'cep' => "09710240",
|
103 |
+
// 'bairro' => "Centro",
|
104 |
+
// 'cidade' => "São Paulo",
|
105 |
+
// 'estado' => "SP"
|
106 |
+
if(is_array($this->getFormulario('endereco'))){
|
107 |
+
$endereco = implode($this->getFormulario('endereco'));
|
108 |
+
} else {
|
109 |
+
$endereco = $this->getFormulario('endereco');
|
110 |
+
}
|
111 |
+
|
112 |
+
$this->locawebGateway->payment()->comprador = array(
|
113 |
+
'nome' => $this->getFormulario('nome'),
|
114 |
+
'documento' => preg_replace('/[^\d]/','',$this->getFormulario('documento')), # E.R. para remover tudo que não for numero.
|
115 |
+
'endereco' => $endereco,
|
116 |
+
'cep' => preg_replace('/[^\d]/','',$this->getFormulario('cep')), # E.R. para remover tudo que não for numero.
|
117 |
+
'bairro' => $this->getFormulario('bairro'),
|
118 |
+
'numero' => $this->getFormulario('numero'),
|
119 |
+
'cidade' => $this->getFormulario('cidade'),
|
120 |
+
'estado' => $this->getFormulario('estado')
|
121 |
+
);
|
122 |
+
}
|
123 |
+
}
|
lib/LocawebGateway/LocawebGatewayRequest.php
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once('SimpleRestClient.php');
|
3 |
+
|
4 |
+
class LocawebGatewayRequest
|
5 |
+
{
|
6 |
+
// Qual o token do cliente a ser utilizado
|
7 |
+
public $token = '';
|
8 |
+
|
9 |
+
// Dados a serem enviados
|
10 |
+
public $payload = '';
|
11 |
+
|
12 |
+
// Url do seu webservice da locaweb
|
13 |
+
public $url = '';
|
14 |
+
|
15 |
+
// RestClient to be used
|
16 |
+
private $_restClient;
|
17 |
+
|
18 |
+
// Formato do envio
|
19 |
+
public $httpMethod = 'post';
|
20 |
+
|
21 |
+
// Return the restclient initialized to common requests.
|
22 |
+
protected function _buildRestClient()
|
23 |
+
{
|
24 |
+
return new SimpleRestClient($arquivo_certificado=null,$arquivo_key=null, $senha=null,
|
25 |
+
$user_agent="LocawebPhpPlugin (SimpleRestClient/Curl)", $options=null);
|
26 |
+
}
|
27 |
+
|
28 |
+
public function __construct($client = null)
|
29 |
+
{
|
30 |
+
if ($client == null)
|
31 |
+
$client = $this->_buildRestClient();
|
32 |
+
|
33 |
+
$this->setRestClient($client);
|
34 |
+
}
|
35 |
+
|
36 |
+
public function dataToBeEncoded()
|
37 |
+
{
|
38 |
+
return array_filter(array(
|
39 |
+
'token' => $this->token,
|
40 |
+
'transacao' => $this->payload
|
41 |
+
));
|
42 |
+
}
|
43 |
+
|
44 |
+
// Builds the JSON meant to be sent.
|
45 |
+
public function buildJSON()
|
46 |
+
{
|
47 |
+
return json_encode($this->dataToBeEncoded());
|
48 |
+
}
|
49 |
+
|
50 |
+
public function buildParams()
|
51 |
+
{
|
52 |
+
$request_url = '';
|
53 |
+
if(count($this->dataToBeEncoded())>0)
|
54 |
+
{
|
55 |
+
$request_url .= '?';
|
56 |
+
$request_url .= http_build_query($this->dataToBeEncoded());
|
57 |
+
}
|
58 |
+
|
59 |
+
return $request_url;
|
60 |
+
}
|
61 |
+
|
62 |
+
// Sends the data to the current url.
|
63 |
+
public function execute()
|
64 |
+
{
|
65 |
+
if($this->httpMethod == 'post')
|
66 |
+
$response = $this->post($this->buildJSON());
|
67 |
+
else
|
68 |
+
$response = $this->get($this->buildParams());
|
69 |
+
|
70 |
+
return json_decode($response);
|
71 |
+
}
|
72 |
+
|
73 |
+
// Executes the get action.
|
74 |
+
public function get($data)
|
75 |
+
{
|
76 |
+
$request_url = $this->url;
|
77 |
+
$request_url .= $data;
|
78 |
+
$restclient = $this->_restClient;
|
79 |
+
$restclient->getWebRequest($request_url);
|
80 |
+
return $restclient->getWebResponse();
|
81 |
+
}
|
82 |
+
|
83 |
+
// Executes the post action.
|
84 |
+
public function post($data)
|
85 |
+
{
|
86 |
+
$restclient = $this->_restClient;
|
87 |
+
$restclient->postWebRequest($this->url , $data);
|
88 |
+
return $restclient->getWebResponse();
|
89 |
+
}
|
90 |
+
|
91 |
+
// Allow setting a different restClient.
|
92 |
+
private function setRestClient($client)
|
93 |
+
{
|
94 |
+
$this->_restClient = $client;
|
95 |
+
}
|
96 |
+
// Allow getting the restClient.
|
97 |
+
|
98 |
+
public function getRestClient()
|
99 |
+
{
|
100 |
+
return $this->_restClient;
|
101 |
+
}
|
102 |
+
}
|
lib/LocawebGateway/SimpleRestClient.php
ADDED
@@ -0,0 +1,268 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* SimpleRestClient
|
4 |
+
*
|
5 |
+
* @copyright 2009
|
6 |
+
* @author University of Washington
|
7 |
+
* @version 1.0 9/24/2009
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
10 |
+
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
|
11 |
+
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
|
12 |
+
* to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
13 |
+
*
|
14 |
+
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
15 |
+
* of the Software.
|
16 |
+
*
|
17 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
18 |
+
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
19 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
20 |
+
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*/
|
23 |
+
class SimpleRestClient
|
24 |
+
{
|
25 |
+
// Provide default CURL options
|
26 |
+
protected $_default_opts = array(
|
27 |
+
CURLOPT_RETURNTRANSFER => true, // return result instead of echoing
|
28 |
+
CURLOPT_SSL_VERIFYPEER => false, // stop cURL from verifying the peer's certificate
|
29 |
+
CURLOPT_FOLLOWLOCATION => true, // follow redirects, Location: headers
|
30 |
+
CURLOPT_MAXREDIRS => 10, // but dont redirect more than 10 times
|
31 |
+
CURLOPT_HTTPHEADER => array("Content-Type: application/json") // Default format to json
|
32 |
+
);
|
33 |
+
|
34 |
+
protected $_response=null;
|
35 |
+
|
36 |
+
// hash to store any CURLOPT_ option values
|
37 |
+
protected $_options;
|
38 |
+
|
39 |
+
// container for full CURL getinfo hash
|
40 |
+
protected $_info=null;
|
41 |
+
|
42 |
+
// variable to hold the CURL handle
|
43 |
+
private $_c=null;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Instantiate a SimpleRestClient object.
|
47 |
+
*
|
48 |
+
* @param string $cert_file path to SSL public identity file
|
49 |
+
* @param string $key_file path to SSL private key file
|
50 |
+
* @param string $key_file passphrase to access $key_file
|
51 |
+
* @param string $user_agent client identifier sent to server with HTTP headers
|
52 |
+
* @param array $options hash of CURLOPT_ options and values
|
53 |
+
*/
|
54 |
+
public function __construct($cert_file=null,$key_file=null, $password=null, $user_agent="PhpRestClient", $options=null)
|
55 |
+
{
|
56 |
+
// make sure we can use curl
|
57 |
+
if (!function_exists('curl_init')) {
|
58 |
+
throw new Exception('Trying to use CURL, but module not installed.');
|
59 |
+
}
|
60 |
+
|
61 |
+
// load default options then add the ones passed as argument
|
62 |
+
$this->_options = $this->_default_opts;
|
63 |
+
if (is_array($options)) {
|
64 |
+
foreach ($options as $curlopt => $value) {
|
65 |
+
$this->_options[$curlopt] = $value;
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
// Use the mutator methods to take advantage of any processing or error checking
|
70 |
+
$this->setCertFile($cert_file);
|
71 |
+
$this->setKeyFile($key_file, $password);
|
72 |
+
$this->_options[CURLOPT_USERAGENT] = $user_agent;
|
73 |
+
|
74 |
+
// initialize the _info container
|
75 |
+
$this->_info = array();
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Set a CURL option
|
80 |
+
*
|
81 |
+
* @param int $curlopt index of option expressed as CURLOPT_ constant
|
82 |
+
* @param mixed $value what to set this option to
|
83 |
+
*/
|
84 |
+
public function setOption($curlopt, $value)
|
85 |
+
{
|
86 |
+
$this->_options[$curlopt] = $value;
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Set the local file system location of the SSL public certificate file that
|
91 |
+
* cURL should pass to the server to identify itself.
|
92 |
+
*
|
93 |
+
* @param string $cert_file path to SSL public identity file
|
94 |
+
*/
|
95 |
+
public function setCertFile($cert_file)
|
96 |
+
{
|
97 |
+
if (!is_null($cert_file))
|
98 |
+
{
|
99 |
+
if (!file_exists($cert_file)) {
|
100 |
+
throw new Exception('Cert file: '. $cert_file .' does not exist!');
|
101 |
+
}
|
102 |
+
if (!is_readable($cert_file)) {
|
103 |
+
throw new Exception('Cert file: '. $cert_file .' is not readable!');
|
104 |
+
}
|
105 |
+
// Put this in _options hash
|
106 |
+
$this->_options[CURLOPT_SSLCERT] = $cert_file;
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Set the local file system location of the private key file that cURL should
|
112 |
+
* use to decrypt responses from the server.
|
113 |
+
*
|
114 |
+
* @param string $key_file path to SSL private key file
|
115 |
+
* @param string $password passphrase to access $key_file
|
116 |
+
*/
|
117 |
+
public function setKeyFile($key_file, $password = null)
|
118 |
+
{
|
119 |
+
if (!is_null($key_file))
|
120 |
+
{
|
121 |
+
if (!file_exists($key_file)) {
|
122 |
+
throw new Exception('SSL Key file: '. $key_file .' does not exist!');
|
123 |
+
}
|
124 |
+
if (!is_readable($key_file)) {
|
125 |
+
throw new Exception('SSL Key file: '. $key_file .' is not readable!');
|
126 |
+
}
|
127 |
+
// set the private key in _options hash
|
128 |
+
$this->_options[CURLOPT_SSLKEY] = $key_file;
|
129 |
+
// optionally store a pass phrase for key
|
130 |
+
if (!is_null($password)) {
|
131 |
+
$this->_options[CURLOPT_SSLCERTPASSWD] = $password;
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Set the client software identifier sent to server with HTTP request headers
|
138 |
+
*
|
139 |
+
* @param string $user_agent client identifier
|
140 |
+
*/
|
141 |
+
public function setUserAgent($user_agent)
|
142 |
+
{
|
143 |
+
$this->_options[CURLOPT_USERAGENT] = $user_agent;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Retrieve the response from the server captured after calling makeWebRequest()
|
148 |
+
*
|
149 |
+
* @return string
|
150 |
+
*/
|
151 |
+
public function getWebResponse()
|
152 |
+
{
|
153 |
+
return $this->_response;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Make an HTTP GET request to the URL provided. Capture the results for future
|
158 |
+
* use.
|
159 |
+
*
|
160 |
+
* @param string $url absolute URL to make an HTTP request to
|
161 |
+
*/
|
162 |
+
public function getWebRequest($url) // removed $public argument, implied by existence of SSLCERT and SSLKEY in _options
|
163 |
+
{
|
164 |
+
$_c = curl_init($url); // $url is the resource we're fetching
|
165 |
+
|
166 |
+
// set the options
|
167 |
+
foreach ($this->_options as $curlopt => $value) {
|
168 |
+
curl_setopt($_c, $curlopt, $value);
|
169 |
+
}
|
170 |
+
|
171 |
+
$_raw_data = curl_exec($_c);
|
172 |
+
$_raw_data = $this->fix_iis_data($_raw_data);
|
173 |
+
if (curl_errno($_c) != 0) {
|
174 |
+
throw new Exception('Aborting. cURL error: ' . curl_error($_c));
|
175 |
+
}
|
176 |
+
$this->_response=str_replace("xmlns=","a=",$_raw_data); //Getting rid of xmlns so that clients can use SimpleXML and XPath without problems otherwise SimpleXML does not recognize the document as an XML document
|
177 |
+
|
178 |
+
// Store all cURL metadata about this request
|
179 |
+
$this->_info = curl_getinfo($_c);
|
180 |
+
curl_close($_c);
|
181 |
+
}
|
182 |
+
/**
|
183 |
+
* Make an HTTP POST request to the URL provided. Capture the results for future
|
184 |
+
* use.
|
185 |
+
* @param array $data can be either a string or an array
|
186 |
+
*/
|
187 |
+
public function postWebRequest($url, $data)
|
188 |
+
{
|
189 |
+
// Serialize the data into a query string
|
190 |
+
if (is_array($data)) {
|
191 |
+
$post_data = '';
|
192 |
+
$need_amp = false;
|
193 |
+
foreach ($data as $varname => $val) {
|
194 |
+
if ($need_amp) $post_data .= '&';
|
195 |
+
$val = urlencode($val);
|
196 |
+
$post_data .= "{$varname}={$val}";
|
197 |
+
$need_amp = true;
|
198 |
+
}
|
199 |
+
} elseif (is_string($data)) {
|
200 |
+
$post_data = $data;
|
201 |
+
} else {
|
202 |
+
$post_data = '';
|
203 |
+
}
|
204 |
+
|
205 |
+
//Do the POST and get back the results
|
206 |
+
$_c = curl_init($url); // $url is the resource we're fetching
|
207 |
+
// set the options
|
208 |
+
foreach ($this->_options as $curlopt => $value) {
|
209 |
+
curl_setopt($_c, $curlopt, $value);
|
210 |
+
}
|
211 |
+
curl_setopt($_c,CURLOPT_POST, 1);
|
212 |
+
curl_setopt($_c,CURLOPT_POSTFIELDS, $post_data);
|
213 |
+
$_raw_data = curl_exec($_c);
|
214 |
+
$_raw_data = $this->fix_iis_data($_raw_data);
|
215 |
+
if (curl_errno($_c) != 0) {
|
216 |
+
throw new Exception('Aborting. cURL error: ' . curl_error($_c));
|
217 |
+
}
|
218 |
+
$this->_response=str_replace("xmlns=","a=",$_raw_data); //Getting rid of xmlns so that clients can use SimpleXML and XPath without problems otherwise SimpleXML does not recognize the document as an XML document
|
219 |
+
// Store all cURL metadata about this request
|
220 |
+
$this->_info = curl_getinfo($_c);
|
221 |
+
curl_close($_c);
|
222 |
+
}
|
223 |
+
/**
|
224 |
+
* Get stats and info about the last run HTTP request. Data available here
|
225 |
+
* is from Curl's curl_getinfo function. Either returns the full assoc
|
226 |
+
* array of data or the specified item.
|
227 |
+
*
|
228 |
+
* @param string $item index to a specific info item
|
229 |
+
* @return mixed
|
230 |
+
*/
|
231 |
+
public function getInfo($item = 0)
|
232 |
+
{
|
233 |
+
if ($item === 0) { return $this->_info; }
|
234 |
+
|
235 |
+
if (array_key_exists($item, $this->_info)) {
|
236 |
+
return $this->_info[$item];
|
237 |
+
} else {
|
238 |
+
return null;
|
239 |
+
}
|
240 |
+
}
|
241 |
+
|
242 |
+
/**
|
243 |
+
* Get the HTTP status code returned by the last execution of makeWebRequest()
|
244 |
+
*
|
245 |
+
* @return int
|
246 |
+
*/
|
247 |
+
public function getStatusCode()
|
248 |
+
{
|
249 |
+
return $this->getInfo('http_code');
|
250 |
+
}
|
251 |
+
/**
|
252 |
+
* Apply a couple of heuristics to fix data coming from an IIS server
|
253 |
+
*/
|
254 |
+
private function fix_iis_data($data)
|
255 |
+
{
|
256 |
+
// IIS has an annoying habit of prepending binary garbage to the beginning
|
257 |
+
// of their XML payloads. Nuke it.
|
258 |
+
$beg = strpos($data, '<?xml');
|
259 |
+
if ($beg) {
|
260 |
+
$data = substr($data, $beg, strlen($data) - strlen($beg));
|
261 |
+
}
|
262 |
+
|
263 |
+
// IIS often inserts invalid character references.
|
264 |
+
$data = str_replace('�', '', $data);
|
265 |
+
|
266 |
+
return($data);
|
267 |
+
}
|
268 |
+
}
|
package.xml
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Locaweb_Gateway</name>
|
4 |
-
<version>1.0.
|
5 |
<stability>stable</stability>
|
6 |
-
<license uri="http://opensource.org/licenses/osl-3.0.php">
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
-
<summary>
|
10 |
<description>O Gateway de Pagamento da Locaweb é um facilitador, que permite a contratação e a integração de diversos meios de pagamento em qualquer tipo de loja online.
|
11 |

|
12 |
Atualmente, temos dois meios de pagamento disponíveis na extension do Magento:
|
@@ -37,8 +37,8 @@ Além destes, estamos buscando colaboradores para desenvolver os seguintes m
|
|
37 |
Se você estiver interessado em colaborar com o desenvolvimento da extension, o repositório está disponível no Github, na seguinte url: https://github.com/locaweb/gateway_magento.</notes>
|
38 |
<authors><author><name>Locaweb</name><user>locaweb</user><email>saas-dev@locaweb.com.br</email></author></authors>
|
39 |
<date>2012-10-19</date>
|
40 |
-
<time>
|
41 |
-
<contents><target name="magecommunity"><dir name="Locaweb"><dir name="Abstract"><dir name="Config"><file name="Cctype.php" hash="bfc9fd031cf7357fb426cf8b8aff15bf"/><file name="Parceltype.php" hash="d0cd2f5dd62c44b8617f5a3389053f6b"/></dir><dir name="Model"><dir name="Payment"><dir name="Method"><file name="Cc.php" hash="7caa7f717867a481e5e2d3096caf6379"/></dir></dir></dir></dir><dir name="CieloBuyLoja"><dir name="Block"><dir name="Form"><file name="Cc.php" hash="3e5849dc322c7078f8885e0ee6c297f2"/></dir></dir><dir name="Config"><file name="Cctype.php" hash="5ae06f93bb4aae2b574c1f4805baafe4"/></dir><dir name="Helper"><file name="Data.php" hash="ee1f59db5830572a72795453ae01a9ce"/></dir><dir name="Model"><file name="Transaction.php" hash="31419aacb716199344bb2f38a5c6e062"/></dir><dir name="etc"><file name="config.xml" hash="340618f85e07339b07407ecdbe9a1c7a"/><file name="system.xml" hash="9dd3909b96959b257eed078080c4258d"/></dir></dir><dir name="RedeCardWS"><dir name="Block"><dir name="Form"><file name="Cc.php" hash="bca9a9e131a6474c83c0db98938ce4fb"/></dir></dir><dir name="Config"><file name="Cctype.php" hash="22417a736b9d221f0cba98e5460c9aee"/></dir><dir name="Helper"><file name="Data.php" hash="71b47a6f927431a976e4ad7b7e6d8a83"/></dir><dir name="Model"><file name="Transaction.php" hash="054b2ea6b3fcc13088e88985115e01e6"/></dir><dir name="etc"><file name="config.xml" hash="a40004df4b7fd042e583ec6267a7db55"/><file name="system.xml" hash="8c1c3c9b468645474947160d007075cb"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="abstract"><dir name="form"><file name="cc.phtml" hash="99927cd67e61e69abe0d421e6c010882"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Locaweb_CieloBuyLoja.xml" hash="5c81993759047a9829b3b78424bf59a4"/><file name="Locaweb_RedecardWS.xml" hash="225d101fca4c4fa09ea3f3a3d4895cae"/></dir></target><target name="
|
42 |
<compatible/>
|
43 |
<dependencies><required><php><min>5.3.0</min><max>5.4.0</max></php></required></dependencies>
|
44 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Locaweb_Gateway</name>
|
4 |
+
<version>1.0.2</version>
|
5 |
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">osl</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
+
<summary>Correções em meios de pagamento</summary>
|
10 |
<description>O Gateway de Pagamento da Locaweb é um facilitador, que permite a contratação e a integração de diversos meios de pagamento em qualquer tipo de loja online.
|
11 |

|
12 |
Atualmente, temos dois meios de pagamento disponíveis na extension do Magento:
|
37 |
Se você estiver interessado em colaborar com o desenvolvimento da extension, o repositório está disponível no Github, na seguinte url: https://github.com/locaweb/gateway_magento.</notes>
|
38 |
<authors><author><name>Locaweb</name><user>locaweb</user><email>saas-dev@locaweb.com.br</email></author></authors>
|
39 |
<date>2012-10-19</date>
|
40 |
+
<time>20:03:14</time>
|
41 |
+
<contents><target name="magecommunity"><dir name="Locaweb"><dir name="Abstract"><dir name="Config"><file name="Cctype.php" hash="bfc9fd031cf7357fb426cf8b8aff15bf"/><file name="Parceltype.php" hash="d0cd2f5dd62c44b8617f5a3389053f6b"/></dir><dir name="Model"><dir name="Payment"><dir name="Method"><file name="Cc.php" hash="7caa7f717867a481e5e2d3096caf6379"/></dir></dir></dir></dir><dir name="CieloBuyLoja"><dir name="Block"><dir name="Form"><file name="Cc.php" hash="3e5849dc322c7078f8885e0ee6c297f2"/></dir></dir><dir name="Config"><file name="Cctype.php" hash="5ae06f93bb4aae2b574c1f4805baafe4"/></dir><dir name="Helper"><file name="Data.php" hash="ee1f59db5830572a72795453ae01a9ce"/></dir><dir name="Model"><file name="Transaction.php" hash="31419aacb716199344bb2f38a5c6e062"/></dir><dir name="etc"><file name="config.xml" hash="340618f85e07339b07407ecdbe9a1c7a"/><file name="system.xml" hash="9dd3909b96959b257eed078080c4258d"/></dir></dir><dir name="RedeCardWS"><dir name="Block"><dir name="Form"><file name="Cc.php" hash="bca9a9e131a6474c83c0db98938ce4fb"/></dir></dir><dir name="Config"><file name="Cctype.php" hash="22417a736b9d221f0cba98e5460c9aee"/></dir><dir name="Helper"><file name="Data.php" hash="71b47a6f927431a976e4ad7b7e6d8a83"/></dir><dir name="Model"><file name="Transaction.php" hash="054b2ea6b3fcc13088e88985115e01e6"/></dir><dir name="etc"><file name="config.xml" hash="a40004df4b7fd042e583ec6267a7db55"/><file name="system.xml" hash="8c1c3c9b468645474947160d007075cb"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="abstract"><dir name="form"><file name="cc.phtml" hash="99927cd67e61e69abe0d421e6c010882"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Locaweb_CieloBuyLoja.xml" hash="5c81993759047a9829b3b78424bf59a4"/><file name="Locaweb_RedecardWS.xml" hash="225d101fca4c4fa09ea3f3a3d4895cae"/></dir></target><target name="magelib"><dir name="LocawebGateway"><file name="LocawebGateway.php" hash="e3354e104dedabf5f1a98afce709caec"/><file name="LocawebGatewayConfig.inc.php" hash="86bc0538d9716d98a9101b22991273a1"/><file name="LocawebGatewayPayment.php" hash="d32dcca070b9e47dd7395f4d91a6456d"/><file name="LocawebGatewayProcessor.php" hash="5af81c01ce4829dda6c9fd2e4cb12f0a"/><file name="LocawebGatewayRequest.php" hash="75a8a17a65e539c9d230ef8c3741fb3b"/><file name="SimpleRestClient.php" hash="906af2d14a9cdf9e68dfc1499977b0ba"/><file name=".DS_Store" hash="fe95c3663a0bce608c3a05050f085fce"/></dir></target><target name="magelocale"><dir name="pt_BR"><file name="Locaweb_Gateway.csv" hash="acefe4130e9aee0a18d1945be634043f"/></dir></target></contents>
|
42 |
<compatible/>
|
43 |
<dependencies><required><php><min>5.3.0</min><max>5.4.0</max></php></required></dependencies>
|
44 |
</package>
|