MercadoPagoTransparent - Version 0.0.1

Version Notes

Checkout Transparente disponível para: Brasil, Argentina e Mexico.

Checkout Standard disponível para: Brasil, Argentina, Mexico, Venezuela e Colombia.

Download this release

Release Info

Developer Developers MercadoPago Brasil
Extension MercadoPagoTransparent
Version 0.0.1
Comparing to
See all releases


Version 0.0.1

Files changed (68) hide show
  1. app/code/community/MercadoPago/.DS_Store +0 -0
  2. app/code/community/MercadoPago/Standard/Block/Form.php +34 -0
  3. app/code/community/MercadoPago/Standard/Block/Info.php +36 -0
  4. app/code/community/MercadoPago/Standard/Helper/Data.php +22 -0
  5. app/code/community/MercadoPago/Standard/Model/Checkout.php +250 -0
  6. app/code/community/MercadoPago/Standard/Model/Observer.php +107 -0
  7. app/code/community/MercadoPago/Standard/Model/Source/CategoryId.php +44 -0
  8. app/code/community/MercadoPago/Standard/Model/Source/Country.php +32 -0
  9. app/code/community/MercadoPago/Standard/Model/Source/Installments.php +37 -0
  10. app/code/community/MercadoPago/Standard/Model/Source/PaymentMethods.php +41 -0
  11. app/code/community/MercadoPago/Standard/Model/Source/TypeCheckout.php +31 -0
  12. app/code/community/MercadoPago/Standard/controllers/NotificationController.php +190 -0
  13. app/code/community/MercadoPago/Standard/controllers/PayController.php +64 -0
  14. app/code/community/MercadoPago/Standard/etc/config.xml +120 -0
  15. app/code/community/MercadoPago/Standard/etc/system.xml +256 -0
  16. app/code/community/MercadoPago/Transparent/.DS_Store +0 -0
  17. app/code/community/MercadoPago/Transparent/Block/.DS_Store +0 -0
  18. app/code/community/MercadoPago/Transparent/Block/Form.php +82 -0
  19. app/code/community/MercadoPago/Transparent/Block/Info.php +36 -0
  20. app/code/community/MercadoPago/Transparent/Block/Success.php +36 -0
  21. app/code/community/MercadoPago/Transparent/Helper/Data.php +22 -0
  22. app/code/community/MercadoPago/Transparent/Model/.DS_Store +0 -0
  23. app/code/community/MercadoPago/Transparent/Model/Resource/Setup.php +14 -0
  24. app/code/community/MercadoPago/Transparent/Model/Source/CategoryId.php +44 -0
  25. app/code/community/MercadoPago/Transparent/Model/Transparent.php +393 -0
  26. app/code/community/MercadoPago/Transparent/controllers/NotificacaoController.php +190 -0
  27. app/code/community/MercadoPago/Transparent/controllers/PayController.php +194 -0
  28. app/code/community/MercadoPago/Transparent/etc/config.xml +103 -0
  29. app/code/community/MercadoPago/Transparent/etc/system.xml +81 -0
  30. app/code/community/MercadoPago/TransparentTicket/Block/Form.php +50 -0
  31. app/code/community/MercadoPago/TransparentTicket/Block/Info.php +36 -0
  32. app/code/community/MercadoPago/TransparentTicket/Helper/Data.php +22 -0
  33. app/code/community/MercadoPago/TransparentTicket/Model/Transparent.php +86 -0
  34. app/code/community/MercadoPago/TransparentTicket/etc/config.xml +103 -0
  35. app/code/community/MercadoPago/TransparentTicket/etc/system.xml +74 -0
  36. app/design/adminhtml/default/default/template/mercadopago/standard/info.phtml +29 -0
  37. app/design/adminhtml/default/default/template/mercadopago/transparent/info.phtml +33 -0
  38. app/design/adminhtml/default/default/template/mercadopago/transparent_boleto/info.phtml +13 -0
  39. app/design/adminhtml/default/default/template/mercadopago/transparent_ticket/info.phtml +15 -0
  40. app/design/frontend/base/default/layout/mercadopago.xml +9 -0
  41. app/design/frontend/base/default/template/mercadopago/clean_page.phtml +48 -0
  42. app/design/frontend/base/default/template/mercadopago/standard/form.phtml +12 -0
  43. app/design/frontend/base/default/template/mercadopago/standard/info.phtml +36 -0
  44. app/design/frontend/base/default/template/mercadopago/standard/pay.phtml +51 -0
  45. app/design/frontend/base/default/template/mercadopago/transparent/form.phtml +175 -0
  46. app/design/frontend/base/default/template/mercadopago/transparent/info.phtml +33 -0
  47. app/design/frontend/base/default/template/mercadopago/transparent/success.phtml +229 -0
  48. app/design/frontend/base/default/template/mercadopago/transparent/sucesso.phtml +103 -0
  49. app/design/frontend/base/default/template/mercadopago/transparent_boleto/form.phtml +20 -0
  50. app/design/frontend/base/default/template/mercadopago/transparent_boleto/info.phtml +23 -0
  51. app/design/frontend/base/default/template/mercadopago/transparent_ticket/form.phtml +31 -0
  52. app/design/frontend/base/default/template/mercadopago/transparent_ticket/info.phtml +27 -0
  53. app/etc/modules/MercadoPago_Standard.xml +9 -0
  54. app/etc/modules/MercadoPago_Transparent.xml +9 -0
  55. app/etc/modules/MercadoPago_TransparentBoleto.xml +9 -0
  56. app/etc/modules/MercadoPago_TransparentTicket.xml +9 -0
  57. app/locale/es_AR/mercadopago.csv +114 -0
  58. app/locale/es_CO/mercadopago.csv +119 -0
  59. app/locale/es_ES/mercadopago.csv +41 -0
  60. app/locale/es_MX/mercadopago.csv +120 -0
  61. app/locale/pt_BR/mercadopago.csv +120 -0
  62. js/mercadopago/jquery-1.11.0.min.js +4 -0
  63. js/mercadopago/mercadopago.js +294 -0
  64. lib/mercadopago/mercadopago.php +342 -0
  65. package.xml +26 -0
  66. skin/frontend/base/default/mercadopago/.DS_Store +0 -0
  67. skin/frontend/base/default/mercadopago/css/style.css +222 -0
  68. skin/frontend/base/default/mercadopago/images/loading.gif +0 -0
app/code/community/MercadoPago/.DS_Store ADDED
Binary file
app/code/community/MercadoPago/Standard/Block/Form.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+
18
+ class MercadoPago_Standard_Block_Form extends Mage_Payment_Block_Form_Cc{
19
+
20
+ protected function _construct(){
21
+
22
+ // Route: /checkout/onepage
23
+ // inicia formulario para a escolha de pagamento
24
+ parent::_construct();
25
+
26
+ $this->setTemplate('mercadopago/standard/form.phtml');
27
+
28
+ }
29
+ }
30
+
31
+
32
+
33
+
34
+ ?>
app/code/community/MercadoPago/Standard/Block/Info.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+
18
+ class MercadoPago_Standard_Block_Info extends Mage_Payment_Block_Info_Cc{
19
+
20
+ protected function _construct(){
21
+
22
+ // Route: /checkout/onepage
23
+ // inicia formulario para a escolha de pagamento
24
+
25
+ parent::_construct();
26
+ $this->setTemplate('mercadopago/standard/info.phtml');
27
+ $this->setModuleName('Mage_Payment');
28
+ }
29
+
30
+
31
+ public function getOrder() {
32
+
33
+ return $this->getInfo();
34
+
35
+ }
36
+ }
app/code/community/MercadoPago/Standard/Helper/Data.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ ?>
17
+ <?php
18
+
19
+
20
+ class MercadoPago_Standard_Helper_Data extends Mage_Payment_Helper_Data{
21
+
22
+ }
app/code/community/MercadoPago/Standard/Model/Checkout.php ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ require_once(Mage::getBaseDir('lib') . '/mercadopago/mercadopago.php');
18
+
19
+ class MercadoPago_Standard_Model_Checkout extends Mage_Payment_Model_Method_Abstract{
20
+
21
+ //configura o lugar do arquivo para listar meios de pagamento
22
+ protected $_formBlockType = 'mercadopago_standard/form';
23
+ protected $_infoBlockType = 'mercadopago_standard/info';
24
+
25
+ protected $_code = 'mercadopago_standard';
26
+
27
+ protected $_isGateway = true;
28
+ protected $_canOrder = true;
29
+ protected $_canAuthorize = true;
30
+ protected $_canCapture = true;
31
+ protected $_canCapturePartial = true;
32
+ protected $_canRefund = true;
33
+ protected $_canRefundInvoicePartial = true;
34
+ protected $_canVoid = true;
35
+ protected $_canUseInternal = true;
36
+ protected $_canUseCheckout = true;
37
+ protected $_canUseForMultishipping = true;
38
+ protected $_canFetchTransactionInfo = true;
39
+ protected $_canCreateBillingAgreement = true;
40
+ protected $_canReviewPayment = true;
41
+
42
+ protected function _construct(){
43
+ $this->_init('mercadopago_standard/checkout');
44
+ }
45
+
46
+ public function postPago(){
47
+ //seta sdk php mercadopago
48
+ $client_id = Mage::getStoreConfig('payment/mercadopago_configuration/client_id');
49
+ $client_secret = Mage::getStoreConfig('payment/mercadopago_configuration/client_secret');
50
+ $mp = new MP($client_id, $client_secret);
51
+
52
+ //monta a prefernecia
53
+ $pref = $this->makePreference();
54
+
55
+ //faz o posto do pagamento
56
+ return $mp->create_preference($pref);
57
+ }
58
+
59
+ public function getOrderPlaceRedirectUrl() {
60
+
61
+ // requisicao vem da pagina de finalizacao de pedido
62
+ return Mage::getUrl('mercadopago_standard/pay', array('_secure' => true));
63
+
64
+ }
65
+
66
+ public function getDiscount($order){
67
+ $discount = 0;
68
+
69
+ $order = $order->getData();
70
+
71
+ if(isset($order['base_discount_amount']) && $order['base_discount_amount'] < 0) {
72
+ $discount = $order['base_discount_amount'];
73
+ }
74
+
75
+ return $discount;
76
+ }
77
+
78
+ function makePreference(){
79
+
80
+ //pega a order atual
81
+ $orderIncrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
82
+ $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
83
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
84
+ $model = Mage::getModel('catalog/product');
85
+
86
+
87
+
88
+ //pega payment dentro da order para pegar as informacoes adicionadas pela funcao assignData()
89
+ $payment = $order->getPayment();
90
+
91
+ //init array preferneces
92
+ $arr = array();
93
+
94
+ //seta o external_reference para concilia��o futura
95
+ $arr['external_reference'] = $orderIncrementId;
96
+
97
+ //monta array de produtos
98
+ $arr['items'] = array();
99
+ foreach ($order->getAllVisibleItems() as $item) {
100
+
101
+ $prod = $model->loadByAttribute('sku', $item->getSku());
102
+
103
+ //get image
104
+ try{
105
+ $imagem = $prod->getImageUrl();
106
+ }catch(Exception $e){
107
+ $imagem = "";
108
+ }
109
+
110
+ $arr['items'][] = array(
111
+ "id" => $item->getSku(),
112
+ "title" => $item->getName(),
113
+ "description" => $item->getName(),
114
+ "picture_url" => $imagem,
115
+ "category_id" => Mage::getStoreConfig('payment/mercadopago_configuration/category_id'),
116
+ "quantity" => (int) number_format($item->getQtyOrdered(), 0, '.', ''),
117
+ "unit_price" => (float) number_format($prod->getPrice(), 2, '.', '')
118
+ );
119
+
120
+ }
121
+
122
+ //verifica se existe desconto, caso exista adiciona como um item
123
+ $discount = $this->getDiscount($order);
124
+
125
+ if($discount != 0){
126
+ $arr['items'][] = array(
127
+ "title" => "Discount by the Store",
128
+ "description" => "Discount by the Store",
129
+ "quantity" => (int) 1,
130
+ "unit_price" => (float) number_format($discount, 2, '.', '')
131
+ );
132
+ }
133
+
134
+
135
+ //pega dados de envio
136
+ if(method_exists($order->getShippingAddress(), "getData")){
137
+ $shipping = $order->getShippingAddress()->getData();
138
+ $arr['shipments']['receiver_address'] = array(
139
+ "floor" => "-",
140
+ "zip_code" => $shipping['postcode'],
141
+ "street_name" => $shipping['street'] . " - " . $shipping['city'] . " - " . $shipping['country_id'],
142
+ "apartment" => "-",
143
+ "street_number" => "0"
144
+ );
145
+ $arr['payer']['phone'] = array(
146
+ "area_code" => "-",
147
+ "number" => $shipping['telephone']
148
+ );
149
+ }
150
+
151
+ //adiciona o valor do frete nas preferencias
152
+ if($order->getBaseShippingAmount() != "" && $order->getBaseShippingAmount() > 0){
153
+ $arr['shipments']['cost'] = (float) $order->getBaseShippingAmount();
154
+ }
155
+
156
+
157
+ //pega informa�oes de cadastro do usuario
158
+ $billing_address = $order->getBillingAddress();
159
+ $billing_address = $billing_address->getData();
160
+
161
+ //formata a data do usuario para o padrao do mercado pago YYYY-MM-DDTHH:MM:SS
162
+ $arr['payer']['date_created'] = date('Y-m-d',$customer->getCreatedAtTimestamp()) . "T" . date('H:i:s',$customer->getCreatedAtTimestamp());
163
+
164
+ //set informa�oes do usuario
165
+ $arr['payer']['email'] = htmlentities($customer->getEmail());
166
+ $arr['payer']['first_name'] = htmlentities($customer->getFirstname());
167
+ $arr['payer']['last_name'] = htmlentities($customer->getLastname());
168
+
169
+ //set o documento do usuario
170
+ if(isset($payment['additional_information']['doc_number']) && $payment['additional_information']['doc_number'] != ""){
171
+ $arr['payer']['identification'] = array(
172
+ "type" => "CPF",
173
+ "number" => $payment['additional_information']['doc_number']
174
+ );
175
+ }
176
+
177
+ //set endereco do usuario
178
+ $arr['payer']['address'] = array(
179
+ "zip_code" => $billing_address['postcode'],
180
+ "street_name" => $billing_address['street'] . " - " . $billing_address['city'] . " - " . $billing_address['country_id'],
181
+ "street_number" => "0"
182
+ );
183
+
184
+ //setta as urls de retorno
185
+ $arr['back_urls'] = array(
186
+ "success" => Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true) . "checkout/onepage/success",
187
+ "pending" => Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true) . "checkout/onepage/success",
188
+ "failure" => Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true) . "checkout/onepage/success"
189
+ );
190
+
191
+ //define a url de notificacao
192
+ $arr['notification_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true) . "mercadopago_standard/notification";
193
+
194
+ //pega o email e o nome do usuario guest
195
+ if($arr['payer']['email'] == ""){
196
+ $arr['payer']['email'] = $order['customer_email'];
197
+ $arr['payer']['first_name'] = $order->getBillingAddress()->getFirstname();
198
+ $arr['payer']['last_name'] = $order->getBillingAddress()->getLastname();
199
+ }
200
+
201
+ // pega os meios de pagamento que ele dejexa excluir
202
+ $checkout = Mage::getModel('mercadopago_standard/checkout');
203
+ $excluded_payment_methods = $checkout->getConfigData('excluded_payment_methods');
204
+ $arr_epm = explode(",", $excluded_payment_methods);
205
+ if(count($arr_epm) > 0){
206
+ $arr['payment_methods']['excluded_payment_methods'] = array();
207
+
208
+ foreach($arr_epm as $m):
209
+ $arr['payment_methods']['excluded_payment_methods'][] = array("id" => $m);
210
+ endforeach;
211
+
212
+ }
213
+
214
+ //seta o numero de parcelas maxima aceita pelo lojista
215
+ $installments = $checkout->getConfigData('installments');
216
+ $arr['payment_methods']['installments'] = (int) $installments;
217
+
218
+
219
+ //define o retorno automatico ao finalizar o checkout
220
+ $auto_return = $checkout->getConfigData('auto_return');
221
+ if($auto_return == 1){
222
+ $arr['auto_return'] = "approved";
223
+ }
224
+
225
+ //adiciona o sponsor_id para as vendas serem identificadas
226
+ //$arr['sponsor_id'] = "";
227
+
228
+ return $arr;
229
+
230
+ }
231
+
232
+
233
+ public function getPayment($payment_id){
234
+ $model = $this;
235
+ $this->client_id = Mage::getStoreConfig('payment/mercadopago_configuration/client_id');
236
+ $this->client_secret = Mage::getStoreConfig('payment/mercadopago_configuration/client_secret');
237
+ $mp = new MP($this->client_id, $this->client_secret);
238
+ return $mp->get_payment($payment_id);
239
+ }
240
+
241
+ public function getMerchantOrder($merchant_order_id){
242
+ $model = $this;
243
+ $this->client_id = Mage::getStoreConfig('payment/mercadopago_configuration/client_id');
244
+ $this->client_secret = Mage::getStoreConfig('payment/mercadopago_configuration/client_secret');
245
+ $mp = new MP($this->client_id, $this->client_secret);
246
+ return $mp->get_merchant_order($merchant_order_id);
247
+ }
248
+ }
249
+
250
+ ?>
app/code/community/MercadoPago/Standard/Model/Observer.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ ini_set('display_errors',1);
3
+ ini_set('display_startup_erros',1);
4
+ error_reporting(E_ALL);
5
+
6
+ /**
7
+ *
8
+ * NOTICE OF LICENSE
9
+ *
10
+ * This source file is subject to the Open Software License (OSL).
11
+ * It is also available through the world-wide-web at this URL:
12
+ * http://opensource.org/licenses/osl-3.0.php
13
+ *
14
+ * @category Payment Gateway
15
+ * @package MercadoPago
16
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
17
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
18
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
19
+ */
20
+
21
+ class MercadoPago_Standard_Model_Observer{
22
+
23
+ private $banners_credit_card = array(
24
+ "mla" => "http://imgmp.mlstatic.com/org-img/banners/ar/medios/online/468X60.jpg",
25
+ "mlb" => "http://imgmp.mlstatic.com/org-img/MLB/MP/BANNERS/tipo2_468X60.jpg",
26
+ "mco" => "https://a248.e.akamai.net/secure.mlstatic.com/components/resources/mp/css/assets/desktop-logo-mercadopago.png",
27
+ "mlm" => "http://imgmp.mlstatic.com/org-img/banners/mx/medios/MLM_468X60.JPG"
28
+ );
29
+
30
+ private $banner_ticket = array(
31
+ "mla" => "https://a248.e.akamai.net/secure.mlstatic.com/components/resources/mp/css/assets/desktop-logo-mercadopago.png",
32
+ "mlb" => "http://imgmp.mlstatic.com/org-img/MLB/MP/BANNERS/2014/230x60.png",
33
+ "mco" => "https://a248.e.akamai.net/secure.mlstatic.com/components/resources/mp/css/assets/desktop-logo-mercadopago.png",
34
+ "mlm" => "https://a248.e.akamai.net/secure.mlstatic.com/components/resources/mp/css/assets/desktop-logo-mercadopago.png"
35
+ );
36
+
37
+ private $available_transparent_credit_cart = array('mla', 'mlb', 'mlm');
38
+ private $available_transparent_ticket = array('mla', 'mlb', 'mlm');
39
+
40
+ public function checkAndValidData($observer){
41
+ $this->availableCheckout();
42
+
43
+ $this->checkBanner('mercadopago_transparentticket', 'transparent');
44
+ $this->checkBanner('mercadopago_transparent', 'transparent');
45
+ $this->checkBanner('mercadopago_standard', 'checkout');
46
+ }
47
+
48
+
49
+ public function availableCheckout(){
50
+ //verifica se o pais selecionado possui integra��o para utilizar os checkouts transparents
51
+ $core = new Mage_Core_Model_Resource_Setup('core_setup');
52
+ $country = Mage::getStoreConfig('payment/mercadopago_configuration/country');
53
+
54
+ if(!in_array($country, $this->available_transparent_credit_cart)){
55
+ $core->setConfigData('payment/mercadopago_transparent/active', 0);
56
+ }
57
+
58
+ if(!in_array($country, $this->available_transparent_ticket)){
59
+ $core->setConfigData('payment/mercadopago_transparentticket/active', 0);
60
+ }
61
+
62
+
63
+ }
64
+
65
+ function checkBanner($model_path, $file){
66
+ //pega o model/file
67
+ $model = Mage::getModel($model_path . '/' . $file);
68
+
69
+ //pega o banner do tipo de checkout
70
+ $banner = $model->getConfigData('banner_checkout');
71
+
72
+ //pega o pais configurado
73
+ $country = Mage::getStoreConfig('payment/mercadopago_configuration/country');
74
+
75
+ if($model_path == "mercadopago_transparentticket"){
76
+ if($this->banner_ticket[$country] != $banner){
77
+ $this->setNewBanner($model_path, $country);
78
+ }
79
+ }else{
80
+ if($this->banners_credit_card[$country] != $banner){
81
+ $this->setNewBanner($model_path, $country);
82
+ }
83
+ }
84
+
85
+
86
+ }
87
+ public function setNewBanner($model, $country){
88
+ //instacia model do core para atualiza os dados no banco de dados
89
+ //no model n�o existe fun��o para fazer isso, por esse motivo foi feito assim
90
+ $core = new Mage_Core_Model_Resource_Setup('core_setup');
91
+ $core->setConfigData('payment/' . $model . '/banner_checkout', $this->getBannerByCountry($model, $country));
92
+ }
93
+
94
+ public function getBannerByCountry($model, $country){
95
+ $banner = "";
96
+
97
+ //caso seja boleto o banner � diferente
98
+ if($model == "mercadopago_transparentticket"){
99
+ $banner = $this->banner_ticket[$country];
100
+ }else{
101
+ $banner = $this->banners_credit_card[$country];
102
+ }
103
+
104
+ return $banner;
105
+ }
106
+
107
+ }
app/code/community/MercadoPago/Standard/Model/Source/CategoryId.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ require_once(Mage::getBaseDir('lib') . '/mercadopago/mercadopago.php');
18
+
19
+ class MercadoPago_Standard_Model_Source_CategoryId extends Mage_Payment_Model_Method_Abstract{
20
+
21
+ public function toOptionArray (){
22
+
23
+ $response = MPRestClient::get("/item_categories");
24
+ $response = $response['response'];
25
+
26
+ $cat = array();
27
+ $count = 0;
28
+ foreach($response as $v):
29
+ //force category others first
30
+ if($v['id'] == "others"):
31
+ $cat[0] = array('value' => $v['id'], 'label'=>Mage::helper('adminhtml')->__($v['description']));
32
+ else:
33
+ $count++;
34
+ $cat[$count] = array('value' => $v['id'], 'label'=>Mage::helper('adminhtml')->__($v['description']));
35
+ endif;
36
+
37
+ endforeach;
38
+
39
+ //force order by key
40
+ ksort($cat);
41
+ return $cat;
42
+
43
+ }
44
+ }
app/code/community/MercadoPago/Standard/Model/Source/Country.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ class MercadoPago_Standard_Model_Source_Country extends Mage_Payment_Model_Method_Abstract{
18
+
19
+ public function toOptionArray (){
20
+
21
+ $country = array();
22
+ $country[] = array('value' => "mla", 'label'=>Mage::helper('adminhtml')->__("Argentina"));
23
+ $country[] = array('value' => "mlb", 'label'=>Mage::helper('adminhtml')->__("Brasil"));
24
+ $country[] = array('value' => "mco", 'label'=>Mage::helper('adminhtml')->__("Colombia"));
25
+ $country[] = array('value' => "mlm", 'label'=>Mage::helper('adminhtml')->__("Mexico"));
26
+
27
+ //force order by key
28
+ ksort($country);
29
+ return $country;
30
+
31
+ }
32
+ }
app/code/community/MercadoPago/Standard/Model/Source/Installments.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ require_once(Mage::getBaseDir('lib') . '/mercadopago/mercadopago.php');
18
+
19
+ class MercadoPago_Standard_Model_Source_Installments extends Mage_Payment_Model_Method_Abstract{
20
+
21
+ public function toOptionArray (){
22
+
23
+ $inst = array();
24
+ $response = MPRestClient::get("/sites/MLB/payment_methods/melicard?marketplace=NONE");
25
+ $response = $response['response'];
26
+
27
+ foreach($response['payer_costs'] as $i){
28
+
29
+ $inst[] = array(
30
+ 'value' => $i['installments'],
31
+ 'label'=>Mage::helper('adminhtml')->__($i['installments'] . " Parcela(s)")
32
+ );
33
+ }
34
+
35
+ return $inst;
36
+ }
37
+ }
app/code/community/MercadoPago/Standard/Model/Source/PaymentMethods.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ require_once(Mage::getBaseDir('lib') . '/mercadopago/mercadopago.php');
18
+
19
+ class MercadoPago_Standard_Model_Source_PaymentMethods extends Mage_Payment_Model_Method_Abstract{
20
+
21
+ public function toOptionArray (){
22
+
23
+ $country = strtoupper(Mage::getStoreConfig('payment/mercadopago_configuration/country'));
24
+ $methods = array();
25
+ //adiciona um valor vazio caso n�o queria excluir nada
26
+ $methods[] = array("value" => "", "label" => "");
27
+ $response = MPRestClient::get("/sites/" . $country . "/payment_methods");
28
+ $response = $response['response'];
29
+
30
+ foreach($response as $m){
31
+ if ( $m['id'] != 'account_money' ) {
32
+ $methods[] = array(
33
+ 'value' => $m['id'],
34
+ 'label'=>Mage::helper('adminhtml')->__($m['name'])
35
+ );
36
+ }
37
+ }
38
+
39
+ return $methods;
40
+ }
41
+ }
app/code/community/MercadoPago/Standard/Model/Source/TypeCheckout.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ require_once(Mage::getBaseDir('lib') . '/mercadopago/mercadopago.php');
18
+
19
+ class MercadoPago_Standard_Model_Source_TypeCheckout extends Mage_Payment_Model_Method_Abstract{
20
+
21
+ public function toOptionArray (){
22
+
23
+ $arr = array(
24
+ array("value"=> "iframe", 'label'=>Mage::helper('adminhtml')->__("Iframe")),
25
+ array("value"=> "redirect", 'label'=>Mage::helper('adminhtml')->__("Redirect")),
26
+ array("value"=> "lightbox", 'label'=>Mage::helper('adminhtml')->__("Lightbox"))
27
+ );
28
+
29
+ return $arr;
30
+ }
31
+ }
app/code/community/MercadoPago/Standard/controllers/NotificationController.php ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ class MercadoPago_Standard_NotificationController extends Mage_Core_Controller_Front_Action{
18
+
19
+ protected $_return = null;
20
+ protected $_order = null;
21
+ protected $_order_id = null;
22
+ protected $_mpcartid = null;
23
+ protected $_sendemail = false;
24
+ protected $_hash = null;
25
+
26
+ public function indexAction(){
27
+ $params = $this->getRequest()->getParams();
28
+ if (isset($params['id']) && isset($params['topic']) && $params['topic'] == 'payment'){
29
+ $model = Mage::getModel('mercadopago_standard/checkout');
30
+ $response = $model->getPayment($params['id']);
31
+
32
+ if($response['status'] == 200 || $response['status'] == 201):
33
+ $message = "";
34
+ $status = "";
35
+ $payment = $response['response']['collection'];
36
+
37
+ $order = Mage::getModel('sales/order')->loadByIncrementId($payment["external_reference"]);
38
+
39
+ //update info de status no pagamento
40
+ $payment_order = $order->getPayment();
41
+ $payment_order->setAdditionalInformation('status',$payment['status']);
42
+ $payment_order->setAdditionalInformation('status_detail',$payment['status_detail']);
43
+ $payment_order->setAdditionalInformation('payment_id',$payment['id']);
44
+
45
+ if($payment_order->getAdditionalInformation('cardholderName') == ""):
46
+ $payment_order->setAdditionalInformation('cardholderName', $payment['payer']['first_name'] . " " . $payment['payer']['last_name']);
47
+ endif;
48
+
49
+ if($payment_order->getAdditionalInformation('payment_method') == ""):
50
+ $payment_order->setAdditionalInformation('payment_method', $payment['payment_method_id']);
51
+ endif;
52
+
53
+ if($payment_order->getAdditionalInformation('statement_descriptor') == ""):
54
+ if(isset($payment['statement_descriptor'])):
55
+ $payment_order->setAdditionalInformation('statement_descriptor', $payment['statement_descriptor']);
56
+ endif;
57
+ endif;
58
+
59
+ if($payment_order->getAdditionalInformation('trunc_card') == ""):
60
+ if(isset($payment['last_four_digits'])):
61
+ $payment_order->setAdditionalInformation('trunc_card', "XXXXXXXXXXXX" . $payment['last_four_digits']);
62
+ endif;
63
+
64
+ endif;
65
+
66
+ $payment_order->save();
67
+
68
+ //adiciona informações sobre o comprador na order
69
+ if ($payment['payer']['first_name'])
70
+ $order->setCustomerFirstname($payment['payer']['first_name']);
71
+ if ($payment['payer']['last_name'])
72
+ $order->setCustomerLastname($payment['payer']['last_name']);
73
+ if ($payment['payer']['email'])
74
+ $order->setCustomerEmail($payment['payer']['email']);
75
+
76
+ $order->save();
77
+
78
+ switch ( $payment['status']) {
79
+
80
+ case 'approved':
81
+ //add status na order
82
+ $message = Mage::helper('mercadopago_transparent')->__('Automatic notification of the MercadoPago: The payment was approved.');
83
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_approved');
84
+
85
+ //cria a invoice
86
+ $invoice = $order->prepareInvoice();
87
+ $invoice->register()->pay();
88
+ Mage::getModel('core/resource_transaction')
89
+ ->addObject($invoice)
90
+ ->addObject($invoice->getOrder())
91
+ ->save();
92
+
93
+ $invoice->sendEmail(true, $message);
94
+ break;
95
+ case 'refunded':
96
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_refunded');
97
+ $message = Mage::helper('mercadopago_transparent')->__('Automatic notification of the MercadoPago: The payment was refunded.');
98
+ $order->cancel();
99
+ break;
100
+ case 'pending':
101
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_in_process');
102
+ $message = Mage::helper('mercadopago_transparent')->__('Automatic notification of the MercadoPago: The payment is being processed.');
103
+ break;
104
+ case 'in_process':
105
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_in_process');
106
+ $message = Mage::helper('mercadopago_transparent')->__('Automatic notification of the MercadoPago: The payment is being processed. Will be approved within 2 business days.');
107
+ break;
108
+ case 'in_mediation':
109
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_in_mediation');
110
+ $message = Mage::helper('mercadopago_transparent')->__('Automatic notification of the MercadoPago: The payment is in the process of Dispute, check the graphic account of the MercadoPago for more information.');
111
+ break;
112
+ case 'cancelled':
113
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_cancelled');
114
+ $message = Mage::helper('mercadopago_transparent')->__('Automatic notification of the MercadoPago: The payment was cancelled.');
115
+ $order->cancel();
116
+ break;
117
+ case 'rejected':
118
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_rejected');
119
+ $message = Mage::helper('mercadopago_transparent')->__('Automatic notification of the MercadoPago: The payment was rejected.');
120
+ break;
121
+ default:
122
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_in_process');
123
+ $message = '';
124
+ }
125
+
126
+ //adiciona informações do pagamento
127
+ $message .= Mage::helper('mercadopago_transparent')->__('<br/> Payment id: %s', $payment['id']);
128
+ $message .= Mage::helper('mercadopago_transparent')->__('<br/> Status: %s', $payment['status']);
129
+ $message .= Mage::helper('mercadopago_transparent')->__('<br/> Status Detail: %s', $payment['status_detail']);
130
+
131
+ $order->addStatusToHistory($status,$message, true);
132
+ $order->sendOrderUpdateEmail(true, $message);
133
+
134
+ $order->save();
135
+ echo $message;
136
+ else:
137
+ //caso de algum erro na consulta da ipn
138
+ header(' ', true, 404);
139
+ exit;
140
+ endif;
141
+
142
+ }elseif(isset($params['topic']) && $params['topic'] == 'merchant_order'){
143
+
144
+ $model = Mage::getModel('mercadopago_transparent/transparent');
145
+ $response = $model->getMerchantOrder($params['id']);
146
+
147
+ if($response['status'] == 200 || $response['status'] == 201):
148
+ $message = "";
149
+ $status = "";
150
+ $merchant_order = $response['response'];
151
+ $order = Mage::getModel('sales/order')->loadByIncrementId($merchant_order["external_reference"]);
152
+
153
+ switch ( $merchant_order['status']) {
154
+
155
+ case 'opened':
156
+ $message = 'Payment flow started. The order still dont have payments recorded.';
157
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_in_process');
158
+
159
+ $message .= "<br /> Merchant Order: " . $merchant_order['id'];
160
+ $message .= "<br /> Status: " . $merchant_order['status'];
161
+
162
+ $order->addStatusToHistory($status,$message);
163
+ $order->save();
164
+ echo $message;
165
+ break;
166
+
167
+ /*
168
+ case 'closed':
169
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_refunded');
170
+ $message = 'A payment was created and it was associated to the order.';
171
+ break;
172
+ case 'expired':
173
+ $status = Mage::getStoreConfig('payment/mercadopago_configuration/order_status_in_process');
174
+ $message = 'Order cancelled by the seller.';
175
+ break;
176
+ default:
177
+
178
+ $message = "";
179
+ */
180
+ }
181
+
182
+ else:
183
+ //caso de algum erro na consulta da ipn
184
+ header(' ', true, 404);
185
+ exit;
186
+ endif;
187
+ }
188
+
189
+ }
190
+ }
app/code/community/MercadoPago/Standard/controllers/PayController.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ class MercadoPago_Standard_PayController extends Mage_Core_Controller_Front_Action{
18
+
19
+ // /mercadopago_strandard/pay
20
+ public function indexAction(){
21
+ $init_point = "";
22
+
23
+
24
+ //chama model para fazer o post do pagamento
25
+ $response = Mage::getModel('mercadopago_standard/checkout')->postPago();
26
+
27
+ if($response['status'] == 200 || $response['status'] == 201):
28
+ $payment = $response['response'];
29
+ $init_point = $payment['init_point'];
30
+
31
+ endif;
32
+
33
+ $this->loadLayout();
34
+
35
+ //cria um block e adiciona uma view
36
+ $block = $this->getLayout()->createBlock(
37
+ 'Mage_Core_Block_Template',
38
+ 'mercadopago_standard/pay',
39
+ array('template' => 'mercadopago/standard/pay.phtml')
40
+ );
41
+
42
+ //envia as informações para view
43
+ $block->assign(
44
+ array(
45
+ "init_point" => $init_point,
46
+ "type_checkout" => Mage::getModel('mercadopago_standard/checkout')->getConfigData('type_checkout'),
47
+ "iframe_width" => Mage::getModel('mercadopago_standard/checkout')->getConfigData('iframe_width'),
48
+ "iframe_height" => Mage::getModel('mercadopago_standard/checkout')->getConfigData('iframe_height'),
49
+ "banner_checkout" => Mage::getModel('mercadopago_standard/checkout')->getConfigData('banner_checkout')
50
+ )
51
+ );
52
+
53
+ //insere o block
54
+ $this->getLayout()->getBlock('content')->append($block);
55
+ $this->_initLayoutMessages('core/session');
56
+
57
+ //adiciona uma clean page
58
+ $root = $this->getLayout()->getBlock('root');
59
+ $root->setTemplate("mercadopago/clean_page.phtml");
60
+
61
+ $this->renderLayout();
62
+ }
63
+
64
+ }
app/code/community/MercadoPago/Standard/etc/config.xml ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <!--
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL).
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Payment Gateway
12
+ * @package MercadoPago
13
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
14
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+ -->
18
+ <config>
19
+ <modules>
20
+ <MercadoPago_Standard>
21
+ <version>2.0.0</version>
22
+ </MercadoPago_Standard>
23
+ </modules>
24
+
25
+ <global>
26
+ <models>
27
+ <mercadopago_standard>
28
+ <class>MercadoPago_Standard_Model</class>
29
+ </mercadopago_standard>
30
+ </models>
31
+ <blocks>
32
+ <mercadopago_standard>
33
+ <class>MercadoPago_Standard_Block</class>
34
+ </mercadopago_standard>
35
+ </blocks>
36
+ <helpers>
37
+ <mercadopago_standard>
38
+ <class>MercadoPago_Standard_Helper</class>
39
+ </mercadopago_standard>
40
+ </helpers>
41
+
42
+ <events>
43
+ <admin_system_config_changed_section_payment>
44
+ <observers>
45
+ <observer>
46
+ <class>MercadoPago_Standard_Model_Observer</class>
47
+ <method>checkAndValidData</method>
48
+ </observer>
49
+ </observers>
50
+ </admin_system_config_changed_section_payment>
51
+ </events>
52
+ </global>
53
+
54
+
55
+ <frontend>
56
+ <routers>
57
+ <mercadopago_standard>
58
+ <use>standard</use>
59
+ <args>
60
+ <module>MercadoPago_Standard</module>
61
+ <frontName>mercadopago_standard</frontName>
62
+ </args>
63
+ </mercadopago_standard>
64
+ </routers>
65
+ <translate>
66
+ <modules>
67
+ <mercadopago>
68
+ <files>
69
+ <default>mercadopago.csv</default>
70
+ </files>
71
+ </mercadopago>
72
+ </modules>
73
+ </translate>
74
+ </frontend>
75
+
76
+
77
+ <adminhtml>
78
+ <translate>
79
+ <modules>
80
+ <translations>
81
+ <files>
82
+ <default>mercadopago.csv</default>
83
+ </files>
84
+ </translations>
85
+ </modules>
86
+ </translate>
87
+ </adminhtml>
88
+
89
+
90
+ <default>
91
+ <payment>
92
+
93
+ <mercadopago_configuration>
94
+ <country>mlb</country>
95
+ <order_status_approved>processing</order_status_approved>
96
+ <order_status_refunded>pending</order_status_refunded>
97
+ <order_status_in_process>pending</order_status_in_process>
98
+ <order_status_in_mediation>pending</order_status_in_mediation>
99
+ <order_status_rejected>pending</order_status_rejected>
100
+ <order_status_cancelled>pending</order_status_cancelled>
101
+ </mercadopago_configuration>
102
+
103
+ <mercadopago_standard>
104
+ <active>1</active>
105
+ <model>MercadoPago_Standard_Model_Checkout</model>
106
+ <!-- nome do modulo na exibição para o comprador -->
107
+ <title>MercadoPago</title>
108
+ <allowspecific>0</allowspecific>
109
+ <banner_checkout>http://imgmp.mlstatic.com/org-img/MLB/MP/BANNERS/tipo2_468X60.jpg</banner_checkout>
110
+ <sort_order>-1</sort_order>
111
+ <installments>24</installments>
112
+ <type_checkout>iframe</type_checkout>
113
+ <auto_return>1</auto_return>
114
+ <iframe_width>900</iframe_width>
115
+ <iframe_height>600</iframe_height>
116
+ </mercadopago_standard>
117
+ </payment>
118
+ </default>
119
+
120
+ </config>
app/code/community/MercadoPago/Standard/etc/system.xml ADDED
@@ -0,0 +1,256 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <!--
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL).
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Payment Gateway
12
+ * @package MercadoPago
13
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
14
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+ -->
18
+
19
+ <config>
20
+ <sections>
21
+ <payment translate="label">
22
+ <groups>
23
+
24
+ <mercadopago_configuration>
25
+ <label>MercadoPago - Configuration</label>
26
+ <sort_order>99</sort_order>
27
+ <show_in_default>1</show_in_default>
28
+ <show_in_website>1</show_in_website>
29
+ <show_in_store>0</show_in_store>
30
+ <fields>
31
+
32
+ <client_id translate="label">
33
+ <label>Client Id</label>
34
+ <frontend_type>text</frontend_type>
35
+ <sort_order>3</sort_order>
36
+ <show_in_default>1</show_in_default>
37
+ <show_in_website>1</show_in_website>
38
+ <show_in_store>0</show_in_store>
39
+ </client_id>
40
+
41
+ <client_secret translate="label">
42
+ <label>Client Secret</label>
43
+ <frontend_type>text</frontend_type>
44
+ <sort_order>4</sort_order>
45
+ <show_in_default>1</show_in_default>
46
+ <show_in_website>1</show_in_website>
47
+ <show_in_store>0</show_in_store>
48
+ </client_secret>
49
+
50
+ <country translate="label">
51
+ <label>Country</label>
52
+ <frontend_type>select</frontend_type>
53
+ <source_model>MercadoPago_Standard_Model_Source_Country</source_model>
54
+ <sort_order>6</sort_order>
55
+ <show_in_default>1</show_in_default>
56
+ <show_in_website>1</show_in_website>
57
+ <show_in_store>1</show_in_store>
58
+ </country>
59
+
60
+ <category_id translate="label">
61
+ <label>Category of your store</label>
62
+ <frontend_type>select</frontend_type>
63
+ <source_model>MercadoPago_Standard_Model_Source_CategoryId</source_model>
64
+ <sort_order>7</sort_order>
65
+ <show_in_default>1</show_in_default>
66
+ <show_in_website>1</show_in_website>
67
+ <show_in_store>0</show_in_store>
68
+ </category_id>
69
+
70
+ <order_status_approved translate="label">
71
+ <label>Choose the status of approved orders</label>
72
+ <comment>To manage the status available go to System > Order Statuses</comment>
73
+ <frontend_type>select</frontend_type>
74
+ <source_model>adminhtml/system_config_source_order_status</source_model>
75
+ <sort_order>8</sort_order>
76
+ <show_in_default>1</show_in_default>
77
+ <show_in_website>1</show_in_website>
78
+ <show_in_store>1</show_in_store>
79
+ </order_status_approved>
80
+
81
+ <order_status_refunded translate="label">
82
+ <label>Choose the status of refunded orders</label>
83
+ <comment>To manage the status available go to System > Order Statuses</comment>
84
+ <frontend_type>select</frontend_type>
85
+ <source_model>adminhtml/system_config_source_order_status</source_model>
86
+ <sort_order>9</sort_order>
87
+ <show_in_default>1</show_in_default>
88
+ <show_in_website>1</show_in_website>
89
+ <show_in_store>1</show_in_store>
90
+ </order_status_refunded>
91
+
92
+ <order_status_in_process translate="label">
93
+ <label>Choose the status when payment is pending</label>
94
+ <comment>To manage the status available go to System > Order Statuses</comment>
95
+ <frontend_type>select</frontend_type>
96
+ <source_model>adminhtml/system_config_source_order_status</source_model>
97
+ <sort_order>9</sort_order>
98
+ <show_in_default>1</show_in_default>
99
+ <show_in_website>1</show_in_website>
100
+ <show_in_store>1</show_in_store>
101
+ </order_status_in_process>
102
+
103
+ <order_status_in_mediation translate="label">
104
+ <label>Choose the status when client open a mediation</label>
105
+ <comment>To manage the status available go to System > Order Statuses</comment>
106
+ <frontend_type>select</frontend_type>
107
+ <source_model>adminhtml/system_config_source_order_status</source_model>
108
+ <sort_order>10</sort_order>
109
+ <show_in_default>1</show_in_default>
110
+ <show_in_website>1</show_in_website>
111
+ <show_in_store>1</show_in_store>
112
+ </order_status_in_mediation>
113
+
114
+ <order_status_rejected translate="label">
115
+ <label>Choose the status when payment was reject</label>
116
+ <comment>To manage the status available go to System > Order Statuses</comment>
117
+ <frontend_type>select</frontend_type>
118
+ <source_model>adminhtml/system_config_source_order_status</source_model>
119
+ <sort_order>11</sort_order>
120
+ <show_in_default>1</show_in_default>
121
+ <show_in_website>1</show_in_website>
122
+ <show_in_store>1</show_in_store>
123
+ </order_status_rejected>
124
+
125
+ <order_status_cancelled translate="label">
126
+ <label>Choose the status when payment was canceled</label>
127
+ <comment>To manage the status available go to System > Order Statuses</comment>
128
+ <frontend_type>select</frontend_type>
129
+ <source_model>adminhtml/system_config_source_order_status</source_model>
130
+ <sort_order>12</sort_order>
131
+ <show_in_default>1</show_in_default>
132
+ <show_in_website>1</show_in_website>
133
+ <show_in_store>1</show_in_store>
134
+ </order_status_cancelled>
135
+
136
+ </fields>
137
+ </mercadopago_configuration>
138
+
139
+
140
+ <mercadopago_standard module="mercadopago_standard">
141
+ <label>MercadoPago Standard - Credit Card, Ticket and Account Money</label>
142
+ <sort_order>102</sort_order>
143
+ <show_in_default>1</show_in_default>
144
+ <show_in_website>1</show_in_website>
145
+ <show_in_store>0</show_in_store>
146
+ <fields>
147
+ <active translate="label">
148
+ <label>Enabled</label>
149
+ <frontend_type>select</frontend_type>
150
+ <source_model>adminhtml/system_config_source_yesno</source_model>
151
+ <sort_order>1</sort_order>
152
+ <show_in_default>1</show_in_default>
153
+ <show_in_website>1</show_in_website>
154
+ <show_in_store>0</show_in_store>
155
+ <comment>For the operation of the Checkout Standard is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'</comment>
156
+ </active>
157
+
158
+ <title translate="label">
159
+ <label>Payment Title</label>
160
+ <frontend_type>text</frontend_type>
161
+ <sort_order>2</sort_order>
162
+ <show_in_default>1</show_in_default>
163
+ <show_in_website>1</show_in_website>
164
+ <show_in_store>0</show_in_store>
165
+ </title>
166
+
167
+
168
+ <banner_checkout translate="label">
169
+ <label>Banner Checkout</label>
170
+ <frontend_type>text</frontend_type>
171
+ <sort_order>3</sort_order>
172
+ <show_in_default>1</show_in_default>
173
+ <show_in_website>1</show_in_website>
174
+ <show_in_store>0</show_in_store>
175
+ </banner_checkout>
176
+
177
+ <sort_order translate="label">
178
+ <label>Checkout Position</label>
179
+ <frontend_type>text</frontend_type>
180
+ <sort_order>4</sort_order>
181
+ <show_in_default>1</show_in_default>
182
+ <show_in_website>1</show_in_website>
183
+ <show_in_store>0</show_in_store>
184
+ <frontend_class>validate-number</frontend_class>
185
+ </sort_order>
186
+
187
+ <type_checkout>
188
+ <label>Type Checkout</label>
189
+ <frontend_type>select</frontend_type>
190
+ <source_model>MercadoPago_Standard_Model_Source_TypeCheckout</source_model>
191
+ <sort_order>5</sort_order>
192
+ <show_in_default>1</show_in_default>
193
+ <show_in_website>1</show_in_website>
194
+ <show_in_store>1</show_in_store>
195
+ </type_checkout>
196
+
197
+ <auto_return translate="label">
198
+ <label>Auto Redirect</label>
199
+ <frontend_type>select</frontend_type>
200
+ <source_model>adminhtml/system_config_source_yesno</source_model>
201
+ <sort_order>6</sort_order>
202
+ <show_in_default>1</show_in_default>
203
+ <show_in_website>1</show_in_website>
204
+ <show_in_store>0</show_in_store>
205
+ <comment>Auto-redirect the buyer when finishing the payment.</comment>
206
+ </auto_return>
207
+
208
+ <excluded_payment_methods translate="label">
209
+ <label>Exclude Payment Methods</label>
210
+ <comment>Select payment methods not accepted</comment>
211
+ <frontend_type>multiselect</frontend_type>
212
+ <source_model>MercadoPago_Standard_Model_Source_PaymentMethods</source_model>
213
+ <sort_order>8</sort_order>
214
+ <show_in_default>1</show_in_default>
215
+ <show_in_website>1</show_in_website>
216
+ <show_in_store>1</show_in_store>
217
+ <can_be_empty>1</can_be_empty>
218
+ </excluded_payment_methods>
219
+
220
+ <installments>
221
+ <label>Maximum number of accepted installments</label>
222
+ <frontend_type>select</frontend_type>
223
+ <source_model>MercadoPago_Standard_Model_Source_Installments</source_model>
224
+ <sort_order>9</sort_order>
225
+ <show_in_default>1</show_in_default>
226
+ <show_in_website>1</show_in_website>
227
+ <show_in_store>1</show_in_store>
228
+ </installments>
229
+
230
+
231
+ <iframe_width translate="label">
232
+ <label>Width Checkout Iframe</label>
233
+ <frontend_type>text</frontend_type>
234
+ <sort_order>10</sort_order>
235
+ <show_in_default>1</show_in_default>
236
+ <show_in_website>1</show_in_website>
237
+ <show_in_store>0</show_in_store>
238
+ <frontend_class>validate-number</frontend_class>
239
+ </iframe_width>
240
+
241
+ <iframe_height translate="label">
242
+ <label>Height Checkout Iframe</label>
243
+ <frontend_type>text</frontend_type>
244
+ <sort_order>11</sort_order>
245
+ <show_in_default>1</show_in_default>
246
+ <show_in_website>1</show_in_website>
247
+ <show_in_store>0</show_in_store>
248
+ <frontend_class>validate-number</frontend_class>
249
+ </iframe_height>
250
+
251
+ </fields>
252
+ </mercadopago_standard>
253
+ </groups>
254
+ </payment>
255
+ </sections>
256
+ </config>
app/code/community/MercadoPago/Transparent/.DS_Store ADDED
Binary file
app/code/community/MercadoPago/Transparent/Block/.DS_Store ADDED
Binary file
app/code/community/MercadoPago/Transparent/Block/Form.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+
18
+ class MercadoPago_Transparent_Block_Form extends Mage_Payment_Block_Form_Cc{
19
+
20
+ protected function _construct(){
21
+
22
+ // Route: /checkout/onepage
23
+ // inicia formulario para a escolha de pagamento
24
+ parent::_construct();
25
+
26
+ $this->setTemplate('mercadopago/transparent/form.phtml');
27
+
28
+ }
29
+
30
+ protected function _prepareLayout(){
31
+
32
+ //pega public key para settar no aquivo mercadopago.js
33
+ $model = Mage::getModel('mercadopago_transparent/transparent');
34
+ $public_key = $model->getConfigData('public_key');
35
+
36
+ //init js no header
37
+ $block = Mage::app()->getLayout()->createBlock('core/text', 'js_mercadopago');
38
+ $block->setText(
39
+ sprintf(
40
+ '
41
+ <script type="text/javascript">var PublicKeyMercadoPagoTransparent = "' . $public_key .'"; </script>
42
+ <script type="text/javascript" src="%s"></script>',
43
+ Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS, true) . 'mercadopago/mercadopago.js'
44
+ )
45
+ );
46
+
47
+ $head = Mage::app()->getLayout()->getBlock('after_body_start');
48
+
49
+ if($head){
50
+ $head->append($block);
51
+ }
52
+
53
+ return parent::_prepareLayout();
54
+ }
55
+
56
+ /*
57
+ *
58
+ * Fun��o especifica para mexico
59
+ *
60
+ */
61
+ function getCardsPaymentMethods(){
62
+ $payment_methods = Mage::getModel('mercadopago_transparent/transparent')->getPaymentMethods();
63
+ $payment_methods_types = array("credit_card", "debit_card", "prepaid_card");
64
+ $types = array();
65
+
66
+ //percorre todos os payments methods
67
+ foreach($payment_methods['response'] as $pm){
68
+
69
+ //filtra por tickets
70
+ if(in_array($pm['payment_type_id'], $payment_methods_types)){
71
+ $types[] = $pm;
72
+ }
73
+ }
74
+
75
+ return $types;
76
+ }
77
+ }
78
+
79
+
80
+
81
+
82
+ ?>
app/code/community/MercadoPago/Transparent/Block/Info.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+
18
+ class MercadoPago_Transparent_Block_Info extends Mage_Payment_Block_Info_Cc{
19
+
20
+ protected function _construct(){
21
+
22
+ // Route: /checkout/onepage
23
+ // inicia formulario para a escolha de pagamento
24
+
25
+ parent::_construct();
26
+ $this->setTemplate('mercadopago/transparent/info.phtml');
27
+ $this->setModuleName('Mage_Payment');
28
+ }
29
+
30
+
31
+ public function getOrder() {
32
+
33
+ return $this->getInfo();
34
+
35
+ }
36
+ }
app/code/community/MercadoPago/Transparent/Block/Success.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+
18
+ class MercadoPago_Transparent_Block_Success extends Mage_Core_Block_Template{
19
+
20
+ protected function _construct(){
21
+
22
+ parent::_construct();
23
+ $this->setTemplate('mercadopago/transparent/success.phtml');
24
+
25
+ return $this->toHtml();
26
+ }
27
+
28
+
29
+ public function getOrder() {
30
+
31
+ $orderIncrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
32
+ $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
33
+
34
+ return $order;
35
+ }
36
+ }
app/code/community/MercadoPago/Transparent/Helper/Data.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ ?>
17
+ <?php
18
+
19
+
20
+ class MercadoPago_Transparent_Helper_Data extends Mage_Payment_Helper_Data{
21
+
22
+ }
app/code/community/MercadoPago/Transparent/Model/.DS_Store ADDED
Binary file
app/code/community/MercadoPago/Transparent/Model/Resource/Setup.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * To change this template, choose Tools | Templates
5
+ * and open the template in the editor.
6
+ */
7
+
8
+ class MercadoPago_Transparent_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup {
9
+
10
+ }
11
+
12
+
13
+
14
+ ?>
app/code/community/MercadoPago/Transparent/Model/Source/CategoryId.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ require_once(Mage::getBaseDir('lib') . '/mercadopago/mercadopago.php');
18
+
19
+ class MercadoPago_Transparent_Model_Source_CategoryId extends Mage_Payment_Model_Method_Abstract{
20
+
21
+ public function toOptionArray (){
22
+
23
+ $response = MPRestClient::get("/item_categories");
24
+ $response = $response['response'];
25
+
26
+ $cat = array();
27
+ $count = 0;
28
+ foreach($response as $v):
29
+ //force category others first
30
+ if($v['id'] == "others"):
31
+ $cat[0] = array('value' => $v['id'], 'label'=>Mage::helper('adminhtml')->__($v['description']));
32
+ else:
33
+ $count++;
34
+ $cat[$count] = array('value' => $v['id'], 'label'=>Mage::helper('adminhtml')->__($v['description']));
35
+ endif;
36
+
37
+ endforeach;
38
+
39
+ //force order by key
40
+ ksort($cat);
41
+ return $cat;
42
+
43
+ }
44
+ }
app/code/community/MercadoPago/Transparent/Model/Transparent.php ADDED
@@ -0,0 +1,393 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ require_once(Mage::getBaseDir('lib') . '/mercadopago/mercadopago.php');
18
+
19
+ class MercadoPago_Transparent_Model_Transparent extends Mage_Payment_Model_Method_Abstract{
20
+
21
+ //configura o block do formulario e de informações sobre o pagamento
22
+ protected $_formBlockType = 'mercadopago_transparent/form';
23
+ protected $_infoBlockType = 'mercadopago_transparent/info';
24
+
25
+ protected $_code = 'mercadopago_transparent';
26
+
27
+ protected $_canSaveCc = false;
28
+ protected $_isGateway = true;
29
+ protected $_canAuthorize = true;
30
+ protected $_canCapture = true;
31
+ protected $_canVoid = true;
32
+ protected $_canCancelInvoice = true;
33
+ protected $_isInitializeNeeded = true;
34
+ protected $_canFetchTransactionInfo = true;
35
+ protected $_canCreateBillingAgreement = true;
36
+ protected $_canReviewPayment = true;
37
+
38
+ public function initialize($paymentAction, $stateObject) {
39
+
40
+ //verifica se o pagamento não é boleto, caso seja não tem card_token_id
41
+ if($this->getInfoInstance()->getAdditionalInformation('payment_type_id') != "ticket" && $this->getInfoInstance()->getAdditionalInformation('card_token_id') == ""):
42
+ Mage::throwException(Mage::helper('mercadopago_transparent')->__('Verify the form data or wait until the validation of the payment data'));
43
+ return false;
44
+ endif;
45
+
46
+
47
+ //continua o processo de pagamento
48
+ $response = $this->postPago();
49
+
50
+ if($response !== false):
51
+
52
+ $payment = $response['response'];
53
+
54
+ //set order_id
55
+ $order = Mage::getModel('sales/order')->loadByIncrementId($payment['external_reference']);
56
+
57
+ //set status
58
+ $this->getInfoInstance()->setAdditionalInformation('status', $payment['status']);
59
+ $this->getInfoInstance()->setAdditionalInformation('status_detail', $payment['status_detail']);
60
+
61
+ return true;
62
+ endif;
63
+
64
+ return false;
65
+ }
66
+
67
+ public function assignData($data){
68
+
69
+ // route /checkout/onepage/savePayment
70
+ if(!($data instanceof Varien_Object)){
71
+ $data = new Varien_Object($data);
72
+ }
73
+
74
+ //get array info
75
+ $info_form = $data->getData();
76
+
77
+ $info = $this->getInfoInstance();
78
+ $info->setAdditionalInformation('payment_type_id', "credit_card");
79
+ $info->setAdditionalInformation('card_token_id', $info_form['card_token_id']);
80
+ $info->setAdditionalInformation('payment_method', $info_form['payment_method']);
81
+ $info->setAdditionalInformation('installments', $info_form['installments']);
82
+ $info->setAdditionalInformation('doc_number', $info_form['doc_number']);
83
+
84
+ //caso tenha banco, adiciona nas informações adicionais
85
+ if(isset($info_form['issuers'])){
86
+ $info->setAdditionalInformation('issuers', $info_form['issuers']);
87
+ }
88
+
89
+ if($info_form['card_token_id'] != ""):
90
+ $info->setAdditionalInformation('expiration_date', $info_form['cardExpirationMonth'] . "/" . $info_form['cardExpirationYear']);
91
+ $info->setAdditionalInformation('cardholderName', $info_form['cardholderName']);
92
+ $info->setAdditionalInformation('trunc_card', $info_form['trunc_card']);
93
+ endif;
94
+
95
+
96
+ //caso seja não tenha card_token_id
97
+ if($info_form['card_token_id'] == ""):
98
+ Mage::throwException(Mage::helper('mercadopago_transparent')->__('Verify the form data or wait until the validation of the payment data'));
99
+ return false;
100
+ endif;
101
+
102
+
103
+ return $this;
104
+ }
105
+
106
+ /**
107
+ * @return Mage_Checkout_Model_Session
108
+ */
109
+ protected function _getCheckout() {
110
+ return Mage::getSingleton('checkout/session');
111
+ }
112
+
113
+ /**
114
+ * Get admin checkout session namespace
115
+ *
116
+ * @return Mage_Adminhtml_Model_Session_Quote
117
+ */
118
+ protected function _getAdminCheckout() {
119
+ return Mage::getSingleton('adminhtml/session_quote');
120
+ }
121
+
122
+ /**
123
+ * Retrieves Quote
124
+ *
125
+ * @param integer $quoteId
126
+ * @return Mage_Sales_Model_Quote
127
+ */
128
+ protected function _getQuote($quoteId = null) {
129
+ if (!empty($quoteId)) {
130
+ return Mage::getModel('sales/quote')->load($quoteId);
131
+ }
132
+ else {
133
+ if(Mage::app()->getStore()->isAdmin()) {
134
+ return $this->_getAdminCheckout()->getQuote();
135
+ } else {
136
+ return $this->_getCheckout()->getQuote();
137
+ }
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Retrieves Order
143
+ *
144
+ * @param integer $incrementId
145
+ * @return Mage_Sales_Model_Order
146
+ */
147
+ protected function _getOrder($incrementId) {
148
+ return Mage::getModel('sales/order')->loadByIncrementId($incrementId);
149
+ }
150
+
151
+
152
+
153
+ public function getDiscount(){
154
+ $discount = 0;
155
+ $totals = Mage::getSingleton('checkout/session')->getQuote()->getTotals();
156
+
157
+ if(isset($totals['discount']) && $totals['discount']->getValue()) {
158
+ $discount = $totals['discount']->getValue();
159
+ }
160
+
161
+ return $discount;
162
+ }
163
+
164
+ public function postPago(){
165
+
166
+ //seta sdk php mercadopago
167
+ $client_id = Mage::getStoreConfig('payment/mercadopago_configuration/client_id');
168
+ $client_secret = Mage::getStoreConfig('payment/mercadopago_configuration/client_secret');
169
+
170
+ $mp = new MP($client_id, $client_secret);
171
+
172
+ //monta a preferencia
173
+ $pref = $this->makePreference();
174
+
175
+ //faz o post do pagamento
176
+ $response = $mp->create_custon_payment($pref);
177
+
178
+ if($response['status'] == 200 || $response['status'] == 201):
179
+ return $response;
180
+ else:
181
+ $e = "";
182
+ foreach($response['response']['cause'] as $error):
183
+ switch ($error['code']) {
184
+ case "106":
185
+ $e .= Mage::helper('mercadopago_transparent')->__('You can not make payments to users in other countries.');
186
+ break;
187
+
188
+ case "109":
189
+ $e .= Mage::helper('mercadopago_transparent')->__('Payment Method selected does not process payments in installments selected. Choose another card or another payment method.');
190
+ break;
191
+
192
+ case "126":
193
+ $e .= Mage::helper('mercadopago_transparent')->__('We could not process your payment. Error code: 126.');
194
+ break;
195
+
196
+ case "129":
197
+ $e .= Mage::helper('mercadopago_transparent')->__('Payment Method selected does not process payments for the selected amount. Choose another card or another payment method.');
198
+ break;
199
+
200
+ case "145":
201
+ $e .= Mage::helper('mercadopago_transparent')->__('We could not process your payment. Error code: 145.');
202
+ break;
203
+
204
+ case "150":
205
+ $e .= Mage::helper('mercadopago_transparent')->__('You can not make payments. Error code: 150.');
206
+ break;
207
+
208
+ case "151":
209
+ $e .= Mage::helper('mercadopago_transparent')->__('You can not make payments.');
210
+ break;
211
+
212
+ case "160":
213
+ $e .= Mage::helper('mercadopago_transparent')->__('We could not process your payment. Error code: 160.');
214
+ break;
215
+
216
+ case "204":
217
+ $e .= Mage::helper('mercadopago_transparent')->__('Payment Method selected is not available at this time. Choose another card or another payment method.');
218
+ break;
219
+
220
+ case "801":
221
+ $e .= Mage::helper('mercadopago_transparent')->__('You made a similar payment moments ago. Try again in a few minutes.');
222
+ break;
223
+
224
+ default:
225
+ $e .= Mage::helper('mercadopago_transparent')->__("We could not process your payment. %s", $this->htmlEscape(json_encode($error)));
226
+ break;
227
+ }
228
+
229
+ endforeach;
230
+
231
+ Mage::throwException($e);
232
+ return false;
233
+ endif;
234
+
235
+ }
236
+
237
+ function makePreference(){
238
+
239
+ $quote = $this->_getQuote();
240
+ $orderId = $quote->getReservedOrderId();
241
+ $order = $this->_getOrder($orderId);
242
+
243
+
244
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
245
+ $model = Mage::getModel('catalog/product');
246
+
247
+
248
+ //pega payment dentro da order para pegar as informacoes adicionadas pela funcao assignData()
249
+ $payment = $order->getPayment();
250
+
251
+ //pega valor total da compra
252
+ $item_price = $order->getBaseGrandTotal();
253
+ if (!$item_price) {
254
+ $item_price = $order->getBasePrice() + $order->getBaseShippingAmount();
255
+ }
256
+
257
+ //pega o valor total da compra somando o frete
258
+ $item_price = number_format($item_price, 2, '.', '');
259
+
260
+ //setta informaçnoes
261
+ $arr = array();
262
+ $arr['external_reference'] = $orderId;
263
+ $arr['amount'] = (float) $item_price;
264
+ $arr['reason'] = Mage::helper('mercadopago_transparent')->__("Order # %s in store %s", $orderId, Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true));
265
+ //não é necessario settar currency_id, pois ja identifica no backend
266
+ //$arr['currency_id'] = "BRL";
267
+ $arr['installments'] = (int) $payment->getAdditionalInformation("installments");
268
+ $arr['payment_method_id'] = $payment->getAdditionalInformation("payment_method");
269
+ $arr['payer_email'] = htmlentities($customer->getEmail());
270
+
271
+ if($payment->getAdditionalInformation("card_token_id") != ""){
272
+ $arr['card_token_id'] = $payment->getAdditionalInformation("card_token_id");
273
+ }
274
+
275
+ if($payment->getAdditionalInformation("issuers") != ""){
276
+ $arr['card_issuer_id'] = (int) $payment->getAdditionalInformation("issuers");
277
+ }
278
+
279
+
280
+ //monta array de produtos
281
+ $arr['items'] = array();
282
+ foreach ($order->getAllVisibleItems() as $item) {
283
+
284
+ $prod = $model->loadByAttribute('sku', $item->getSku());
285
+
286
+ //get image
287
+ try{
288
+ $imagem = $prod->getImageUrl();
289
+ }catch(Exception $e){
290
+ $imagem = "";
291
+ }
292
+
293
+ $arr['items'][] = array(
294
+ "id" => $item->getSku(),
295
+ "title" => $item->getName(),
296
+ "description" => $item->getName(),
297
+ "picture_url" => $imagem,
298
+ "category_id" => Mage::getStoreConfig('payment/mercadopago_configuration/category_id'),
299
+ "quantity" => (int) number_format($item->getQtyOrdered(), 0, '.', ''),
300
+ "unit_price" => (float) number_format($prod->getPrice(), 2, '.', '')
301
+ );
302
+
303
+ }
304
+
305
+
306
+ //verifica se existe desconto, caso exista adiciona como um item
307
+ $discount = $this->getDiscount();
308
+ if($discount != 0){
309
+ $arr['items'][] = array(
310
+ "title" => "Discount by the Store",
311
+ "description" => "Discount by the Store",
312
+ "quantity" => (int) 1,
313
+ "unit_price" => (float) number_format($discount, 2, '.', '')
314
+ );
315
+ }
316
+
317
+ //pega dados de envio
318
+ if(method_exists($order->getShippingAddress(), "getData")){
319
+ $shipping = $order->getShippingAddress()->getData();
320
+ $arr['shipments']['receiver_address'] = array(
321
+ "floor" => "-",
322
+ "zip_code" => $shipping['postcode'],
323
+ "street_name" => $shipping['street'] . " - " . $shipping['city'] . " - " . $shipping['country_id'],
324
+ "apartment" => "-",
325
+ "street_number" => "0"
326
+ );
327
+ $arr['customer']['phone'] = array(
328
+ "area_code" => "-",
329
+ "number" => $shipping['telephone']
330
+ );
331
+ }
332
+
333
+ //formata a data do usuario para o padrao do mercado pago YYYY-MM-DDTHH:MM:SS
334
+ $date_creation_user = date('Y-m-d',$customer->getCreatedAtTimestamp()) . "T" . date('H:i:s',$customer->getCreatedAtTimestamp());
335
+
336
+ //$quote = Mage::getSingleton('checkout/session')->getQuote();
337
+ $billing_address = $quote->getBillingAddress();
338
+ $billing_address = $billing_address->getData();
339
+
340
+ //set informaçoes do usuario
341
+ $arr['customer']['registration_date'] = $date_creation_user;
342
+ $arr['customer']['email'] = htmlentities($customer->getEmail());
343
+ $arr['customer']['first_name'] = htmlentities($customer->getFirstname());
344
+ $arr['customer']['last_name'] = htmlentities($customer->getLastname());
345
+
346
+ //set o documento do usuario
347
+ if($payment['additional_information']['doc_number'] != ""){
348
+ $arr['customer']['identification'] = array(
349
+ "type" => "CPF",
350
+ "number" => $payment->getAdditionalInformation("doc_number")
351
+ );
352
+ }
353
+
354
+ //set endereco do usuario
355
+ $arr['customer']['address'] = array(
356
+ "zip_code" => $billing_address['postcode'],
357
+ "street_name" => $billing_address['street'] . " - " . $billing_address['city'] . " - " . $billing_address['country_id'],
358
+ "street_number" => "0"
359
+ );
360
+
361
+ //define a url de notificacao
362
+ $arr['notification_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true) . "mercadopago_standard/notification";
363
+
364
+ //pega o email e o nome do usuario guest
365
+ if($arr['payer_email'] == "" && $arr['customer']['email'] == ""){
366
+ $arr['payer_email'] = $order['customer_email'];
367
+ $arr['customer']['email'] = $order['customer_email'];
368
+ $arr['customer']['first_name'] = $order->getBillingAddress()->getFirstname();
369
+ $arr['customer']['last_name'] = $order->getBillingAddress()->getLastname();
370
+ }
371
+
372
+ //adiciona a sponsor_id para as vendas serem identificadas
373
+ //$arr['sponsor_id'] = "";
374
+
375
+ return $arr;
376
+
377
+ }
378
+
379
+ public function getPaymentMethods(){
380
+
381
+ $this->client_id = Mage::getStoreConfig('payment/mercadopago_configuration/client_id');
382
+ $this->client_secret = Mage::getStoreConfig('payment/mercadopago_configuration/client_secret');
383
+
384
+ $mp = new MP ($this->client_id, $this->client_secret);
385
+ $access_token = $mp->get_access_token();
386
+
387
+ $payment_methods = MPRestClient::get("/checkout/custom/payment_methods?access_token=" . $access_token);
388
+
389
+ return $payment_methods;
390
+ }
391
+ }
392
+
393
+ ?>
app/code/community/MercadoPago/Transparent/controllers/NotificacaoController.php ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ class MercadoPago_Transparent_NotificacaoController extends Mage_Core_Controller_Front_Action{
18
+
19
+ protected $_return = null;
20
+ protected $_order = null;
21
+ protected $_order_id = null;
22
+ protected $_mpcartid = null;
23
+ protected $_sendemail = false;
24
+ protected $_hash = null;
25
+
26
+ public function indexAction(){
27
+ $params = $this->getRequest()->getParams();
28
+ if (isset($params['id']) && isset($params['topic']) && $params['topic'] == 'payment'){
29
+ $model = Mage::getModel('mercadopago_transparent/transparent');
30
+ $response = $model->getPayment($params['id']);
31
+
32
+ if($response['status'] == 200 || $response['status'] == 201):
33
+ $message = "";
34
+ $status = "";
35
+ $payment = $response['response']['collection'];
36
+
37
+ $order = Mage::getModel('sales/order')->loadByIncrementId($payment["external_reference"]);
38
+
39
+ //update info de status no pagamento
40
+ $payment_order = $order->getPayment();
41
+ $payment_order->setAdditionalInformation('status',$payment['status']);
42
+ $payment_order->setAdditionalInformation('status_detail',$payment['status_detail']);
43
+ $payment_order->setAdditionalInformation('payment_id',$payment['id']);
44
+
45
+ if($payment_order->getAdditionalInformation('cardholderName') == ""):
46
+ $payment_order->setAdditionalInformation('cardholderName', $payment['payer']['first_name'] . " " . $payment['payer']['last_name']);
47
+ endif;
48
+
49
+ if($payment_order->getAdditionalInformation('payment_method') == ""):
50
+ $payment_order->setAdditionalInformation('payment_method', $payment['payment_method_id']);
51
+ endif;
52
+
53
+ if($payment_order->getAdditionalInformation('statement_descriptor') == ""):
54
+ if(isset($payment['statement_descriptor'])):
55
+ $payment_order->setAdditionalInformation('statement_descriptor', $payment['statement_descriptor']);
56
+ endif;
57
+ endif;
58
+
59
+ if($payment_order->getAdditionalInformation('trunc_card') == ""):
60
+ if(isset($payment['last_four_digits'])):
61
+ $payment_order->setAdditionalInformation('trunc_card', "XXXXXXXXXXXX" . $payment['last_four_digits']);
62
+ endif;
63
+
64
+ endif;
65
+
66
+ $payment_order->save();
67
+
68
+ //adiciona informações sobre o comprador na order
69
+ if ($payment['payer']['first_name'])
70
+ $order->setCustomerFirstname($payment['payer']['first_name']);
71
+ if ($payment['payer']['last_name'])
72
+ $order->setCustomerLastname($payment['payer']['last_name']);
73
+ if ($payment['payer']['email'])
74
+ $order->setCustomerEmail($payment['payer']['email']);
75
+
76
+ $order->save();
77
+
78
+ switch ( $payment['status']) {
79
+
80
+ case 'approved':
81
+ //add status na order
82
+ $message = 'Notificação automática do MercadoPago: O pagamento foi aprovado.';
83
+ $status = $model->getConfigData('order_status_approved');
84
+
85
+ //cria a invoice
86
+ $invoice = $order->prepareInvoice();
87
+ $invoice->register()->pay();
88
+ Mage::getModel('core/resource_transaction')
89
+ ->addObject($invoice)
90
+ ->addObject($invoice->getOrder())
91
+ ->save();
92
+
93
+ $invoice->sendEmail(true, $message);
94
+ break;
95
+ case 'refunded':
96
+ $status = $model->getConfigData('order_status_refunded');
97
+ $message = 'Notificação automática do MercadoPago: O pagamento foi devolvido.';
98
+ $order->cancel();
99
+ break;
100
+ case 'pending':
101
+ $status = $model->getConfigData('order_status_in_process');
102
+ $message = 'Notificação automática do MercadoPago: O pagamento está sendo processado.';
103
+ break;
104
+ case 'in_process':
105
+ $status = $model->getConfigData('order_status_in_process');
106
+ $message = 'Notificação automática do MercadoPago: O pagamento está sendo processado. Em até 2 dias úteis o pagamento será analisado.';
107
+ break;
108
+ case 'in_mediation':
109
+ $status = $model->getConfigData('order_status_in_mediation');
110
+ $message = 'Notificação automática do MercadoPago: O pagamento está em processo de Disputa, verifique a conta gráfica do MercadoPago para maiores informações.';
111
+ break;
112
+ case 'cancelled':
113
+ $status = $model->getConfigData('order_status_cancelled');
114
+ $message = 'Notificação automática do MercadoPago: O pagamento foi cancelado.';
115
+ $order->cancel();
116
+ break;
117
+ case 'rejected':
118
+ $status = $model->getConfigData('order_status_rejected');
119
+ $message = 'Notificação automática do MercadoPago: O pagamento foi rejeitado.';
120
+ break;
121
+ default:
122
+ $status = $model->getConfigData('order_status_in_process');
123
+ $message = "";
124
+ }
125
+
126
+ //adiciona informações do pagamento
127
+ $message .= "<br /> Operation id: " . $payment['id'];
128
+ $message .= "<br /> Status: " . $payment['status'];
129
+ $message .= "<br /> Status Detail: " . $payment['status_detail'];
130
+
131
+ $order->addStatusToHistory($status,$message, true);
132
+ $order->sendOrderUpdateEmail(true, $message);
133
+
134
+ $order->save();
135
+ echo $message;
136
+ else:
137
+ //caso de algum erro na consulta da ipn
138
+ header(' ', true, 404);
139
+ exit;
140
+ endif;
141
+
142
+ }elseif(isset($params['topic']) && $params['topic'] == 'merchant_order'){
143
+
144
+ $model = Mage::getModel('mercadopago_transparent/transparent');
145
+ $response = $model->getMerchantOrder($params['id']);
146
+
147
+ if($response['status'] == 200 || $response['status'] == 201):
148
+ $message = "";
149
+ $status = "";
150
+ $merchant_order = $response['response'];
151
+ $order = Mage::getModel('sales/order')->loadByIncrementId($merchant_order["external_reference"]);
152
+
153
+ switch ( $merchant_order['status']) {
154
+
155
+ case 'opened':
156
+ $message = 'Payment flow started. The order still dont have payments recorded.';
157
+ $status = $model->getConfigData('order_status_in_process');
158
+
159
+ $message .= "<br /> Merchant Order: " . $merchant_order['id'];
160
+ $message .= "<br /> Status: " . $merchant_order['status'];
161
+
162
+ $order->addStatusToHistory($status,$message);
163
+ $order->save();
164
+ echo $message;
165
+ break;
166
+
167
+ /*
168
+ case 'closed':
169
+ $status = $model->getConfigData('order_status_refunded');
170
+ $message = 'A payment was created and it was associated to the order.';
171
+ break;
172
+ case 'expired':
173
+ $status = $model->getConfigData('order_status_in_process');
174
+ $message = 'Order cancelled by the seller.';
175
+ break;
176
+ default:
177
+
178
+ $message = "";
179
+ */
180
+ }
181
+
182
+ else:
183
+ //caso de algum erro na consulta da ipn
184
+ header(' ', true, 404);
185
+ exit;
186
+ endif;
187
+ }
188
+
189
+ }
190
+ }
app/code/community/MercadoPago/Transparent/controllers/PayController.php ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ class MercadoPago_Transparent_PayController extends Mage_Core_Controller_Front_Action{
18
+
19
+ // /mercadopago_transparent/pay
20
+ public function indexAction(){
21
+ $msg = "";
22
+ $status = false;
23
+ $payment = false;
24
+ $order = false;
25
+ $payment_method_id = false;
26
+
27
+
28
+ //chama model para fazer o post do pagamento
29
+ $response = Mage::getModel('mercadopago_transparent/transparent')->postPago();
30
+
31
+ if($response['status'] == 200 || $response['status'] == 201):
32
+
33
+ $payment = $response['response'];
34
+
35
+ //set order_id
36
+ $order = Mage::getModel('sales/order')->loadByIncrementId($payment['external_reference']);
37
+
38
+ //set status
39
+ $status = $payment['status'];
40
+ $payment_method_id = $payment['payment_method_id'];
41
+
42
+ switch ($payment['status']){
43
+ case "approved":
44
+ $msg = "";
45
+ break;
46
+ case "in_process":
47
+ $msg = "Em menos de 2 dias úteis você será avisado por e-mail se foi creditado ou se precisarmos de mais informações.";
48
+ break;
49
+ case "pending":
50
+ $msg = "Em menos de 1 hora, nós enviaremos o resultado por e-mail.";
51
+ break;
52
+ case "rejected":
53
+
54
+ switch ($payment['status_detail']){
55
+ case "cc_rejected_bad_filled_card_number":
56
+ $msg = "Verifique o número do cartão.";
57
+ break;
58
+ case "cc_rejected_bad_filled_date":
59
+ $msg = "Verifique a data de validade.";
60
+ break;
61
+ case "cc_rejected_bad_filled_other":
62
+ $msg = "Verifique os dados.";
63
+ break;
64
+ case "cc_rejected_bad_filled_security_code":
65
+ $msg = "Verifique o código de segurança.";
66
+ break;
67
+ case "cc_rejected_blacklist":
68
+ $msg = "Não foi possível processar o pagamento.";
69
+ break;
70
+ case "cc_rejected_call_for_authorize":
71
+ $msg = "Você precisa autorizar com a " . strtoupper($payment['payment_method_id']) . " o pagamento de R$" . strtoupper($payment['amount']) . " ao MercadoPago";
72
+ break;
73
+ case "cc_rejected_card_disabled":
74
+ $msg = "Ligue para " . strtoupper($payment['payment_method_id']) . " e ative o seu cartão. <br/>
75
+ O telefone está no verso do seu cartão de crédito.";
76
+ break;
77
+ case "cc_rejected_card_error":
78
+ $msg = "Não foi possível processar o pagamento.";
79
+ break;
80
+ case "cc_rejected_duplicated_payment":
81
+ $msg = "Você já fez o pagamento deste valor. <br/>
82
+ Se você precisa pagar novamente use outro cartão ou outro meio de pagamento.";
83
+ break;
84
+ case "cc_rejected_high_risk":
85
+ $msg = "O seu pagamento foi recusado. <br/>
86
+ Recomendamos que você pague com outro dos meios de pagamento oferecidos, preferencialmente à vista.";
87
+ break;
88
+ case "cc_rejected_insufficient_amount":
89
+ $msg = "O seu " . strtoupper($payment['payment_method_id']) . " não tem limite suficiente.";
90
+ break;
91
+ case "cc_rejected_invalid_installments":
92
+ echo strtoupper($payment['payment_method_id']) . " não processa pagamentos em " . $payment['installments']. " parcelas.";
93
+ break;
94
+ case "cc_rejected_max_attempts":
95
+ $msg = "Você atingiu o limite de tentativas permitidas. <br/>
96
+ Use outro cartão ou outro meio de pagamento.";
97
+ break;
98
+ case "cc_rejected_other_reason":
99
+ echo strtoupper($payment['payment_method_id']) . " não processou o pagamento.";
100
+ break;
101
+ }
102
+
103
+ break;
104
+ }
105
+ else:
106
+ $e = "";
107
+ foreach($response['response']['cause'] as $error):
108
+
109
+ switch ($error) {
110
+ case "106":
111
+ $e .= "Você não pode fazer pagamentos para usuários em outros países. <br/>";
112
+ break;
113
+
114
+ case "109":
115
+ $e .= "O meio de pagamento selecionado não processa pagamentos as parcelas selecionadas.
116
+ Use outro cartão ou outro meio de pagamento. <br/>";
117
+ break;
118
+
119
+ case "126":
120
+ $e .= "Não foi possível processar o pagamento. Erro de numero: 126.<br/>";
121
+ break;
122
+
123
+ case "129":
124
+ $e .= "O meio de pagamento selecionado não processa pagamentos do valor selecionado.
125
+ Use outro cartão ou outro meio de pagamento.. <br/>";
126
+ break;
127
+
128
+ case "145":
129
+ $e .= "Não foi possível processar o pagamento. Erro de numero: 145. <br/>";
130
+ break;
131
+
132
+ case "150":
133
+ $e .= "Você não pode fazer pagamentos. <br/>";
134
+ break;
135
+
136
+ case "151":
137
+ $e .= "Você não pode fazer pagamentos com esse meio de pagamento. <br/>";
138
+ break;
139
+
140
+ case "160":
141
+ $e .= "Não foi possível processar o pagamento. Erro de numero: 160. <br/>";
142
+ break;
143
+
144
+ case "204":
145
+ $e .= "O meio de pagamento selecionado não está disponível neste momento.
146
+ Use outro cartão ou outro meio de pagamento. <br/>";
147
+ break;
148
+
149
+ case "801":
150
+ $e .= "Você realizou um pagamento similar há pouco tempo.
151
+ Tente novamente em alguns minutos. <br/>";
152
+ break;
153
+
154
+ default:
155
+ $e .= "Não foi possível processar o pagamento. <br/>" . json_encode($response['response']). "<br/>";
156
+ break;
157
+ }
158
+ endforeach;
159
+
160
+ Mage::getSingleton('core/session')->addError('Ocorreu um erro: <br/>' . $e);
161
+ endif;
162
+
163
+ $this->loadLayout();
164
+
165
+ //cria um block e adiciona uma view
166
+ $block = $this->getLayout()->createBlock(
167
+ 'Mage_Core_Block_Template',
168
+ 'mercadopago_transparent/sucesso',
169
+ array('template' => 'mercadopago/transparent/sucesso.phtml')
170
+ );
171
+
172
+ //envia as informações para view
173
+ $block->assign(
174
+ array(
175
+ "mensagem"=> $msg,
176
+ "status" => $status,
177
+ "order" => $order,
178
+ "payment_method_id" => $payment_method_id,
179
+ "payment" => $payment
180
+ )
181
+ );
182
+
183
+ //insere o block
184
+ $this->getLayout()->getBlock('content')->append($block);
185
+ $this->_initLayoutMessages('core/session');
186
+
187
+ //adiciona uma clean page
188
+ $root = $this->getLayout()->getBlock('root');
189
+ $root->setTemplate("mercadopago/clean_page.phtml");
190
+
191
+ $this->renderLayout();
192
+ }
193
+
194
+ }
app/code/community/MercadoPago/Transparent/etc/config.xml ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <!--
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL).
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Payment Gateway
12
+ * @package MercadoPago
13
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
14
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+ -->
18
+ <config>
19
+ <modules>
20
+ <MercadoPago_Transparent>
21
+ <version>2.0.0</version>
22
+ </MercadoPago_Transparent>
23
+ </modules>
24
+
25
+ <global>
26
+ <models>
27
+ <mercadopago_transparent>
28
+ <class>MercadoPago_Transparent_Model</class>
29
+ </mercadopago_transparent>
30
+ </models>
31
+ <blocks>
32
+ <mercadopago_transparent>
33
+ <class>MercadoPago_Transparent_Block</class>
34
+ </mercadopago_transparent>
35
+ </blocks>
36
+ <helpers>
37
+ <mercadopago_transparent>
38
+ <class>MercadoPago_Transparent_Helper</class>
39
+ </mercadopago_transparent>
40
+ </helpers>
41
+
42
+ </global>
43
+
44
+
45
+ <frontend>
46
+ <routers>
47
+ <mercadopago_transparent>
48
+ <use>standard</use>
49
+ <args>
50
+ <module>MercadoPago_Transparent</module>
51
+ <frontName>mercadopago_transparent</frontName>
52
+ </args>
53
+ </mercadopago_transparent>
54
+ </routers>
55
+
56
+ <layout>
57
+ <updates>
58
+ <mpexpress>
59
+ <file>mercadopago.xml</file>
60
+ </mpexpress>
61
+ </updates>
62
+ </layout>
63
+
64
+ <translate>
65
+ <modules>
66
+ <mercadopago>
67
+ <files>
68
+ <default>mercadopago.csv</default>
69
+ </files>
70
+ </mercadopago>
71
+ </modules>
72
+ </translate>
73
+ </frontend>
74
+
75
+
76
+ <adminhtml>
77
+ <translate>
78
+ <modules>
79
+ <translations>
80
+ <files>
81
+ <default>mercadopago.csv</default>
82
+ </files>
83
+ </translations>
84
+ </modules>
85
+ </translate>
86
+ </adminhtml>
87
+
88
+ <default>
89
+ <payment translate="label">
90
+ <mercadopago_transparent>
91
+ <active>1</active>
92
+ <model>MercadoPago_Transparent_Model_Transparent</model>
93
+ <!-- nome do modulo na exibição para o comprador -->
94
+ <title translate="label">Credit Card - MercadoPago</title>
95
+ <allowspecific>0</allowspecific>
96
+ <banner_checkout>http://imgmp.mlstatic.com/org-img/MLB/MP/BANNERS/tipo2_468X60.jpg</banner_checkout>
97
+ <sort_order>-2</sort_order>
98
+ <payment_action>authorize</payment_action>
99
+ </mercadopago_transparent>
100
+ </payment>
101
+ </default>
102
+
103
+ </config>
app/code/community/MercadoPago/Transparent/etc/system.xml ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <!--
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL).
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Payment Gateway
12
+ * @package MercadoPago
13
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
14
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+ -->
18
+
19
+ <config>
20
+ <sections>
21
+ <payment translate="label">
22
+ <groups>
23
+ <mercadopago_transparent translate="label" module="mercadopago_transparent">
24
+ <label>MercadoPago Transparent - Credit Card</label>
25
+ <sort_order>100</sort_order>
26
+ <show_in_default>1</show_in_default>
27
+ <show_in_website>1</show_in_website>
28
+ <show_in_store>0</show_in_store>
29
+ <fields>
30
+ <active translate="label">
31
+ <label>Enabled</label>
32
+ <frontend_type>select</frontend_type>
33
+ <source_model>adminhtml/system_config_source_yesno</source_model>
34
+ <sort_order>1</sort_order>
35
+ <show_in_default>1</show_in_default>
36
+ <show_in_website>1</show_in_website>
37
+ <show_in_store>0</show_in_store>
38
+ </active>
39
+ <title translate="label">
40
+ <label>Payment Title</label>
41
+ <frontend_type>text</frontend_type>
42
+ <sort_order>2</sort_order>
43
+ <show_in_default>1</show_in_default>
44
+ <show_in_website>1</show_in_website>
45
+ <show_in_store>0</show_in_store>
46
+ </title>
47
+
48
+ <public_key translate="label">
49
+ <label>Public Key</label>
50
+ <frontend_type>text</frontend_type>
51
+ <sort_order>5</sort_order>
52
+ <show_in_default>1</show_in_default>
53
+ <show_in_website>1</show_in_website>
54
+ <show_in_store>0</show_in_store>
55
+ </public_key>
56
+
57
+
58
+ <banner_checkout translate="label">
59
+ <label>Banner Checkout</label>
60
+ <frontend_type>text</frontend_type>
61
+ <sort_order>13</sort_order>
62
+ <show_in_default>1</show_in_default>
63
+ <show_in_website>1</show_in_website>
64
+ <show_in_store>0</show_in_store>
65
+ </banner_checkout>
66
+
67
+ <sort_order translate="label">
68
+ <label>Checkout Position</label>
69
+ <frontend_type>text</frontend_type>
70
+ <sort_order>14</sort_order>
71
+ <show_in_default>1</show_in_default>
72
+ <show_in_website>1</show_in_website>
73
+ <show_in_store>0</show_in_store>
74
+ <frontend_class>validate-number</frontend_class>
75
+ </sort_order>
76
+ </fields>
77
+ </mercadopago_transparent>
78
+ </groups>
79
+ </payment>
80
+ </sections>
81
+ </config>
app/code/community/MercadoPago/TransparentTicket/Block/Form.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+
18
+ class MercadoPago_TransparentTicket_Block_Form extends Mage_Payment_Block_Form_Cc{
19
+
20
+ protected function _construct(){
21
+
22
+ // Route: /checkout/onepage
23
+ // inicia formulario para a escolha de pagamento
24
+ parent::_construct();
25
+
26
+ $this->setTemplate('mercadopago/transparent_ticket/form.phtml');
27
+
28
+ }
29
+
30
+ function getTicketsOptions(){
31
+ $payment_methods = Mage::getModel('mercadopago_transparentticket/transparent')->getPaymentMethods();
32
+ $tickets = array();
33
+
34
+ //percorre todos os payments methods
35
+ foreach($payment_methods['response'] as $pm){
36
+
37
+ //filtra por tickets
38
+ if($pm['payment_type_id'] == "ticket"){
39
+ $tickets[] = $pm;
40
+ }
41
+ }
42
+
43
+ return $tickets;
44
+ }
45
+ }
46
+
47
+
48
+
49
+
50
+ ?>
app/code/community/MercadoPago/TransparentTicket/Block/Info.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+
18
+ class MercadoPago_TransparentTicket_Block_Info extends Mage_Payment_Block_Info_Cc{
19
+
20
+ protected function _construct(){
21
+
22
+ // Route: /checkout/onepage
23
+ // inicia formulario para a escolha de pagamento
24
+
25
+ parent::_construct();
26
+ $this->setTemplate('mercadopago/transparent_ticket/info.phtml');
27
+ $this->setModuleName('Mage_Payment');
28
+ }
29
+
30
+
31
+ public function getOrder() {
32
+
33
+ return $this->getInfo();
34
+
35
+ }
36
+ }
app/code/community/MercadoPago/TransparentTicket/Helper/Data.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ ?>
17
+ <?php
18
+
19
+
20
+ class MercadoPago_TransparentTicket_Helper_Data extends Mage_Payment_Helper_Data{
21
+
22
+ }
app/code/community/MercadoPago/TransparentTicket/Model/Transparent.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ require_once(Mage::getBaseDir('lib') . '/mercadopago/mercadopago.php');
18
+
19
+ class MercadoPago_TransparentTicket_Model_Transparent extends Mage_Payment_Model_Method_Abstract{
20
+
21
+ //configura o lugar do arquivo para listar meios de pagamento
22
+ protected $_formBlockType = 'mercadopago_transparentticket/form';
23
+ protected $_infoBlockType = 'mercadopago_transparentticket/info';
24
+
25
+ protected $_code = 'mercadopago_transparentticket';
26
+
27
+ protected $_canSaveCc = false;
28
+ protected $_isGateway = true;
29
+ protected $_canAuthorize = true;
30
+ protected $_canCapture = true;
31
+ protected $_canVoid = true;
32
+ protected $_canCancelInvoice = true;
33
+ protected $_isInitializeNeeded = true;
34
+ protected $_canFetchTransactionInfo = true;
35
+ protected $_canCreateBillingAgreement = true;
36
+ protected $_canReviewPayment = true;
37
+
38
+
39
+ public function initialize($paymentAction, $stateObject) {
40
+ //chama model para fazer o post do pagamento
41
+ $response = Mage::getModel('mercadopago_transparent/transparent')->postPago();
42
+
43
+ if($response !== false):
44
+ $this->getInfoInstance()->setAdditionalInformation('activation_uri', $response['response']['activation_uri']);
45
+ return true;
46
+ endif;
47
+
48
+ return false;
49
+
50
+ }
51
+
52
+ public function assignData($data){
53
+
54
+ // route /checkout/onepage/savePayment
55
+ if(!($data instanceof Varien_Object)){
56
+ $data = new Varien_Object($data);
57
+ }
58
+
59
+ //get array info
60
+ $info_form = $data->getData();
61
+
62
+ $info = $this->getInfoInstance();
63
+ $info->setAdditionalInformation('payment_type_id', "ticket");
64
+ $info->setAdditionalInformation('payment_method', $info_form['payment_method_boleto']);
65
+ $info->setAdditionalInformation('card_token_id', "");
66
+ $info->setAdditionalInformation('installments', 1);
67
+ $info->setAdditionalInformation('doc_number', "");
68
+
69
+ return $this;
70
+ }
71
+
72
+ public function getPaymentMethods(){
73
+
74
+ $this->client_id = Mage::getStoreConfig('payment/mercadopago_configuration/client_id');
75
+ $this->client_secret = Mage::getStoreConfig('payment/mercadopago_configuration/client_secret');
76
+
77
+ $mp = new MP ($this->client_id, $this->client_secret);
78
+ $access_token = $mp->get_access_token();
79
+
80
+ $payment_methods = MPRestClient::get("/checkout/custom/payment_methods?access_token=" . $access_token);
81
+
82
+ return $payment_methods;
83
+ }
84
+ }
85
+
86
+ ?>
app/code/community/MercadoPago/TransparentTicket/etc/config.xml ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <!--
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL).
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Payment Gateway
12
+ * @package MercadoPago
13
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
14
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+ -->
18
+ <config>
19
+ <modules>
20
+ <MercadoPago_TransparentTicket>
21
+ <version>2.0.0</version>
22
+ </MercadoPago_TransparentTicket>
23
+ </modules>
24
+
25
+ <global>
26
+ <models>
27
+ <mercadopago_transparentticket>
28
+ <class>MercadoPago_TransparentTicket_Model</class>
29
+ </mercadopago_transparentticket>
30
+ </models>
31
+ <blocks>
32
+ <mercadopago_transparentticket>
33
+ <class>MercadoPago_TransparentTicket_Block</class>
34
+ </mercadopago_transparentticket>
35
+ </blocks>
36
+ <helpers>
37
+ <mercadopago_transparentticket>
38
+ <class>MercadoPago_TransparentTicket_Helper</class>
39
+ </mercadopago_transparentticket>
40
+ </helpers>
41
+ </global>
42
+
43
+
44
+ <frontend>
45
+ <routers>
46
+ <mercadopago_transparentticket>
47
+ <use>standard</use>
48
+ <args>
49
+ <module>MercadoPago_TransparentTicket</module>
50
+ <frontName>mercadopago_transparentticket</frontName>
51
+ </args>
52
+ </mercadopago_transparentticket>
53
+ </routers>
54
+
55
+ <layout>
56
+ <updates>
57
+ <mpexpress>
58
+ <file>mercadopago.xml</file>
59
+ </mpexpress>
60
+ </updates>
61
+ </layout>
62
+
63
+ <translate>
64
+ <modules>
65
+ <mercadopago>
66
+ <files>
67
+ <default>mercadopago.csv</default>
68
+ </files>
69
+ </mercadopago>
70
+ </modules>
71
+ </translate>
72
+ </frontend>
73
+
74
+
75
+ <adminhtml>
76
+ <translate>
77
+ <modules>
78
+ <translations>
79
+ <files>
80
+ <default>mercadopago.csv</default>
81
+ </files>
82
+ </translations>
83
+ </modules>
84
+ </translate>
85
+ </adminhtml>
86
+
87
+
88
+ <default>
89
+ <payment translate="label">
90
+ <mercadopago_transparentticket>
91
+ <active>1</active>
92
+ <model>MercadoPago_TransparentTicket_Model_Transparent</model>
93
+ <!-- nome do modulo na exibição para o comprador -->
94
+ <title translate="label">Ticket - MercadoPago</title>
95
+ <allowspecific>0</allowspecific>
96
+ <banner_checkout>http://imgmp.mlstatic.com/org-img/MLB/MP/BANNERS/2014/230x60.png</banner_checkout>
97
+ <sort_order>-1</sort_order>
98
+ <payment_action>authorize</payment_action>
99
+ </mercadopago_transparentticket>
100
+ </payment>
101
+ </default>
102
+
103
+ </config>
app/code/community/MercadoPago/TransparentTicket/etc/system.xml ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <!--
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL).
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Payment Gateway
12
+ * @package MercadoPago
13
+ * @author Gabriel Matsuoka (gabriel.matsuoka@gmail.com)
14
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+ -->
18
+
19
+ <config>
20
+ <sections>
21
+ <payment translate="label">
22
+ <groups>
23
+ <mercadopago_transparentticket translate="label" module="mercadopago_transparentticket">
24
+ <label>MercadoPago Transparent - Ticket</label>
25
+ <sort_order>101</sort_order>
26
+ <show_in_default>1</show_in_default>
27
+ <show_in_website>1</show_in_website>
28
+ <show_in_store>0</show_in_store>
29
+ <fields>
30
+ <active translate="label">
31
+ <label>Enabled</label>
32
+ <frontend_type>select</frontend_type>
33
+ <source_model>adminhtml/system_config_source_yesno</source_model>
34
+ <sort_order>1</sort_order>
35
+ <show_in_default>1</show_in_default>
36
+ <show_in_website>1</show_in_website>
37
+ <show_in_store>0</show_in_store>
38
+ <comment>For the operation of the Checkout Transparent Ticket is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'</comment>
39
+ </active>
40
+ <title translate="label">
41
+ <label>Payment Title</label>
42
+ <frontend_type>text</frontend_type>
43
+ <sort_order>2</sort_order>
44
+ <show_in_default>1</show_in_default>
45
+ <show_in_website>1</show_in_website>
46
+ <show_in_store>0</show_in_store>
47
+ </title>
48
+
49
+
50
+ <banner_checkout translate="label">
51
+ <label>Banner Checkout</label>
52
+ <frontend_type>text</frontend_type>
53
+ <sort_order>3</sort_order>
54
+ <show_in_default>1</show_in_default>
55
+ <show_in_website>1</show_in_website>
56
+ <show_in_store>0</show_in_store>
57
+ </banner_checkout>
58
+
59
+ <sort_order translate="label">
60
+ <label>Checkout Position</label>
61
+ <frontend_type>text</frontend_type>
62
+ <sort_order>4</sort_order>
63
+ <show_in_default>1</show_in_default>
64
+ <show_in_website>1</show_in_website>
65
+ <show_in_store>0</show_in_store>
66
+ <frontend_class>validate-number</frontend_class>
67
+ </sort_order>
68
+
69
+ </fields>
70
+ </mercadopago_transparentticket>
71
+ </groups>
72
+ </payment>
73
+ </sections>
74
+ </config>
app/design/adminhtml/default/default/template/mercadopago/standard/info.phtml ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><strong><?php echo $this->getMethod()->getTitle() ?></strong></p>
2
+
3
+ <?php if($this->getOrder()->getAdditionalInformation('cardholderName') != ""): ?>
4
+ <p><?php echo $this->__('Card Holder Name: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('cardholderName'))); ?></p>
5
+ <?php endif; ?>
6
+
7
+ <?php if($this->getOrder()->getAdditionalInformation('trunc_card') != ""): ?>
8
+ <p><?php echo $this->__('Card Number: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('trunc_card'))); ?></p>
9
+ <?php endif; ?>
10
+
11
+ <?php if($this->getOrder()->getAdditionalInformation('payment_method') != ""): ?>
12
+ <p><?php echo $this->__('Payment Method: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_method'))); ?></p>
13
+ <?php endif; ?>
14
+
15
+ <?php if($this->getOrder()->getAdditionalInformation('installments') != ""): ?>
16
+ <p><?php echo $this->__('Installments: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('installments'))); ?></p>
17
+ <?php endif; ?>
18
+
19
+ <?php if($this->getOrder()->getAdditionalInformation('statement_descriptor') != ""): ?>
20
+ <p><?php echo $this->__('Statement Descriptor: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('statement_descriptor'))); ?></p>
21
+ <?php endif; ?>
22
+
23
+ <?php if($this->getOrder()->getAdditionalInformation('payment_id') != ""): ?>
24
+ <p><?php echo $this->__('Payment Id (MercadoPago): %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_id'))); ?></p>
25
+ <?php endif; ?>
26
+
27
+ <?php if($this->getOrder()->getAdditionalInformation('status') != ""): ?>
28
+ <p><?php echo $this->__('Payment Status: %s (%s)', $this->htmlEscape($this->getOrder()->getAdditionalInformation('status')), $this->htmlEscape($this->getOrder()->getAdditionalInformation('status_detail'))); ?></p>
29
+ <?php endif; ?>
app/design/adminhtml/default/default/template/mercadopago/transparent/info.phtml ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><strong><?php echo $this->getMethod()->getTitle() ?></strong></p>
2
+
3
+ <?php if($this->getOrder()->getAdditionalInformation('cardholderName') != ""): ?>
4
+ <p><?php echo $this->__('Card Holder Name: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('cardholderName'))); ?></p>
5
+ <?php endif; ?>
6
+
7
+ <?php if($this->getOrder()->getAdditionalInformation('trunc_card') != ""): ?>
8
+ <p><?php echo $this->__('Card Number: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('trunc_card'))); ?></p>
9
+ <?php endif; ?>
10
+
11
+ <?php if($this->getOrder()->getAdditionalInformation('payment_method') != ""): ?>
12
+ <p><?php echo $this->__('Payment Method: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_method'))); ?></p>
13
+ <?php endif; ?>
14
+
15
+ <?php if($this->getOrder()->getAdditionalInformation('expiration_date') != ""): ?>
16
+ <p><?php echo $this->__('Expiration Date: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('expiration_date'))); ?></p>
17
+ <?php endif; ?>
18
+
19
+ <?php if($this->getOrder()->getAdditionalInformation('installments') != ""): ?>
20
+ <p><?php echo $this->__('Installments: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('installments'))); ?></p>
21
+ <?php endif; ?>
22
+
23
+ <?php if($this->getOrder()->getAdditionalInformation('statement_descriptor') != ""): ?>
24
+ <p><?php echo $this->__('Statement Descriptor: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('statement_descriptor'))); ?></p>
25
+ <?php endif; ?>
26
+
27
+ <?php if($this->getOrder()->getAdditionalInformation('payment_id') != ""): ?>
28
+ <p><?php echo $this->__('Payment Id (MercadoPago): %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_id'))); ?></p>
29
+ <?php endif; ?>
30
+
31
+ <?php if($this->getOrder()->getAdditionalInformation('status') != ""): ?>
32
+ <p><?php echo $this->__('Payment Status: %s (%s)', $this->htmlEscape($this->getOrder()->getAdditionalInformation('status')), $this->htmlEscape($this->getOrder()->getAdditionalInformation('status_detail'))); ?></p>
33
+ <?php endif; ?>
app/design/adminhtml/default/default/template/mercadopago/transparent_boleto/info.phtml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><strong><?php echo $this->getMethod()->getTitle() ?></strong></p>
2
+
3
+ <?php if($this->getOrder()->getAdditionalInformation('payment_id') != ""): ?>
4
+ <p><?php echo $this->__('Numero de Pagamento (MercadoPago): %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_id'))); ?></p>
5
+ <?php endif; ?>
6
+
7
+ <?php if($this->getOrder()->getAdditionalInformation('status') != ""): ?>
8
+ <p><?php echo $this->__('Status de Pagamento: %s (%s)', $this->htmlEscape($this->getOrder()->getAdditionalInformation('status')), $this->htmlEscape($this->getOrder()->getAdditionalInformation('status_detail'))); ?></p>
9
+ <?php endif; ?>
10
+
11
+ <p>Clique no link para gerar o boleto.</p>
12
+ <a href="<?php echo urldecode($this->htmlEscape($this->getOrder()->getAdditionalInformation('activation_uri'))); ?>" target="_blank">Gerar Boleto</a>
13
+
app/design/adminhtml/default/default/template/mercadopago/transparent_ticket/info.phtml ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><strong><?php echo $this->getMethod()->getTitle() ?></strong></p>
2
+
3
+ <?php if($this->getOrder()->getAdditionalInformation('payment_id') != ""): ?>
4
+ <p><?php echo $this->__('Payment Id (MercadoPago): %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_id'))); ?></p>
5
+ <?php endif; ?>
6
+
7
+ <?php if($this->getOrder()->getAdditionalInformation('status') != ""): ?>
8
+ <p><?php echo $this->__('Payment Status: %s (%s)', $this->htmlEscape($this->getOrder()->getAdditionalInformation('status')), $this->htmlEscape($this->getOrder()->getAdditionalInformation('status_detail'))); ?></p>
9
+ <?php endif; ?>
10
+
11
+ <p><?php echo $this->__('Click on the link to generate the ticket'); ?>.</p>
12
+ <a href="<?php echo urldecode($this->htmlEscape($this->getOrder()->getAdditionalInformation('activation_uri'))); ?>" target="_blank">
13
+ <?php echo $this->__('Generate Ticket'); ?>
14
+ </a>
15
+
app/design/frontend/base/default/layout/mercadopago.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <layout version="0.1.0">
4
+ <checkout_onepage_success translate="label">
5
+ <reference name="content">
6
+ <block name="mercadopago.transparent.success" template="mercadopago/transparent/success.phtml" type="mercadopago_transparent/success" />
7
+ </reference>
8
+ </checkout_onepage_success>
9
+ </layout>
app/design/frontend/base/default/template/mercadopago/clean_page.phtml ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL).
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Payment Gateway
11
+ * @package MercadoPago
12
+ * @author Andr� Fuhrman (andrefuhrman@gmail.com)
13
+ * @copyright Copyright (c) MercadoPago [http://www.mercadopago.com]
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ ?>
17
+ <?php
18
+ /**
19
+ * Template for Mage_Page_Block_Html
20
+ */
21
+ ?>
22
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
23
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->getLang() ?>" lang="<?php echo $this->getLang() ?>">
24
+ <head>
25
+ <?php echo $this->getChildHtml('head') ?>
26
+ </head>
27
+ <body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>>
28
+ <?php echo $this->getChildHtml('after_body_start') ?>
29
+ <div class="wrapper">
30
+ <?php echo $this->getChildHtml('global_notices') ?>
31
+ <div class="page">
32
+ <?php echo $this->getChildHtml('header') ?>
33
+ <div class="main-container col1-layout">
34
+ <div class="main">
35
+ <?php echo $this->getChildHtml('breadcrumbs') ?>
36
+ <div class="col-main">
37
+ <?php echo $this->getChildHtml('global_messages') ?>
38
+ <?php echo $this->getChildHtml('content') ?>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ <?php echo $this->getChildHtml('footer') ?>
43
+ <?php echo $this->getChildHtml('before_body_end') ?>
44
+ </div>
45
+ </div>
46
+ <?php echo $this->getAbsoluteFooter() ?>
47
+ </body>
48
+ </html>
app/design/frontend/base/default/template/mercadopago/standard/form.phtml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <fieldset class="form-list">
3
+ <link rel="stylesheet" href="<?php echo $this->getSkinUrl('mercadopago/css/style.css'); ?>" />
4
+
5
+ <?php $_code = $this->getMethodCode(); ?>
6
+ <?php $_country = $this->getMethodCountry(); ?>
7
+
8
+ <?php if($this->getMethod()->getConfigData('banner_checkout') != ""): ?>
9
+ <img src="<?php echo $this->getMethod()->getConfigData('banner_checkout'); ?>" class="banner_checkout_mp"/>
10
+ <?php endif;?>
11
+
12
+ </fieldset>
app/design/frontend/base/default/template/mercadopago/standard/info.phtml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><strong><?php echo $this->getMethod()->getTitle() ?></strong></p>
2
+
3
+ <?php if(Mage::app()->getRequest()->getRouteName()=="sales"): ?>
4
+
5
+
6
+ <?php if($this->getOrder()->getAdditionalInformation('cardholderName') != ""): ?>
7
+ <p><?php echo $this->__('Card Holder Name: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('cardholderName'))); ?></p>
8
+ <?php endif; ?>
9
+
10
+ <?php if($this->getOrder()->getAdditionalInformation('trunc_card') != ""): ?>
11
+ <p><?php echo $this->__('Card Number: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('trunc_card'))); ?></p>
12
+ <?php endif; ?>
13
+
14
+ <?php if($this->getOrder()->getAdditionalInformation('payment_method') != ""): ?>
15
+ <p><?php echo $this->__('Payment Method: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_method'))); ?></p>
16
+ <?php endif; ?>
17
+
18
+ <?php if($this->getOrder()->getAdditionalInformation('installments') != ""): ?>
19
+ <p><?php echo $this->__('Installments: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('installments'))); ?></p>
20
+ <?php endif; ?>
21
+
22
+ <?php if($this->getOrder()->getAdditionalInformation('statement_descriptor') != ""): ?>
23
+ <p><?php echo $this->__('Statement Descriptor: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('statement_descriptor'))); ?></p>
24
+ <?php endif; ?>
25
+
26
+ <?php if($this->getOrder()->getAdditionalInformation('payment_id') != ""): ?>
27
+ <p><?php echo $this->__('Payment Id (MercadoPago): %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_id'))); ?></p>
28
+ <?php endif; ?>
29
+
30
+ <?php if($this->getOrder()->getAdditionalInformation('status') != ""): ?>
31
+ <p><?php echo $this->__('Payment Status: %s (%s)', $this->htmlEscape($this->getOrder()->getAdditionalInformation('status')), $this->htmlEscape($this->getOrder()->getAdditionalInformation('status_detail'))); ?></p>
32
+ <?php endif; ?>
33
+
34
+
35
+
36
+ <?php endif;?>
app/design/frontend/base/default/template/mercadopago/standard/pay.phtml ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <link rel="stylesheet" href="<?php echo $this->getSkinUrl('mercadopago/css/style.css'); ?>" />
2
+
3
+ <div id="standard_banner_checkout">
4
+ <img src="<?php echo $banner_checkout; ?>" class="banner_checkout_mp"/>
5
+ </div>
6
+
7
+ <?php if($type_checkout == "lightbox"):?>
8
+
9
+ <script type="text/javascript" src="https://www.mercadopago.com/org-img/jsapi/mptools/buttons/render.js"></script>
10
+
11
+ <!-- Abra o Checkout -->
12
+ <script type="text/javascript">
13
+ $MPC.openCheckout ({
14
+ url: "<?php echo $init_point; ?>",
15
+ mode: "modal",
16
+ onreturn: function(data) {
17
+ // execute_my_onreturn (Apenas modelo)
18
+ }
19
+ });
20
+ </script>
21
+
22
+ <a href="<?php echo $init_point; ?>" name="MP-Checkout" class="blue-M-Rn" mp-mode="modal">Pagar</a>
23
+ <!-- Cole esse código antes de fechar a etiqueta </body> -->
24
+
25
+ <?php elseif($type_checkout == "redirect"):?>
26
+ <script type="text/javascript" src="https://www.mercadopago.com/org-img/jsapi/mptools/buttons/render.js"></script>
27
+
28
+ <!-- Abra o Checkout -->
29
+ <script type="text/javascript">
30
+ $MPC.openCheckout ({
31
+ url: "<?php echo $init_point; ?>",
32
+ mode: "redirect",
33
+ onreturn: function(data) {
34
+ // execute_my_onreturn (Apenas modelo)
35
+ }
36
+ });
37
+ </script>
38
+ <?php else: ?>
39
+
40
+ <!-- Aqui você deve inserir a URL que corresponde a "init_point" -->
41
+ <iframe src="<?php echo $init_point; ?>" name="MP-Checkout" width="<?php echo $iframe_width; ?>" height="<?php echo $iframe_height; ?>" frameborder="0" scrolling="no" id="checkout_mercadopago"></iframe>
42
+
43
+ <!-- Cole esse código antes de fechar a etiqueta </body> -->
44
+ <script type="text/javascript">
45
+ (function(){function $MPBR_load(){window.$MPBR_loaded !== true && (function(){var s = document.createElement("script");s.type = "text/javascript";s.async = true;
46
+ s.src = ("https:"==document.location.protocol?"https://www.mercadopago.com/org-img/jsapi/mptools/buttons/":"http://mp-tools.mlstatic.com/buttons/")+"render.js";
47
+ var x = document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);window.$MPBR_loaded = true;})();}
48
+ window.$MPBR_loaded !== true ? (window.attachEvent ? window.attachEvent('onload', $MPBR_load) : window.addEventListener('load', $MPBR_load, false)) : null;})();
49
+ </script>
50
+
51
+ <?php endif;?>
app/design/frontend/base/default/template/mercadopago/transparent/form.phtml ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $country = Mage::getStoreConfig('payment/mercadopago_configuration/country');
4
+
5
+ ?>
6
+
7
+
8
+ <fieldset class="form-list mercadopago">
9
+ <link rel="stylesheet" href="<?php echo $this->getSkinUrl('mercadopago/css/style.css'); ?>" />
10
+
11
+ <?php $_code = $this->getMethodCode(); ?>
12
+ <?php $_country = $this->getMethodCountry(); ?>
13
+
14
+ <script>
15
+ //load nas actions para funcionar o js do mercadopago
16
+ loadFilesMP();
17
+ </script>
18
+
19
+ <div id="mp-form">
20
+ <ul class="form-list form-mercadopago" id="payment_form_<?php echo $_code ?>" style="display:none;" >
21
+
22
+ <?php if( $country == 'mlm'):
23
+ $payment_methods = $this->getCardsPaymentMethods();
24
+ ?>
25
+ <li>
26
+ <div class="box-input">
27
+ <label for="<?php echo $_code ?>_payment_method" class="required"><em>*</em><?php echo $this->__('Payment Method'); ?></label>
28
+ <div class="input-box box-payment_method">
29
+ <select name="payment[payment_method]" id="payment_method" data-checkout="payment_method" id="<?php echo $_code ?>_payment_method" class="input-text required-entry">
30
+ <option value="-1"><?php echo $this->__('Choice'); ?>...</option>
31
+ <?php foreach($payment_methods as $pm): ?>
32
+ <option value="<?php echo $pm['id']; ?>"><?php echo $pm['name']; ?></option>
33
+ <?php endforeach; ?>
34
+ </select>
35
+ </div>
36
+ </div>
37
+ </li>
38
+ <?php else: ?>
39
+ <input type="hidden" name="payment[payment_method]" type="text" value="" id="payment_method" />
40
+ <?php endif; ?>
41
+
42
+ <li>
43
+ <label for="<?php echo $_code ?>_cn" class="required"><em>*</em><?php echo $this->__('Card Number'); ?></label>
44
+ <div class="input-box">
45
+ <input data-checkout="cardNumber" id="<?php echo $_code ?>_cn" type="text" class="input-text required-entry"/>
46
+ <div id="img_payment_method"></div>
47
+ </div>
48
+ </li>
49
+
50
+ <li id="issuersOptions" style="display: none;">
51
+ <label for="<?php echo $_code ?>_issuers" class="required"><em>*</em><?php echo $this->__('Banks'); ?></label>
52
+ <div class="input-box">
53
+ <div id="issuers">
54
+ </div>
55
+ </div>
56
+ </li>
57
+
58
+ <li>
59
+ <div class="box-mes">
60
+ <label for="<?php echo $_code ?>_month" class="required"><em>*</em><?php echo $this->__('Month'); ?></label>
61
+ <div class="input-box mes">
62
+ <select data-checkout="cardExpirationMonth" name="payment[cardExpirationMonth]" id="<?php echo $_code ?>_month" class="input-text required-entry validate-digits">
63
+ <?php foreach ($this->getCcMonths() as $m=>$v): ?>
64
+ <option value="<?php echo $m?$m:'' ?>"><?php echo $v ?></option>
65
+ <?php endforeach ?>
66
+ </select>
67
+ </div>
68
+ </div>
69
+
70
+ <div class="box-ano">
71
+ <label for="<?php echo $_code ?>_year" class="required"><em>*</em><?php echo $this->__('Year'); ?></label>
72
+ <div class="input-box">
73
+ <select data-checkout="cardExpirationYear" name="payment[cardExpirationYear]" id="<?php echo $_code ?>_year" class="input-text required-entry validate-digits">
74
+ <?php foreach ($this->getCcYears() as $y=>$v): ?>
75
+ <option value="<?php echo $y?$y:'' ?>"><?php echo $v ?></option>
76
+ <?php endforeach ?>
77
+ </select>
78
+ </div>
79
+ </div>
80
+ </li>
81
+
82
+
83
+ <li>
84
+ <div class="box-input">
85
+ <label for="<?php echo $_code ?>_name" class="required"><em>*</em><?php echo $this->__('Card Holder Name'); ?></label>
86
+ <div class="input-box">
87
+ <input data-checkout="cardholderName" name="payment[cardholderName]" id="<?php echo $_code ?>_name" type="text" class="input-text required-entry" type="text"/>
88
+ </div>
89
+ </div>
90
+ </li>
91
+
92
+ <?php
93
+ //mexico não possui documento no checkout
94
+ if( $country != 'mlm'): ?>
95
+
96
+ <li>
97
+ <div class="box-input">
98
+ <label for="<?php echo $_code ?>_doc" class="required"><em>*</em><?php echo $this->__('Document Number'); ?></label>
99
+ <div class="input-box">
100
+ <?php if( $country == 'mlb'): ?>
101
+ <input type="hidden" data-checkout="docType" id="docType" type="text" value="CPF"/>
102
+ <?php elseif($country == 'mla'): ?>
103
+ <select optionkey="id" name="payment[docType]" id="docType" data-checkout="docType">
104
+ <option value="DNI">DNI</option>
105
+ <option value="CI">Cédula</option>
106
+ <option value="LC">L.C.</option>
107
+ <option value="LE">L.E.</option>
108
+ <option value="Otro">Otro</option>
109
+ </select>
110
+ <?php endif; ?>
111
+
112
+ <input name="payment[doc_number]" data-checkout="docNumber" id="<?php echo $_code ?>_doc" type="text" class="input-text required-entry validate-digits" type="text" maxlength="11" />
113
+ </div>
114
+ </div>
115
+ </li>
116
+ <?php endif; ?>
117
+
118
+ <li>
119
+ <div class="box-input">
120
+ <label for="<?php echo $_code ?>_code" class="required"><em>*</em><?php echo $this->__('CVV'); ?></label>
121
+ <div class="input-box">
122
+ <input data-checkout="securityCode" id="<?php echo $_code ?>_code" type="text" class="input-text required-entry validate-digits" type="text"/>
123
+ </div>
124
+ </div>
125
+ </li>
126
+
127
+ <li>
128
+ <div class="box-input">
129
+ <label for="<?php echo $_code ?>_installments" class="required"><em>*</em><?php echo $this->__('Installments'); ?></label>
130
+ <div class="input-box box-installments">
131
+ <select name="payment[installments]" id="installments" data-checkout="installments" id="<?php echo $_code ?>_installments" class="input-text required-entry validate-digits">
132
+ <option><?php echo $this->__('Enter the card number'); ?></option>
133
+ </select>
134
+ </div>
135
+ </div>
136
+
137
+ <div id="status">
138
+ <div class="box">
139
+ <div class="loading-mp">
140
+ <img src="<?php echo $this->getSkinUrl('mercadopago/images/loading.gif') ;?>" alt="loading" />
141
+ </div>
142
+
143
+ <div class="text-mp">
144
+ <p class="msg-status msg-loading"><?php echo $this->__('Validating Data'); ?>...</p>
145
+ <p class="msg-status error-011"><?php echo $this->__('An error has occurred. Please refresh the page.'); ?></p>
146
+ <p class="msg-status error-E301"><?php echo $this->__('Card Number is invalid.'); ?></p>
147
+ <p class="msg-status error-E302"><?php echo $this->__('CVV is invalid.'); ?></p>
148
+ <p class="msg-status error-316"><?php echo $this->__('Card Holder Name is invalid.'); ?></p>
149
+ <p class="msg-status error-324"><?php echo $this->__('Document Number is invalid.'); ?></p>
150
+ <p class="msg-status error-325"><?php echo $this->__('Month is invalid.'); ?></p>
151
+ <p class="msg-status error-326"><?php echo $this->__('Year is invalid.'); ?></p>
152
+ <p class="msg-status error-other"><?php echo $this->__('Please validate your data.'); ?></p>
153
+ </div>
154
+ </div>
155
+ </div>
156
+ <input type="hidden" id="amount" value="<?php echo $this->helper('checkout/cart')->getQuote()->getGrandTotal(); ?>">
157
+ <input type="hidden" name="payment[card_token_id]" type="text" value="" id="card_token_id" />
158
+ <input type="hidden" name="payment[trunc_card]" type="text" value="" id="trunc_card" />
159
+
160
+ <?php if($this->getMethod()->getConfigData('banner_checkout') != ""): ?>
161
+ <img src="<?php echo $this->getMethod()->getConfigData('banner_checkout'); ?>" class="banner_checkout_mp"/>
162
+ <?php endif;?>
163
+
164
+ <div style="display: none;">
165
+ <span id="mercadopago-text-currency"><?php echo $this->__('$'); ?></span>
166
+ <span id="mercadopago-text-choice"><?php echo $this->__('Choice'); ?></span>
167
+ <span id="mercadopago-text-default-issuer"><?php echo $this->__('Default issuer'); ?></span>
168
+ <span id="mercadopago-country"><?php echo $country; ?></span>
169
+ </div>
170
+ </li>
171
+ </ul>
172
+
173
+
174
+ </div>
175
+ </fieldset>
app/design/frontend/base/default/template/mercadopago/transparent/info.phtml ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><strong><?php echo $this->getMethod()->getTitle() ?></strong></p>
2
+
3
+ <?php if($this->getOrder()->getAdditionalInformation('cardholderName') != ""): ?>
4
+ <p><?php echo $this->__('Card Holder Name: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('cardholderName'))); ?></p>
5
+ <?php endif; ?>
6
+
7
+ <?php if($this->getOrder()->getAdditionalInformation('trunc_card') != ""): ?>
8
+ <p><?php echo $this->__('Card Number: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('trunc_card'))); ?></p>
9
+ <?php endif; ?>
10
+
11
+ <?php if($this->getOrder()->getAdditionalInformation('payment_method') != ""): ?>
12
+ <p><?php echo $this->__('Payment Method: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_method'))); ?></p>
13
+ <?php endif; ?>
14
+
15
+ <?php if($this->getOrder()->getAdditionalInformation('expiration_date') != ""): ?>
16
+ <p><?php echo $this->__('Expiration Date: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('expiration_date'))); ?></p>
17
+ <?php endif; ?>
18
+
19
+ <?php if($this->getOrder()->getAdditionalInformation('installments') != ""): ?>
20
+ <p><?php echo $this->__('Installments: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('installments'))); ?></p>
21
+ <?php endif; ?>
22
+
23
+ <?php if($this->getOrder()->getAdditionalInformation('statement_descriptor') != ""): ?>
24
+ <p><?php echo $this->__('Statement Descriptor: %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('statement_descriptor'))); ?></p>
25
+ <?php endif; ?>
26
+
27
+ <?php if($this->getOrder()->getAdditionalInformation('payment_id') != ""): ?>
28
+ <p><?php echo $this->__('Payment Id (MercadoPago): %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_id'))); ?></p>
29
+ <?php endif; ?>
30
+
31
+ <?php if($this->getOrder()->getAdditionalInformation('status') != ""): ?>
32
+ <p><?php echo $this->__('Payment Status: %s (%s)', $this->htmlEscape($this->getOrder()->getAdditionalInformation('status')), $this->htmlEscape($this->getOrder()->getAdditionalInformation('status_detail'))); ?></p>
33
+ <?php endif; ?>
app/design/frontend/base/default/template/mercadopago/transparent/success.phtml ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style>
2
+ #btn-boleto-mercadopago{
3
+ font-size: 1.25em;
4
+ text-align: center;
5
+ line-height: 1.25em;
6
+ padding: 6px 12px;
7
+ font-family: 'Lato',sans-serif;
8
+ font-weight: 400;
9
+ background-color: #36A1F1;
10
+ background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#36A1F1),color-stop(100%,#0F79C9));
11
+ background-image: -webkit-linear-gradient(#36A1F1,#0F79C9);
12
+ background-image: -moz-linear-gradient(#36A1F1,#0F79C9);
13
+ background-image: -o-linear-gradient(#36A1F1,#0F79C9);
14
+ background-image: linear-gradient(#36A1F1,#0F79C9);
15
+ -webkit-box-shadow: inset 0 1px #97DCFF;
16
+ box-shadow: 0 1px #97DCFF inset;
17
+ color: #FFF!important;
18
+ border: 1px solid #0D6FB9;
19
+ border-radius: 4px 4px 4px 4px;
20
+ cursor: pointer;
21
+ display: inline-block;
22
+ text-decoration:none;
23
+ }
24
+ #btn-boleto-mercadopago:hover{
25
+ background-color:#4CBFF8;
26
+ background-image:linear-gradient(#4CBFF8,#1699DF);
27
+ box-shadow:0 1px #B6EBFF inset;
28
+ background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#4CBFF8),color-stop(100%,#1699DF));
29
+ background-image:-webkit-linear-gradient(#4CBFF8,#1699DF);
30
+ background-image:-moz-linear-gradient(#4CBFF8,#1699DF);
31
+ background-image:-o-linear-gradient(#4CBFF8,#1699DF);
32
+ background-image:linear-gradient(#4CBFF8,#1699DF);-webkit-box-shadow:inset 0 1px #B6EBFF;
33
+ border:1px solid #1890D3;
34
+ color:#FFF;
35
+ text-decoration:none;
36
+ }
37
+ #box-mercadopago{
38
+ float:left;
39
+ text-align: left;
40
+ margin: 10px 0;
41
+ }
42
+
43
+ #title-mercadopago{
44
+ text-transform:uppercase;
45
+ }
46
+
47
+ #logo-mercadopago{
48
+ margin: 10px 0;
49
+ }
50
+ </style>
51
+
52
+ <div id="box-mercadopago">
53
+
54
+ <?php
55
+ //mensagem apenas para checkout transparent
56
+ if(!isset($_REQUEST['preference_id'])):
57
+ ?>
58
+ <h5>
59
+ <b>
60
+ <?php echo $this->__('Payment Method'); ?>
61
+ </b>
62
+ </h5>
63
+
64
+ <?php
65
+ $order = $this->getOrder();
66
+
67
+ $total = $order->getBaseGrandTotal();
68
+
69
+ if (!$total) {
70
+ $total = $order->getBasePrice() + $order->getBaseShippingAmount();
71
+ }
72
+
73
+ $total = number_format($total, 2, '.', '');
74
+
75
+ $payment = $order->getPayment();
76
+
77
+ if($payment->getAdditionalInformation('payment_type_id') == 'ticket'):
78
+ ?>
79
+
80
+ <p>
81
+ <?php echo $this->__('Generate the ticket and pay it wherever you want.'); ?>
82
+ </p>
83
+ <p>
84
+ <?php echo $this->__('Will be approved within 2 business days.'); ?>
85
+ </p>
86
+ <a href="<?php echo urldecode($this->htmlEscape($payment->getAdditionalInformation('activation_uri'))); ?>" target="_blank" id="btn-boleto-mercadopago">
87
+ <?php echo $this->__('Generate Ticket'); ?>
88
+ </a>
89
+
90
+ <?php else: ?>
91
+
92
+ <?php
93
+ $title = "";
94
+ $msg = "";
95
+
96
+ switch ($payment->getAdditionalInformation('status')){
97
+ case "approved":
98
+ $title = $this->__('Done, your payment was accredited!');
99
+ $msg = "";
100
+ break;
101
+
102
+ case "in_process":
103
+ $title = $this->__('We are processing the payment.');
104
+ $msg = $this->__('In less than 2 business days we will tell you by e-mail if it is accredited or if we need more information.');
105
+ break;
106
+
107
+ case "pending":
108
+ $title = $this->__('We are processing the payment.');
109
+ $msg = $this->__('In less than an hour we will send you by e-mail the result.');
110
+ break;
111
+
112
+ case "rejected":
113
+ $title = $this->__('We could not process your payment.');
114
+
115
+ switch ($payment->getAdditionalInformation('status_detail')){
116
+ case "cc_rejected_bad_filled_card_number":
117
+ $msg = $this->__('Check the card number.');
118
+ break;
119
+
120
+ case "cc_rejected_bad_filled_date":
121
+ $msg = $this->__('Check the expiration date.');
122
+ break;
123
+
124
+ case "cc_rejected_bad_filled_other":
125
+ $msg = $this->__('Check the data.');
126
+ break;
127
+
128
+ case "cc_rejected_bad_filled_security_code":
129
+ $msg = $this->__('Check the security code.');
130
+ break;
131
+
132
+ case "cc_rejected_blacklist":
133
+ $msg = $this->__('We could not process your payment.');
134
+ break;
135
+
136
+ case "cc_rejected_call_for_authorize":
137
+ $msg = $this->__('You must authorize to %s the payment of $ %s to MercadoPago.', strtoupper($payment->getAdditionalInformation('payment_method')), strtoupper($total));
138
+ break;
139
+
140
+ case "cc_rejected_card_disabled":
141
+ $msg = $this->__('Call %s to activate your card.<br/>The phone is on the back of your card.', strtoupper($payment->getAdditionalInformation('payment_method')));
142
+ break;
143
+
144
+ case "cc_rejected_card_error":
145
+ $msg = $this->__('We could not process your payment.');
146
+ break;
147
+
148
+ case "cc_rejected_duplicated_payment":
149
+ $msg = $this->__('You already made a payment by that value.<br/>If you need to repay, use another card or other payment method.');
150
+ break;
151
+
152
+ case "cc_rejected_high_risk":
153
+ $msg = $this->__('Your payment was rejected.<br/>Choose another payment method, we recommend cash methods.');
154
+ break;
155
+
156
+ case "cc_rejected_insufficient_amount":
157
+ $msg = $this->__('Your %s do not have sufficient funds.', strtoupper($payment->getAdditionalInformation('payment_method')));
158
+ break;
159
+
160
+ case "cc_rejected_invalid_installments":
161
+ $msg = $this->__('%s does not process payments in %s installments.', strtoupper($payment->getAdditionalInformation('payment_method')), $payment->getAdditionalInformation('installments'));
162
+ break;
163
+
164
+ case "cc_rejected_max_attempts":
165
+ $msg = $this->__('You have got to the limit of allowed attempts.<br/>Choose another card or another payment method.');
166
+ break;
167
+
168
+ case "cc_rejected_other_reason":
169
+ $msg = $this->__('%s did not process the payment.', strtoupper($payment->getAdditionalInformation('payment_method')));
170
+ break;
171
+ }
172
+ break;
173
+ }
174
+ ?>
175
+
176
+ <p>
177
+ <b id="title-mercadopago">
178
+ <?php echo $title; ?>
179
+ </b>
180
+ </p>
181
+ <p>
182
+ <i>
183
+ <?php echo $msg; ?>
184
+ </i>
185
+ </p>
186
+
187
+ <br />
188
+
189
+ <?php if($payment->getAdditionalInformation('cardholderName') != ""): ?>
190
+ <p><?php echo $this->__('Card Holder Name: %s', $this->htmlEscape($payment->getAdditionalInformation('cardholderName'))); ?></p>
191
+ <?php endif; ?>
192
+
193
+ <?php if($payment->getAdditionalInformation('trunc_card') != ""): ?>
194
+ <p><?php echo $this->__('Card Number: %s', $this->htmlEscape($payment->getAdditionalInformation('trunc_card'))); ?></p>
195
+ <?php endif; ?>
196
+
197
+ <?php if($payment->getAdditionalInformation('payment_method') != ""): ?>
198
+ <p><?php echo $this->__('Payment Method: %s', $this->htmlEscape($payment->getAdditionalInformation('payment_method'))); ?></p>
199
+ <?php endif; ?>
200
+
201
+ <?php if($payment->getAdditionalInformation('expiration_date') != ""): ?>
202
+ <p><?php echo $this->__('Expiration Date: %s', $this->htmlEscape($payment->getAdditionalInformation('expiration_date'))); ?></p>
203
+ <?php endif; ?>
204
+
205
+ <?php if($payment->getAdditionalInformation('installments') != ""): ?>
206
+ <p><?php echo $this->__('Installments: %s', $this->htmlEscape($payment->getAdditionalInformation('installments'))); ?></p>
207
+ <?php endif; ?>
208
+
209
+ <?php if($payment->getAdditionalInformation('statement_descriptor') != ""): ?>
210
+ <p><?php echo $this->__('Statement Descriptor: %s', $this->htmlEscape($payment->getAdditionalInformation('statement_descriptor'))); ?></p>
211
+ <?php endif; ?>
212
+
213
+ <?php if($payment->getAdditionalInformation('payment_id') != ""): ?>
214
+ <p><?php echo $this->__('Payment id (MercadoPago): %s', $this->htmlEscape($payment->getAdditionalInformation('payment_id'))); ?></p>
215
+ <?php endif; ?>
216
+
217
+ <?php if($payment->getAdditionalInformation('status') != ""): ?>
218
+ <p><?php echo $this->__('Payment Status: %s (%s)', $this->htmlEscape($payment->getAdditionalInformation('status')), $this->htmlEscape($payment->getAdditionalInformation('status_detail'))); ?></p>
219
+ <?php endif; ?>
220
+
221
+
222
+ <?php endif; ?>
223
+
224
+ <div id="logo-mercadopago">
225
+ <img src="https://secure.mlstatic.com/components/resources/mp/desktop/css/assets/desktop-logo-mercadopago.png" />
226
+ </div>
227
+ <?php endif; ?>
228
+ </div>
229
+
app/design/frontend/base/default/template/mercadopago/transparent/sucesso.phtml ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $page_redirec = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true) . "checkout/onepage/success";
3
+ ?>
4
+
5
+ <link rel="stylesheet" href="<?php echo $this->getSkinUrl('mercadopago/css/style.css'); ?>" />
6
+
7
+ <script>
8
+ window.onload = function() {
9
+ contagem_tempo();
10
+ };
11
+
12
+ function contagem_tempo(){
13
+ if(document.getElementById("segundos_redirect") != null){
14
+ var segundos = document.getElementById("segundos_redirect").innerHTML;
15
+
16
+ segundos = segundos - 1;
17
+
18
+ if (segundos == -1) {
19
+ segundos = 0;
20
+ location.href = "<?php echo $page_redirec; ?>";
21
+ return;
22
+ }
23
+ document.getElementById("segundos_redirect").innerHTML = segundos ;
24
+ timerID = setTimeout("contagem_tempo()", 1000);
25
+ }
26
+ }
27
+
28
+ </script>
29
+
30
+ <div id="mensagem_mp">
31
+
32
+ <?php if($payment_method_id == "bolbradesco"): ?>
33
+
34
+ <?php
35
+ /*
36
+ *
37
+ * Processo para boleto
38
+ *
39
+ */
40
+ ?>
41
+
42
+ <h4>Pronto, seu pedido foi gerado com sucesso!</h4>
43
+
44
+ <p>
45
+ Gere o boleto e pague-o onde quiser.
46
+ </p>
47
+ <p>
48
+ <a href="<?php echo $payment['activation_uri']; ?>" target="_blank" class="btn-boleto"> Gerar boleto </a>
49
+ </p>
50
+
51
+ <p>Será aprovado até 2 dias úteis.</p>
52
+
53
+ <?php else: ?>
54
+
55
+ <?php
56
+ /*
57
+ *
58
+ * Processo para cartão
59
+ *
60
+ */
61
+ ?>
62
+
63
+ <?php if($status == "approved"): ?>
64
+
65
+ <h4>Pronto, seu pagamento foi aprovado!</h4>
66
+
67
+ <p>
68
+ <img src="<?php echo $this->getSkinUrl('mercadopago/images/loading.gif') ;?>" alt="loading" />
69
+ Em <span id="segundos_redirect">6</span> segundos <a href="<?php echo $page_redirec; ?>">você será redirecionado para tela de finalização.</a>
70
+ </p>
71
+
72
+ <?php elseif($status == "pending" || $status == "in_process"): ?>
73
+
74
+ <h4>Estamos processando o pagamento</h4>
75
+ <p class="status"><?php echo $mensagem; ?></p>
76
+
77
+ <p>
78
+ <img src="<?php echo $this->getSkinUrl('mercadopago/images/loading.gif') ;?>" alt="loading" />
79
+ Em <span id="segundos_redirect">10</span> segundos <a href="<?php echo $page_redirec; ?>">você será redirecionado para tela de finalização.</a>
80
+ </p>
81
+
82
+ <?php elseif($status == "rejected"): ?>
83
+
84
+ <h4>O seu pagamento não foi processado.</h4>
85
+ <p class="status"><?php echo $mensagem; ?></p>
86
+ <p><a class="voltar" href="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true); ?>sales/order/reorder/order_id/<?php echo $order->getId(); ?> ">Voltar para o carrinho</a></p>
87
+
88
+ <?php elseif(!$status): ?>
89
+
90
+ <h4>O seu pagamento não foi processado.</h4>
91
+ <p><a class="voltar" href="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true); ?>">Voltar</a></p>
92
+
93
+ <?php endif; ?>
94
+
95
+ <?php endif; ?>
96
+
97
+ </div>
98
+
99
+
100
+
101
+ <div id="logo_mp">
102
+ <img src="https://secure.mlstatic.com/components/resources/mp/desktop/css/assets/desktop-logo-mercadopago.png" />
103
+ </div>
app/design/frontend/base/default/template/mercadopago/transparent_boleto/form.phtml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <fieldset class="form-list">
3
+ <link rel="stylesheet" href="<?php echo $this->getSkinUrl('mercadopago/css/style.css'); ?>" />
4
+
5
+ <?php $_code = $this->getMethodCode(); ?>
6
+ <?php $_country = $this->getMethodCountry(); ?>
7
+
8
+ <?php if($this->getMethod()->getConfigData('banner_checkout') != ""): ?>
9
+ <img src="<?php echo $this->getMethod()->getConfigData('banner_checkout'); ?>" class="banner_checkout_mp"/>
10
+ <?php endif;?>
11
+
12
+ <div id="mp-form-boleto">
13
+ <ul class="form-list form-mercadopago" id="payment_form_<?php echo $_code ?>" style="display:none;" >
14
+ <li style="display:none;">
15
+ <input type="hidden" name="payment[payment_method_boleto]" type="text" value="bolbradesco"/>
16
+ </li>
17
+ </ul>
18
+ </div>
19
+
20
+ </fieldset>
app/design/frontend/base/default/template/mercadopago/transparent_boleto/info.phtml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><strong><?php echo $this->getMethod()->getTitle() ?></strong></p>
2
+
3
+ <?php if(Mage::app()->getRequest()->getRouteName()=="sales"): ?>
4
+
5
+
6
+ <?php if($this->getOrder()->getAdditionalInformation('payment_id') != ""): ?>
7
+ <p><?php echo $this->__('Numero de Pagamento (MercadoPago): %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_id'))); ?></p>
8
+ <?php endif; ?>
9
+
10
+ <?php if($this->getOrder()->getAdditionalInformation('status') != ""): ?>
11
+ <p>
12
+ <?php echo $this->__('Status de Pagamento: %s (%s)', $this->htmlEscape($this->getOrder()->getAdditionalInformation('status')), $this->htmlEscape($this->getOrder()->getAdditionalInformation('status_detail'))); ?>
13
+ </p>
14
+ <?php endif; ?>
15
+
16
+ <p>Gere o boleto e pague-o onde quiser.</p>
17
+ <p>Será aprovado até 2 dias úteis.</p>
18
+ <a href="<?php echo urldecode($this->htmlEscape($this->getOrder()->getAdditionalInformation('activation_uri'))); ?>" target="_blank">Gerar Boleto</a>
19
+
20
+ <?php endif;?>
21
+
22
+
23
+
app/design/frontend/base/default/template/mercadopago/transparent_ticket/form.phtml ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <fieldset class="form-list">
3
+ <link rel="stylesheet" href="<?php echo $this->getSkinUrl('mercadopago/css/style.css'); ?>" />
4
+ <?php $_code = $this->getMethodCode(); ?>
5
+ <?php $_country = $this->getMethodCountry(); ?>
6
+
7
+ <?php if($this->getMethod()->getConfigData('banner_checkout') != ""): ?>
8
+ <img src="<?php echo $this->getMethod()->getConfigData('banner_checkout'); ?>" class="banner_checkout_mp"/>
9
+ <?php endif;?>
10
+
11
+ <div id="mp-form-boleto">
12
+ <ul class="form-list form-mercadopago" id="payment_form_<?php echo $_code ?>" style="display:none;" >
13
+ <li>
14
+
15
+ <?php
16
+ $optionsTicket = $this->getTicketsOptions();
17
+ if(count($optionsTicket) == 1){ ?>
18
+ <input type="hidden" name="payment[payment_method_boleto]" type="text" value="<?php echo $optionsTicket[0]['id']; ?>" id="payment_method_boleto" />
19
+ <?php } else { ?>
20
+
21
+ <?php
22
+ foreach($optionsTicket as $ticket){ ?>
23
+ <input type="radio" name="payment[payment_method_boleto]" class="optionsTicketMp" value="<?php echo $ticket['id']; ?>"> <img src="<?php echo $ticket['secure_thumbnail']; ?>"> (<?php echo $ticket['name']; ?>) <br/>
24
+ <?php } ?>
25
+ <?php } ?>
26
+ </li>
27
+
28
+ </ul>
29
+ </div>
30
+
31
+ </fieldset>
app/design/frontend/base/default/template/mercadopago/transparent_ticket/info.phtml ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><strong><?php echo $this->getMethod()->getTitle() ?></strong></p>
2
+
3
+ <?php if(Mage::app()->getRequest()->getRouteName()=="sales"): ?>
4
+
5
+
6
+ <?php if($this->getOrder()->getAdditionalInformation('payment_id') != ""): ?>
7
+ <p><?php echo $this->__('Payment Id (MercadoPago): %s', $this->htmlEscape($this->getOrder()->getAdditionalInformation('payment_id'))); ?></p>
8
+ <?php endif; ?>
9
+
10
+ <?php if($this->getOrder()->getAdditionalInformation('status') != ""): ?>
11
+ <p>
12
+ <?php echo $this->__('Payment Status: %s (%s)', $this->htmlEscape($this->getOrder()->getAdditionalInformation('status')), $this->htmlEscape($this->getOrder()->getAdditionalInformation('status_detail'))); ?>
13
+ </p>
14
+ <?php endif; ?>
15
+
16
+ <p>
17
+ <?php echo $this->__('Generate the ticket and pay it wherever you want.'); ?>
18
+ </p>
19
+ <p>
20
+ <?php echo $this->__('Will be approved within 2 business days.'); ?>
21
+ </p>
22
+ <a href="<?php echo urldecode($this->htmlEscape($this->getOrder()->getAdditionalInformation('activation_uri'))); ?>" target="_blank">
23
+ <?php echo $this->__('Generate Ticket'); ?>
24
+ </a>
25
+
26
+ <?php endif;?>
27
+
app/etc/modules/MercadoPago_Standard.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <MercadoPago_Standard>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </MercadoPago_Standard>
8
+ </modules>
9
+ </config>
app/etc/modules/MercadoPago_Transparent.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <MercadoPago_Transparent>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </MercadoPago_Transparent>
8
+ </modules>
9
+ </config>
app/etc/modules/MercadoPago_TransparentBoleto.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <MercadoPago_TransparentBoleto>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </MercadoPago_TransparentBoleto>
8
+ </modules>
9
+ </config>
app/etc/modules/MercadoPago_TransparentTicket.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <MercadoPago_TransparentTicket>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </MercadoPago_TransparentTicket>
8
+ </modules>
9
+ </config>
app/locale/es_AR/mercadopago.csv ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Enabled","Activo"
2
+
3
+ "MercadoPago - Configuration", "MercadoPago - Configuración"
4
+ "Credit Card - MercadoPago","Tarjetas de crédito - MercadoPago"
5
+
6
+ "MercadoPago Transparent - Credit Card","MercadoPago Transparente - Tarjeta de Crédito"
7
+ "Payment Title","Título"
8
+ "Category of your store","Categoria de la tienda"
9
+ "Choose the status of approved orders","Elija el estado de los pedidos para pagos Aprobados"
10
+ "Choose the status of refunded orders","Elija el estado de los pedidos para pagos Devueltos"
11
+ "Choose the status when payment is pending","Elija el estado de los pedidos para pagos Pendientes"
12
+ "Choose the status when client open a mediation","Elija el estado de los pedidos para pagos en Disputa"
13
+ "Choose the status when payment was reject","Elija el estado de los pedidos para pagos Rechazados"
14
+ "Choose the status when payment was canceled","Elija el estado de los pedidos para pagos Cancelados"
15
+ "Checkout Position","Posición en el Checkout"
16
+ "To manage the status available go to System > Order Statuses","Para gerenciar los estados disponibles vaya a 'System > Order Statuses'"
17
+
18
+ "MercadoPago Transparent - Ticket","MercadoPago Transparente - Tickets de pago"
19
+
20
+ "MercadoPago Standard - Credit Card, Ticket and Account Money","MercadoPago Standard - Tarjetas, Tickets y Dinero en Cuenta"
21
+ "Country","País"
22
+ "Type Checkout","Tipo de Checkout"
23
+ "Auto Redirect","Auto-Redireccionar"
24
+ "Exclude Payment Methods","Excluir Medios de Pago"
25
+ "Maximum number of accepted installments","Numero maximo de cuotas"
26
+ "Width Checkout Iframe","Ancho de la zona del Checkout (Iframe)"
27
+ "Height Checkout Iframe","Alto de la zona del Checkout (Iframe)"
28
+ "Auto-redirect the buyer when finishing the payment.","Auto-Redireccionar al comprador al finalizar el pago."
29
+ "Select payment methods not accepted","Seleccione los medios de pago no aceptados"
30
+ "For the operation of the Checkout Transparent Ticket is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'",""Para el funcionamento del Checkout Transparente - Tickets de pago, es necesario configurar las Credenciales 'CLIENT_ID' y 'CLIENT_SECRET' en 'MercadoPago - Configuración'""
31
+ "For the operation of the Checkout Standard is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'","Para el funcionamento del Checkout Standard, es necesario configurar las Credenciales 'CLIENT_ID' y 'CLIENT_SECRET' en 'MercadoPago - Configuración'"
32
+
33
+ "Card Number","Número de Tarjeta"
34
+ "Month","Mes"
35
+ "Year","Año"
36
+ "Card Holder Name","Titular de la Tarjeta"
37
+ "Document Number","Número de Documento"
38
+ "CVV","Código de Seguridad"
39
+ "Installments","Cuotas"
40
+ "Banks","Bancos"
41
+
42
+ "Enter the card number","Digite el número de tarjeta"
43
+ "Validating Data","Validando datos"
44
+ "An error has occurred. Please refresh the page.","Ocurrio un error. Por favor, actualice la página."
45
+ "Card number is invalid.","Número de Tarjeta inválido."
46
+ "CVV is invalid.","Código de Seguridad inválido."
47
+ "Card Holder Name is invalid.","Nombre de titular de tarjeta inválido."
48
+ "Document Number is invalid.","Número de Documento inválido."
49
+ "Year is invalid.","Año inválido."
50
+ "Month is invalid.","Mes inválido."
51
+ "Please validate your data.","Por favor, valide los datos"
52
+
53
+ "Card Number: %s","Número de Tarjeta: %s"
54
+ "Card Holder Name: %s","Titular de la Tarjeta: %s"
55
+ "Payment Method: %s","Medio de pago: %s"
56
+ "Expiration Date: %s","Fecha de Expiración: %s"
57
+ "Installments: %s","Cuotas: %s"
58
+ "Statement Descriptor: %s","Identificación en la Factura de la Tarjeta de Crédito: %s"
59
+ "Payment Id (MercadoPago): %s","Número de Pago (MercadoPago): %s"
60
+ "Payment Status: %s (%s)","Estado del Pago: %s (%s)"
61
+
62
+ "Click on the link to generate the ticket","Clique en el link para mostrar el ticket de pago"
63
+ "Generate Ticket","Generar ticket de pago"
64
+
65
+ "Payment Method","Medio de pago"
66
+
67
+ "Generate the ticket and pay it wherever you want.","Genere el ticket de pago y pague"
68
+ "Will be approved within 2 business days.","Será aprobado en hasta 2 días hábiles"
69
+
70
+ "Done, your payment was accredited!","¡Listo, se acreditó tu pago!"
71
+ "We are processing the payment.","Estamos procesando el pago."
72
+ "In less than 2 business days we will tell you by e-mail if it is accredited or if we need more information.","Estamos procesando el pago. En menos de 2 días hábiles te avisaremos por e-mail si se acreditó o si necesitamos más información."
73
+ "In less than an hour we will send you by e-mail the result.","Estamos procesando el pago. En menos de una hora te avisaremos por e-mail el resultado."
74
+
75
+ "Check the card number.","Revisa el número de la tarjeta."
76
+ "Check the expiration date.","Revisa la fecha de vencimiento."
77
+ "Check the data.","Revisa los datos."
78
+ "Check the security code.","Revisa el código de seguridad."
79
+ "We could not process your payment.","No pudimos procesar tu pago."
80
+
81
+ "You must authorize to %s the payment of $ %s to MercadoPago.","Debes llamar y autorizar ante %s el pago de $ %s a MercadoPago"
82
+ "Call %s to activate your card.<br/>The phone is on the back of your card.","Llama a %s para que active tu tarjeta.<br/>El teléfono está al dorso de tu tarjeta."
83
+ "We could not process your payment.","No pudimos procesar tu pago."
84
+ "You already made a payment by that value.<br/>If you need to repay, use another card or other payment method.","Ya hiciste un pago por ese valor.<br/>Si necesitas volver a pagar usa otra tarjeta u otro medio de pago."
85
+ "Your payment was rejected.<br/>Choose another payment method, we recommend cash methods.","Tu pago fue rechazado.<br/>Elige otro de los medios de pago, te recomendamos con medios de pago en efectivo."
86
+ "Your %s do not have sufficient funds.","Tu %s no tiene fondos suficientes."
87
+ "%s does not process payments in %s installments.","%s no procesa pagos en %s cuotas."
88
+ "You have got to the limit of allowed attempts.<br/>Choose another card or another payment method.","Llegaste al límite de intentos permitidos.<br/>Elige otra tarjeta u otro medio de pago."
89
+ "%s did not process the payment.","%s no procesó el pago."
90
+
91
+ "You can not make payments to users in other countries.","No puedes realizar pagos a usuarios de otros países."
92
+ "Payment Method selected does not process payments in installments selected. Choose another card or another payment method.","El medio de pago seleccionado no procesa pagos en la cuota seleccionada. Elige otra tarjeta u otro medio de pago."
93
+ "We could not process your payment. Error code: 126.","No pudimos procesar tu pago. Código de error: 126."
94
+ "Payment Method selected does not process payments for the selected amount. Choose another card or another payment method.","El medio de pago seleccionado no procesa pagos del monto seleccionado. Elige otro medio de pago."
95
+ "We could not process your payment. Error code: 145.","No pudimos procesar tu pago. Código de error: 145"
96
+ "You can not make payments. Error code: 150.","No puedes realizar pagos. Código de error: 150."
97
+ "You can not make payments.","No puedes realizar pagos."
98
+ "We could not process your payment. Error code: 160.","No pudimos procesar tu pago. Código de error: 160."
99
+ "Payment Method selected is not available at this time. Choose another card or another payment method.","El medio de pago seleccionado no está disponible en este momento. Elige otra tarjeta u otro medio de pago."
100
+ "You made a similar payment moments ago. Try again in a few minutes.","Realizaste un pago similar hace instantes. Intenta nuevamente en unos minutos."
101
+ "We could not process your payment. %s","No pudimos procesar tu pago. %s"
102
+
103
+ "Verify the form data or wait until the validation of the payment data","Verifique los datos del formulario o aguarde la validación de los datos del pago."
104
+
105
+ "Automatic notification of the MercadoPago: The payment was approved.","Notificación automática de MercadoPago: El pago fué aprobado."
106
+ "Automatic notification of the MercadoPago: The payment was refunded.","Notificación automática de MercadoPago: El pago fué devuelto."
107
+ "Automatic notification of the MercadoPago: The payment is being processed.","Notificación automática de MercadoPago: El pago esta siendo procesado."
108
+ "Automatic notification of the MercadoPago: The payment is being processed. Will be approved within 2 business days.","Notificación automática de MercadoPago: El pago esta siendo procesado. Será aprobado en hasta 2 días hábiles."
109
+ "Automatic notification of the MercadoPago: The payment is in the process of Dispute, check the graphic account of the MercadoPago for more information.","Notificación automática de MercadoPago: El pago está en un proceso de disputa, chequea tu cuenta de MercadoPago para mayor información."
110
+ "Automatic notification of the MercadoPago: The payment was cancelled.","Notificación automática de MercadoPago: El pago fué cancelado."
111
+ "Automatic notification of the MercadoPago: The payment was rejected.","Notificación automática de MercadoPago: El pago fué rechazado."
112
+ "<br/> Payment id: %s","<br/> Número de Pago: %s"
113
+ "<br/> Status: %s","<br/> Estado: %s"
114
+ "<br/> Status Detail: %s","<br/> Detalle del Estado: %s"
app/locale/es_CO/mercadopago.csv ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Enabled","Activo"
2
+
3
+ "MercadoPago - Configuration", "MercadoPago - Configuración"
4
+ "Credit Card - MercadoPago","Tarjetas de crédito - MercadoPago"
5
+
6
+ "MercadoPago Transparent - Credit Card","MercadoPago Transparente - Tarjeta de Crédito"
7
+ "Payment Title","Título"
8
+ "Category of your store","Categoria de la tienda"
9
+ "Choose the status of approved orders","Elija el estado de los pedidos para pagos Aprobados"
10
+ "Choose the status of refunded orders","Elija el estado de los pedidos para pagos Devueltos"
11
+ "Choose the status when payment is pending","Elija el estado de los pedidos para pagos Pendientes"
12
+ "Choose the status when client open a mediation","Elija el estado de los pedidos para pagos en Disputa"
13
+ "Choose the status when payment was reject","Elija el estado de los pedidos para pagos Rechazados"
14
+ "Choose the status when payment was canceled","Elija el estado de los pedidos para pagos Cancelados"
15
+ "Checkout Position","Posición en el Checkout"
16
+ "To manage the status available go to System > Order Statuses","Para gerenciar los estados disponibles vaya a 'System > Order Statuses'"
17
+
18
+ "MercadoPago Transparent - Ticket","MercadoPago Transparente - Tickets de pago"
19
+
20
+ "MercadoPago Standard - Credit Card, Ticket and Account Money","MercadoPago Standard - Tarjetas, Tickets y Dinero en Cuenta"
21
+ "Country","País"
22
+ "Type Checkout","Tipo de Checkout"
23
+ "Auto Redirect","Auto-Redireccionar"
24
+ "Exclude Payment Methods","Excluir Medios de Pago"
25
+ "Maximum number of accepted installments","Numero maximo de cuotas"
26
+ "Width Checkout Iframe","Ancho de la zona del Checkout (Iframe)"
27
+ "Height Checkout Iframe","Alto de la zona del Checkout (Iframe)"
28
+ "Auto-redirect the buyer when finishing the payment.","Auto-Redireccionar al comprador al finalizar el pago."
29
+ "Select payment methods not accepted","Seleccione los medios de pago no aceptados"
30
+ "For the operation of the Checkout Transparent Ticket is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'",""Para el funcionamento del Checkout Transparente - Tickets de pago, es necesario configurar las Credenciales 'CLIENT_ID' y 'CLIENT_SECRET' en 'MercadoPago - Configuración'""
31
+ "For the operation of the Checkout Standard is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'","Para el funcionamento del Checkout Standard, es necesario configurar las Credenciales 'CLIENT_ID' y 'CLIENT_SECRET' en 'MercadoPago - Configuración'"
32
+
33
+ "Card Number","Número de Tarjeta"
34
+ "Month","Mes"
35
+ "Year","Año"
36
+ "Card Holder Name","Titular de la Tarjeta"
37
+ "Document Number","Número de Documento"
38
+ "CVV","Código de Seguridad"
39
+ "Installments","Cuotas"
40
+ "Banks","Bancos"
41
+
42
+ "Enter the card number","Digite el número de tarjeta"
43
+ "Validating Data","Validando datos"
44
+ "An error has occurred. Please refresh the page.","Ocurrio un error. Por favor, actualice la página."
45
+ "Card Number is invalid.","Número de Tarjeta inválido."
46
+ "CVV is invalid.","Código de Seguridad inválido."
47
+ "Card Holder Name is invalid.","Nombre de titular de tarjeta inválido."
48
+ "Document Number is invalid.","Número de Documento inválido."
49
+ "Year is invalid.","Año inválido."
50
+ "Month is invalid.","Mes inválido."
51
+ "Please validate your data.","Por favor, valide los datos"
52
+
53
+ "Card Number: %s","Número de Tarjeta: %s"
54
+ "Card Holder Name: %s","Titular de la Tarjeta: %s"
55
+ "Payment Method: %s","Medio de pago: %s"
56
+ "Expiration Date: %s","Fecha de Expiración: %s"
57
+ "Installments: %s","Cuotas: %s"
58
+ "Statement Descriptor: %s","Identificación en la Factura de la Tarjeta de Crédito: %s"
59
+ "Payment Id (MercadoPago): %s","Número de Pago (MercadoPago): %s"
60
+ "Payment Status: %s (%s)","Estado del Pago: %s (%s)"
61
+
62
+ "Click on the link to generate the ticket","Clique en el link para mostrar el ticket de pago"
63
+ "Generate Ticket","Generar ticket de pago"
64
+
65
+ "Payment Method","Medio de pago"
66
+
67
+ "Generate the ticket and pay it wherever you want.","Genere el ticket de pago y pague"
68
+ "Will be approved within 2 business days.","Será aprobado en hasta 2 días hábiles"
69
+
70
+ "Done, your payment was accredited!","¡Listo, se acreditó tu pago!"
71
+ "We are processing the payment.","Estamos procesando el pago."
72
+ "In less than 2 business days we will tell you by e-mail if it is accredited or if we need more information.","Estamos procesando el pago. En menos de 2 días hábiles te avisaremos por e-mail si se acreditó o si necesitamos más información."
73
+ "In less than an hour we will send you by e-mail the result.","Estamos procesando el pago. En menos de una hora te avisaremos por e-mail el resultado."
74
+
75
+ "Check the card number.","Revisa el número de la tarjeta."
76
+ "Check the expiration date.","Revisa la fecha de vencimiento."
77
+ "Check the data.","Revisa los datos."
78
+ "Check the security code.","Revisa el código de seguridad."
79
+ "We could not process your payment.","No pudimos procesar tu pago."
80
+
81
+ "You must authorize to %s the payment of $ %s to MercadoPago.","Debes llamar y autorizar ante %s el pago de $ %s a MercadoPago"
82
+ "Call %s to activate your card.<br/>The phone is on the back of your card.","Llama a %s para que active tu tarjeta.<br/>El teléfono está al dorso de tu tarjeta."
83
+ "We could not process your payment.","No pudimos procesar tu pago."
84
+ "You already made a payment by that value.<br/>If you need to repay, use another card or other payment method.","Ya hiciste un pago por ese valor.<br/>Si necesitas volver a pagar usa otra tarjeta u otro medio de pago."
85
+ "Your payment was rejected.<br/>Choose another payment method, we recommend cash methods.","Tu pago fue rechazado.<br/>Elige otro de los medios de pago, te recomendamos con medios de pago en efectivo."
86
+ "Your %s do not have sufficient funds.","Tu %s no tiene fondos suficientes."
87
+ "%s does not process payments in %s installments.","%s no procesa pagos en %s cuotas."
88
+ "You have got to the limit of allowed attempts.<br/>Choose another card or another payment method.","Llegaste al límite de intentos permitidos.<br/>Elige otra tarjeta u otro medio de pago."
89
+ "%s did not process the payment.","%s no procesó el pago."
90
+
91
+ "You can not make payments to users in other countries.","No puedes realizar pagos a usuarios de otros países."
92
+ "Payment Method selected does not process payments in installments selected. Choose another card or another payment method.","El medio de pago seleccionado no procesa pagos en la cuota seleccionada. Elige otra tarjeta u otro medio de pago."
93
+ "We could not process your payment. Error code: 126.","No pudimos procesar tu pago. Código de error: 126."
94
+ "Payment Method selected does not process payments for the selected amount. Choose another card or another payment method.","El medio de pago seleccionado no procesa pagos del monto seleccionado. Elige otro medio de pago."
95
+ "We could not process your payment. Error code: 145.","No pudimos procesar tu pago. Código de error: 145"
96
+ "You can not make payments. Error code: 150.","No puedes realizar pagos. Código de error: 150."
97
+ "You can not make payments.","No puedes realizar pagos."
98
+ "We could not process your payment. Error code: 160.","No pudimos procesar tu pago. Código de error: 160."
99
+ "Payment Method selected is not available at this time. Choose another card or another payment method.","El medio de pago seleccionado no está disponible en este momento. Elige otra tarjeta u otro medio de pago."
100
+ "You made a similar payment moments ago. Try again in a few minutes.","Realizaste un pago similar hace instantes. Intenta nuevamente en unos minutos."
101
+ "We could not process your payment. %s","No pudimos procesar tu pago. %s"
102
+
103
+ "Verify the form data or wait until the validation of the payment data","Verifique los datos del formulario o aguarde la validación de los datos del pago."
104
+
105
+ "Automatic notification of the MercadoPago: The payment was approved.","Notificación automática de MercadoPago: El pago fué aprobado."
106
+ "Automatic notification of the MercadoPago: The payment was refunded.","Notificación automática de MercadoPago: El pago fué devuelto."
107
+ "Automatic notification of the MercadoPago: The payment is being processed.","Notificación automática de MercadoPago: El pago esta siendo procesado."
108
+ "Automatic notification of the MercadoPago: The payment is being processed. Will be approved within 2 business days.","Notificación automática de MercadoPago: El pago esta siendo procesado. Será aprobado en hasta 2 días hábiles."
109
+ "Automatic notification of the MercadoPago: The payment is in the process of Dispute, check the graphic account of the MercadoPago for more information.","Notificación automática de MercadoPago: El pago está en un proceso de disputa, chequea tu cuenta de MercadoPago para mayor información."
110
+ "Automatic notification of the MercadoPago: The payment was cancelled.","Notificación automática de MercadoPago: El pago fué cancelado."
111
+ "Automatic notification of the MercadoPago: The payment was rejected.","Notificación automática de MercadoPago: El pago fué rechazado."
112
+ "<br/> Payment id: %s","<br/> Número de Pago: %s"
113
+ "<br/> Status: %s","<br/> Estado: %s"
114
+ "<br/> Status Detail: %s","<br/> Detalle del Estado: %s"
115
+ "Order # %s in store %s","Orden # %s realizada en %s"
116
+
117
+ "$", "$"
118
+ "Choice", "Elige"
119
+ "Default issuer", "Cualquier otro banco"
app/locale/es_ES/mercadopago.csv ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Escolha a forma de entrega","Elige un método de envío"
2
+ "Desculpe, não há formas de entrega disponível nesse momento","Disculpe, no hay método de envío disponible"
3
+ "É necessário escolher uma opção de envio","Es necesario elegir el método de envío"
4
+ "Insira seu cep","Ingrese su código postal"
5
+ "Continuar","Continuar"
6
+ "Seu pedido está sendo gerado. Por favor aguarde","Por favor, espere"
7
+ "Por favor aguarde","Por favor, espere"
8
+ "Calculando valor do frete. Por favor aguarde","Por favor, espere"
9
+ "Fechar","Cerrar"
10
+ "Não há método de entrega disponível","Disculpe, no hay método de envío disponible"
11
+ "Alterar o Cep","Cambiar código postal"
12
+ "Iniciando o Checkout Expresso do MercadoPago","Empezando con MercadoPago Express Checkout"
13
+ "Enter your shipping information for the order #","Ingrese la información del envío para el pedido #"
14
+ "Your order is now been processing","Su pedido está procesando"
15
+ "Country where your account was created","Pais que su conta no MercadoPago fue creada"
16
+ "Enabled","Activo"
17
+ "Title","Nombre"
18
+ "Chose how the checkout should be displayed","Elije la forma (en el modo convencional) de Checkout"
19
+ "Show ShopCart Express Checkout button","Mostrar el botón de Express Checkout en la cesta de compra"
20
+ "Show ShopCart Express Checkout Sidebar button","Mostrar el botón ExpressCheckout em la cesta lateral"
21
+ "Show Express Checkout Product button","Mostrar el botón ExpressCheckout en cada produto"
22
+ "Postal Code Request on Express Payment on Express Checkout","Solicite el código postal para calcular de envío"
23
+ "Allow to change postal code after the order is paid on Express Payment on Express Checkout","Permitir al cliente cambiar el código postal después de que el pago ya efectuado por el Checkout Express"
24
+ "Auto Create Invoice","Generar facturas automáticamente"
25
+ "Currency to be paid","Elija la moneda"
26
+ "URL to successful payment","URL de redireccionamiento si el pago ya ha sido aprobado"
27
+ "URL for pendind payment","URL de redireccionamiento si el pago es pendiente"
28
+ "Payment Methods what should be excluded","Seleccione los métodos de pago que MercadoPago ofrece que usted NO desea aceptar"
29
+ "Choose the maximum number of installments accepted","Elija el número máximo de cuatas que deseja parcelar"
30
+ "Choose the status of new orders","Elija el estado para nuevos pedidos"
31
+ "Choose the status of approved orders","Elija el estado si el pago es aprobado"
32
+ "Choose the status of refunded orders","Elija el estado si el pago es regresó"
33
+ "Choose the status when payment is pending","Elija el estado si el pago es pendiente"
34
+ "Choose the status when client open a mediation","Elija el estado si el pago es en disputa"
35
+ "Choose the status when payment was reject","Elija el estado si el pago es rechazado"
36
+ "Choose the status when payment was canceled","Elija el estado si el pago es cancelado"
37
+ "Debug Mode","Modo de depuración"
38
+ "Thank you for your purchase. Fill the address information for your order. ","Gracias por su compra. Ingrese la informacion de direccíon de su pedido. "
39
+ "Complete your order shipping information","Necesitamos de mas informaciones del su pedido"
40
+ "Thank you for your purchase. ","Gracias por su compra"
41
+ "To complete your order, if is not done yet, fill the address information at the address below.""Para completar su pedido, llenar la información de su dirección en la siguiente dirección."
app/locale/es_MX/mercadopago.csv ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Enabled","Activo"
2
+
3
+ "MercadoPago - Configuration", "MercadoPago - Configuración"
4
+ "Credit Card - MercadoPago","Tarjetas de crédito - MercadoPago"
5
+
6
+ "MercadoPago Transparent - Credit Card","MercadoPago Transparente - Tarjeta de Crédito"
7
+ "Payment Title","Título"
8
+ "Category of your store","Categoria de la tienda"
9
+ "Choose the status of approved orders","Elija el estado de los pedidos para pagos Aprobados"
10
+ "Choose the status of refunded orders","Elija el estado de los pedidos para pagos Devueltos"
11
+ "Choose the status when payment is pending","Elija el estado de los pedidos para pagos Pendientes"
12
+ "Choose the status when client open a mediation","Elija el estado de los pedidos para pagos en Disputa"
13
+ "Choose the status when payment was reject","Elija el estado de los pedidos para pagos Rechazados"
14
+ "Choose the status when payment was canceled","Elija el estado de los pedidos para pagos Cancelados"
15
+ "Checkout Position","Posición en el Checkout"
16
+ "To manage the status available go to System > Order Statuses","Para gerenciar los estados disponibles vaya a 'System > Order Statuses'"
17
+
18
+ "MercadoPago Transparent - Ticket","MercadoPago Transparente - Tickets de pago"
19
+
20
+ "MercadoPago Standard - Credit Card, Ticket and Account Money","MercadoPago Standard - Tarjetas, Tickets y Dinero en Cuenta"
21
+ "Country","País"
22
+ "Type Checkout","Tipo de Checkout"
23
+ "Auto Redirect","Auto-Redireccionar"
24
+ "Exclude Payment Methods","Excluir Medios de Pago"
25
+ "Maximum number of accepted installments","Numero maximo de cuotas"
26
+ "Width Checkout Iframe","Ancho de la zona del Checkout (Iframe)"
27
+ "Height Checkout Iframe","Alto de la zona del Checkout (Iframe)"
28
+ "Auto-redirect the buyer when finishing the payment.","Auto-Redireccionar al comprador al finalizar el pago."
29
+ "Select payment methods not accepted","Seleccione los medios de pago no aceptados"
30
+ "For the operation of the Checkout Transparent Ticket is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'",""Para el funcionamento del Checkout Transparente - Tickets de pago, es necesario configurar las Credenciales 'CLIENT_ID' y 'CLIENT_SECRET' en 'MercadoPago - Configuración'""
31
+ "For the operation of the Checkout Standard is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'","Para el funcionamento del Checkout Standard, es necesario configurar las Credenciales 'CLIENT_ID' y 'CLIENT_SECRET' en 'MercadoPago - Configuración'"
32
+
33
+ "Payment Method", "Medio de pago"
34
+ "Card Number","Número de Tarjeta"
35
+ "Month","Mes"
36
+ "Year","Año"
37
+ "Card Holder Name","Titular de la Tarjeta"
38
+ "Document Number","Número de Documento"
39
+ "CVV","Código de Seguridad"
40
+ "Installments","Cuotas"
41
+ "Banks","Bancos"
42
+
43
+ "Enter the card number","Digite el número de tarjeta"
44
+ "Validating Data","Validando datos"
45
+ "An error has occurred. Please refresh the page.","Ocurrio un error. Por favor, actualice la página."
46
+ "Card Number is invalid.","Número de Tarjeta inválido."
47
+ "CVV is invalid.","Código de Seguridad inválido."
48
+ "Card Holder Name is invalid.","Nombre de titular de tarjeta inválido."
49
+ "Document Number is invalid.","Número de Documento inválido."
50
+ "Year is invalid.","Año inválido."
51
+ "Month is invalid.","Mes inválido."
52
+ "Please validate your data.","Por favor, valide los datos"
53
+
54
+ "Card Number: %s","Número de Tarjeta: %s"
55
+ "Card Holder Name: %s","Titular de la Tarjeta: %s"
56
+ "Payment Method: %s","Medio de pago: %s"
57
+ "Expiration Date: %s","Fecha de Expiración: %s"
58
+ "Installments: %s","Cuotas: %s"
59
+ "Statement Descriptor: %s","Identificación en la Factura de la Tarjeta de Crédito: %s"
60
+ "Payment Id (MercadoPago): %s","Número de Pago (MercadoPago): %s"
61
+ "Payment Status: %s (%s)","Estado del Pago: %s (%s)"
62
+
63
+ "Click on the link to generate the ticket","Clique en el link para mostrar el ticket de pago"
64
+ "Generate Ticket","Generar ticket de pago"
65
+
66
+ "Payment Method","Medio de pago"
67
+
68
+ "Generate the ticket and pay it wherever you want.","Genere el ticket de pago y pague"
69
+ "Will be approved within 2 business days.","Será aprobado en hasta 2 días hábiles"
70
+
71
+ "Done, your payment was accredited!","¡Listo, se acreditó tu pago!"
72
+ "We are processing the payment.","Estamos procesando el pago."
73
+ "In less than 2 business days we will tell you by e-mail if it is accredited or if we need more information.","Estamos procesando el pago. En menos de 2 días hábiles te avisaremos por e-mail si se acreditó o si necesitamos más información."
74
+ "In less than an hour we will send you by e-mail the result.","Estamos procesando el pago. En menos de una hora te avisaremos por e-mail el resultado."
75
+
76
+ "Check the card number.","Revisa el número de la tarjeta."
77
+ "Check the expiration date.","Revisa la fecha de vencimiento."
78
+ "Check the data.","Revisa los datos."
79
+ "Check the security code.","Revisa el código de seguridad."
80
+ "We could not process your payment.","No pudimos procesar tu pago."
81
+
82
+ "You must authorize to %s the payment of $ %s to MercadoPago.","Debes llamar y autorizar ante %s el pago de $ %s a MercadoPago"
83
+ "Call %s to activate your card.<br/>The phone is on the back of your card.","Llama a %s para que active tu tarjeta.<br/>El teléfono está al dorso de tu tarjeta."
84
+ "We could not process your payment.","No pudimos procesar tu pago."
85
+ "You already made a payment by that value.<br/>If you need to repay, use another card or other payment method.","Ya hiciste un pago por ese valor.<br/>Si necesitas volver a pagar usa otra tarjeta u otro medio de pago."
86
+ "Your payment was rejected.<br/>Choose another payment method, we recommend cash methods.","Tu pago fue rechazado.<br/>Elige otro de los medios de pago, te recomendamos con medios de pago en efectivo."
87
+ "Your %s do not have sufficient funds.","Tu %s no tiene fondos suficientes."
88
+ "%s does not process payments in %s installments.","%s no procesa pagos en %s cuotas."
89
+ "You have got to the limit of allowed attempts.<br/>Choose another card or another payment method.","Llegaste al límite de intentos permitidos.<br/>Elige otra tarjeta u otro medio de pago."
90
+ "%s did not process the payment.","%s no procesó el pago."
91
+
92
+ "You can not make payments to users in other countries.","No puedes realizar pagos a usuarios de otros países."
93
+ "Payment Method selected does not process payments in installments selected. Choose another card or another payment method.","El medio de pago seleccionado no procesa pagos en la cuota seleccionada. Elige otra tarjeta u otro medio de pago."
94
+ "We could not process your payment. Error code: 126.","No pudimos procesar tu pago. Código de error: 126."
95
+ "Payment Method selected does not process payments for the selected amount. Choose another card or another payment method.","El medio de pago seleccionado no procesa pagos del monto seleccionado. Elige otro medio de pago."
96
+ "We could not process your payment. Error code: 145.","No pudimos procesar tu pago. Código de error: 145"
97
+ "You can not make payments. Error code: 150.","No puedes realizar pagos. Código de error: 150."
98
+ "You can not make payments.","No puedes realizar pagos."
99
+ "We could not process your payment. Error code: 160.","No pudimos procesar tu pago. Código de error: 160."
100
+ "Payment Method selected is not available at this time. Choose another card or another payment method.","El medio de pago seleccionado no está disponible en este momento. Elige otra tarjeta u otro medio de pago."
101
+ "You made a similar payment moments ago. Try again in a few minutes.","Realizaste un pago similar hace instantes. Intenta nuevamente en unos minutos."
102
+ "We could not process your payment. %s","No pudimos procesar tu pago. %s"
103
+
104
+ "Verify the form data or wait until the validation of the payment data","Verifique los datos del formulario o aguarde la validación de los datos del pago."
105
+
106
+ "Automatic notification of the MercadoPago: The payment was approved.","Notificación automática de MercadoPago: El pago fué aprobado."
107
+ "Automatic notification of the MercadoPago: The payment was refunded.","Notificación automática de MercadoPago: El pago fué devuelto."
108
+ "Automatic notification of the MercadoPago: The payment is being processed.","Notificación automática de MercadoPago: El pago esta siendo procesado."
109
+ "Automatic notification of the MercadoPago: The payment is being processed. Will be approved within 2 business days.","Notificación automática de MercadoPago: El pago esta siendo procesado. Será aprobado en hasta 2 días hábiles."
110
+ "Automatic notification of the MercadoPago: The payment is in the process of Dispute, check the graphic account of the MercadoPago for more information.","Notificación automática de MercadoPago: El pago está en un proceso de disputa, chequea tu cuenta de MercadoPago para mayor información."
111
+ "Automatic notification of the MercadoPago: The payment was cancelled.","Notificación automática de MercadoPago: El pago fué cancelado."
112
+ "Automatic notification of the MercadoPago: The payment was rejected.","Notificación automática de MercadoPago: El pago fué rechazado."
113
+ "<br/> Payment id: %s","<br/> Número de Pago: %s"
114
+ "<br/> Status: %s","<br/> Estado: %s"
115
+ "<br/> Status Detail: %s","<br/> Detalle del Estado: %s"
116
+ "Order # %s in store %s","Orden # %s realizada en %s"
117
+
118
+ "$", "$"
119
+ "Choice", "Elige"
120
+ "Default issuer", "Cualquier otro banco"
app/locale/pt_BR/mercadopago.csv ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Enabled", "Ativo"
2
+
3
+ "MercadoPago - Configuration", "MercadoPago - Configurações"
4
+ "Credit Card - MercadoPago", "Cartões de Credito - MercadoPago"
5
+
6
+ "MercadoPago Transparent - Credit Card", "MercadoPago Transparente - Cartão de Crédito"
7
+ "Payment Title", "Titulo"
8
+ "Category of your store", "Categoria da Loja"
9
+ "Choose the status of approved orders", "Escolha o status dos pedidos para pagamentos Aprovados"
10
+ "Choose the status of refunded orders", "Escolha o status dos pedidos para pagamentos Devolvidos"
11
+ "Choose the status when payment is pending", "Escolha o status dos pedidos para pagamentos Pendentes"
12
+ "Choose the status when client open a mediation", "Escolha o status dos pedidos para pagamentos que estão em Disputa"
13
+ "Choose the status when payment was reject", "Escolha o status dos pedidos para pagamentos Rejeitados"
14
+ "Choose the status when payment was canceled", "Escolha o status dos pedidos para pagamentos Cancelados"
15
+ "Checkout Position", "Posição no Checkout"
16
+ "To manage the status available go to System > Order Statuses", "Para gerenciar os status disponíveis vá até System > Order Statuses"
17
+
18
+ "MercadoPago Transparent - Ticket", "MercadoPago Transparente - Boleto"
19
+
20
+ "MercadoPago Standard - Credit Card, Ticket and Account Money", "MercadoPago Standard - Cartão, Boleto e Dinheiro em Conta"
21
+ "Country", "País"
22
+ "Type Checkout", "Tipo de Checkout"
23
+ "Auto Redirect","Auto-Redirecionar"
24
+ "Exclude Payment Methods","Excluir Meios de Pagamento"
25
+ "Maximum number of accepted installments","Numero maximo de parcelas"
26
+ "Width Checkout Iframe","Largura do Checkout Iframe (Width)"
27
+ "Height Checkout Iframe","Altura do Checkout Iframe (Height)"
28
+ "Auto-redirect the buyer when finishing the payment.","Auto-Redirecionar o comprador ao finalizar o pagamento."
29
+ "Select payment methods not accepted","Selecione os meios de pagamento não aceitos"
30
+ "For the operation of the Checkout Transparent Ticket is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'","Para o funcionamento do Checkout Transparente Boleto é necessário configurar as Credenciais 'CLIENT_ID' e 'CLIENT_SECRET' em 'MercadoPago - Configurações'"
31
+ "For the operation of the Checkout Standard is necessary to configure the Credentials 'CLIENT_ID' and 'CLIENT_SECRET' in 'MercadoPago - Configuration'","Para o funcionamento do Checkout Standard é necessário configurar as Credenciais 'CLIENT_ID' e 'CLIENT_SECRET' em 'MercadoPago - Configurações'"
32
+
33
+ "Card Number", "Número do cartão"
34
+ "Month", "Mês de vencimento"
35
+ "Year", "Ano de vencimento"
36
+ "Card Holder Name", "Titular do cartão"
37
+ "Document Number", "CPF"
38
+ "CVV", "Código de segurança"
39
+ "Installments", "Parcelas"
40
+ "Banks", "Bancos"
41
+
42
+ "Enter the card number", "Digite o numero do cartão"
43
+ "Validating Data", "Validando dados"
44
+ "An error has occurred. Please refresh the page.", "Ocorreu um erro. Por favor, atualize a pagina."
45
+ "Card number is invalid.", "Numero do Cartão inválido."
46
+ "CVV is invalid.", "Código de Segurança inválido."
47
+ "Card Holder Name is invalid.", "Nome do titular do cartão inválido."
48
+ "Document Number is invalid.", "CPF inválido."
49
+ "Year is invalid.", "Ano inválido."
50
+ "Month is invalid.", "Mês inválido."
51
+ "Please validate your data.", "Dados incorretos, valide os dados. Por favor."
52
+
53
+ "Card Number: %s", "Número do cartão: %s"
54
+ "Card Holder Name: %s", "Titular do cartão: %s"
55
+ "Payment Method: %s", "Método de Pagamento: %s"
56
+ "Expiration Date: %s", "Data de expiração: %s"
57
+ "Installments: %s", "Parcelas: %s"
58
+ "Statement Descriptor: %s", "Identificação na Fatura: %s"
59
+ "Payment Id (MercadoPago): %s", "Numero de Pagamento (MercadoPago): %s"
60
+ "Payment Status: %s (%s)", "Status de Pagamento: %s (%s)"
61
+
62
+ "Click on the link to generate the ticket", "Clique no link para gerar o boleto"
63
+ "Generate Ticket", "Gerar Boleto"
64
+
65
+ "Payment Method", "Método de Pagamento"
66
+
67
+ "Generate the ticket and pay it wherever you want.", "Gere o boleto e pague-o onde quiser."
68
+ "Will be approved within 2 business days.","Será aprovado até 2 dias úteis."
69
+
70
+ "Done, your payment was accredited!", "O seu pagamento foi aprovado!"
71
+ "We are processing the payment.", "Estamos processando o pagamento."
72
+ "In less than 2 business days we will tell you by e-mail if it is accredited or if we need more information.", "Em menos de 2 dias úteis você será avisado por e-mail se foi creditado ou se precisarmos de mais informações."
73
+ "In less than an hour we will send you by e-mail the result.", "Em menos de 1 hora, nós enviaremos o resultado por e-mail."
74
+
75
+ "Check the card number.", "Verifique o número do cartão."
76
+ "Check the expiration date.", "Verifique a data de validade."
77
+ "Check the data.", "Verifique os dados."
78
+ "Check the security code.", "Verifique o código de segurança."
79
+ "We could not process your payment.", "Não foi possível processar o pagamento."
80
+ "You must authorize to %s the payment of $ %s to MercadoPago.", "Você precisa autorizar com a %s o pagamento de R$ %s ao MercadoPago."
81
+ "Call %s to activate your card.<br/>The phone is on the back of your card.", "Ligue para %s e ative o seu cartão.<br/>O telefone está no verso do seu cartão de crédito."
82
+ "We could not process your payment.", "Não foi possível processar o pagamento."
83
+ "You already made a payment by that value.<br/>If you need to repay, use another card or other payment method.", "Você já fez o pagamento deste valor.<br/>Se você precisa pagar novamente use outro cartão ou outro meio de pagamento."
84
+ "Your payment was rejected.<br/>Choose another payment method, we recommend cash methods.", "O seu pagamento foi recusado.<br/>Recomendamos que você pague com outro dos meios de pagamento oferecidos, preferencialmente à vista."
85
+ "Your %s do not have sufficient funds.", "O seu %s não tem limite suficiente."
86
+ "%s does not process payments in %s installments.", "%s não processa pagamentos em %s parcelas."
87
+ "You have got to the limit of allowed attempts.<br/>Choose another card or another payment method.", "Você atingiu o limite de tentativas permitidas.<br/>Use outro cartão ou outro meio de pagamento."
88
+ "%s did not process the payment.", "%s não processou o pagamento."
89
+
90
+ "You can not make payments to users in other countries.", "Você não pode fazer pagamentos para usuários em outros países."
91
+ "Payment Method selected does not process payments in installments selected. Choose another card or another payment method.", "O meio de pagamento selecionado não processa pagamentos as parcelas selecionadas. Use outro cartão ou outro meio de pagamento."
92
+ "We could not process your payment. Error code: 126.", "Não foi possível processar o pagamento. Erro de numero: 126."
93
+ "Payment Method selected does not process payments for the selected amount. Choose another card or another payment method.", "O meio de pagamento selecionado não processa pagamentos do valor selecionado. Use outro cartão ou outro meio de pagamento."
94
+ "We could not process your payment. Error code: 145.", "Não foi possível processar o pagamento. Erro de numero: 145."
95
+ "You can not make payments. Error code: 150.", "Você não pode fazer pagamentos. Erro de numero: 150."
96
+ "You can not make payments.", "Você não pode fazer pagamentos com esse meio de pagamento."
97
+ "We could not process your payment. Error code: 160.", "Não foi possível processar o pagamento. Erro de numero: 160."
98
+ "Payment Method selected is not available at this time. Choose another card or another payment method.", "O meio de pagamento selecionado não está disponível neste momento. Use outro cartão ou outro meio de pagamento."
99
+ "You made a similar payment moments ago. Try again in a few minutes.", "Você realizou um pagamento similar há pouco tempo. Tente novamente em alguns minutos."
100
+ "We could not process your payment. %s", "Não foi possível processar o pagamento. %s"
101
+
102
+ "Verify the form data or wait until the validation of the payment data", "Verifique os dados do formulario ou aguarde a validação dos dados de pagamento."
103
+
104
+
105
+ "Automatic notification of the MercadoPago: The payment was approved.", "Notificação automática do MercadoPago: O pagamento foi aprovado."
106
+ "Automatic notification of the MercadoPago: The payment was refunded.", "Notificação automática do MercadoPago: O pagamento foi devolvido."
107
+ "Automatic notification of the MercadoPago: The payment is being processed.", "Notificação automática do MercadoPago: O pagamento está sendo processado."
108
+ "Automatic notification of the MercadoPago: The payment is being processed. Will be approved within 2 business days.", "Notificação automática do MercadoPago: O pagamento está sendo processado. Em até 2 dias úteis o pagamento será analisado."
109
+ "Automatic notification of the MercadoPago: The payment is in the process of Dispute, check the graphic account of the MercadoPago for more information.", "Notificação automática do MercadoPago: O pagamento está em processo de Disputa, verifique a conta gráfica do MercadoPago para maiores informações."
110
+ "Automatic notification of the MercadoPago: The payment was cancelled.", "Notificação automática do MercadoPago: O pagamento foi cancelado."
111
+ "Automatic notification of the MercadoPago: The payment was rejected.", "Notificação automática do MercadoPago: O pagamento foi rejeitado."
112
+ "<br/> Payment id: %s", "<br/> Numero do Pagamento: %s"
113
+ "<br/> Status: %s", "<br/> Status: %s"
114
+ "<br/> Status Detail: %s", "<br/> Detalhe do Status: %s"
115
+
116
+ "Order # %s in store %s","Pedido # %s realizado na loja %s"
117
+
118
+ "$", "R$"
119
+ "Choice", "Escolha"
120
+ "Default issuer", "Qualquer Banco"
js/mercadopago/jquery-1.11.0.min.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ /*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
2
+ !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
3
+ }}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
4
+ },a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
js/mercadopago/mercadopago.js ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //load dinamico de js externo
2
+ function loadJsAsync(url, callback) {
3
+ var head = document.getElementsByTagName('head')[0];
4
+ var script = document.createElement('script');
5
+ script.type = 'text/javascript';
6
+ script.src = url;
7
+ script.onreadystatechange = callback;
8
+ script.onload = callback;
9
+ head.appendChild(script);
10
+ }
11
+
12
+ loadJsAsync("//code.jquery.com/jquery-1.11.0.min.js", function () {
13
+ console.log("jQuery Running ...");
14
+ $.noConflict();
15
+ loadJsAsync("https://secure.mlstatic.com/org-img/checkout/custom/1.0/checkout.js?nocache=" + Math.random() * 10, function () {
16
+ console.log("MercadoPago Running ...");
17
+ Checkout.setPublishableKey(PublicKeyMercadoPagoTransparent);
18
+ //end load mp
19
+ });
20
+
21
+ //end load js
22
+ });
23
+
24
+
25
+ function loadFilesMP() {
26
+ loadJsAsync("//code.jquery.com/jquery-1.11.0.min.js", function () {
27
+ $.noConflict();
28
+ jQuery(document).ready(function ($) {
29
+
30
+ //variables translates
31
+ var currency_text_mercadopago = $("#mercadopago-text-currency").html();
32
+ var choice_text_mercadopago = $("#mercadopago-text-choice").html();
33
+ var default_issuer_text_mercadopago = $("#mercadopago-text-default-issuer").html();
34
+
35
+
36
+ //hide loading
37
+ $("#status").hide();
38
+
39
+ //caso tenha alteração no campo de banco
40
+ $("#issuers").change(function(){
41
+
42
+ //pega o bin
43
+ var card = $("input[data-checkout='cardNumber']").val().replace(/ /g, '').replace(/-/g, '').replace(/\./g, '');
44
+ var bin = card.substr(0,6);
45
+
46
+ //verifica installments para o banco, pode ocorrer de ter desconto
47
+ Checkout.getInstallmentsByIssuerId(
48
+ bin,
49
+ this.value,
50
+ parseFloat($("#amount").val()),
51
+ setInstallmentInfo
52
+ );
53
+
54
+ });
55
+
56
+ //caso o cartão copie e cole
57
+ $("input[data-checkout='cardNumber']").focusout(function () {
58
+ var card = $(this).val().replace(/ /g, '').replace(/-/g, '').replace(/\./g, '');
59
+ var bin = card.substr(0,6);
60
+ getBin(bin);
61
+ });
62
+
63
+ //pega o bin enquanto digita
64
+ $("input[data-checkout='cardNumber']").bind("keyup", function () {
65
+ var bin = $(this).val().replace(/ /g, '').replace(/-/g, '').replace(/\./g, '');
66
+ getBin(bin);
67
+ });
68
+
69
+ $("#mp-form input").focusout(function () {
70
+ validCreateToken();
71
+ });
72
+
73
+ $("#mp-form select").change(function () {
74
+ validCreateToken();
75
+ });
76
+
77
+
78
+ function getBin(bin){
79
+ if (bin.length == 6) {
80
+ if ($("#mercadopago-country").html() == 'mlm') {
81
+ Checkout.getPaymentMethod(bin, parseFloat($("#amount").val()), setPaymentMethodInfo, $('#payment_method option:checked').val());
82
+ }else{
83
+ Checkout.getPaymentMethod(bin, setPaymentMethodInfo);
84
+ }
85
+ }
86
+ }
87
+
88
+ function setPaymentMethodInfo(status, result){
89
+ var method_payment = result[0];
90
+
91
+ //adiciona a imagem do meio de pagamento
92
+ $("#img_payment_method").html('<img src="' + method_payment.secure_thumbnail + '">')
93
+
94
+ //setta o meio de pagamento
95
+ $("#payment_method").val(method_payment.id);
96
+
97
+ //lista parcelas
98
+ Checkout.getInstallments(method_payment.id, parseFloat($("#amount").val()), setInstallmentInfo);
99
+ Checkout.getCardIssuers(method_payment.id, showIssuers);
100
+ }
101
+
102
+ function validCreateToken(){
103
+
104
+ var valid = true;
105
+
106
+ //verifica os elementos "input"
107
+ $("#mp-form input[data-checkout]").each(function () {
108
+
109
+ if ($(this).val() == "") {
110
+ valid = false
111
+ }else if($(this).attr('data-checkout') == 'docNumber'){
112
+
113
+ //caso o documento seja CPF, faz a validação em um função especifica
114
+ if($("#docType").val() == "CPF"){
115
+ if(validCpf($(this).val())){
116
+ $("#status").hide();
117
+ }else{
118
+ valid = false;
119
+ //hide all msg status
120
+ $(".msg-status").hide();
121
+ $(".error-324").show();
122
+ showError();
123
+ }
124
+ }
125
+ }
126
+
127
+ });
128
+
129
+ //verifica os elementos "select"
130
+ $("#mp-form select[data-checkout]").each(function () {
131
+ if ($(this).find("option:selected").val() == "") {
132
+ valid = false
133
+ }
134
+ });
135
+
136
+ if (valid) {
137
+
138
+ //hide all msg status
139
+ $(".msg-status").hide();
140
+
141
+ //remove erro class
142
+ $("#status").removeClass("msg-error");
143
+
144
+ //add msg e mostra o loading
145
+ $("#status").show();
146
+ $("#status .loading-mp").show();
147
+
148
+ //show span loading
149
+ $("#status .text-mp .msg-loading").show();
150
+
151
+
152
+ var $form = $("#mp-form");
153
+
154
+ Checkout.createToken($form, function (status, response) {
155
+ removeClass();
156
+ var html = ""
157
+ if (status == 200 || status == 201) {
158
+ $("#status .status-mp").hide();
159
+ $("#card_token_id").val(response.id);
160
+ $("#trunc_card").val(response.trunc_card_number);
161
+ $("#status").hide();
162
+ }else{
163
+
164
+ $.each(response.cause, function(p, e){
165
+
166
+ //mapea os erros
167
+ switch (e.code) {
168
+ case "011":
169
+ case "E301":
170
+ case "E302":
171
+ case "316":
172
+ case "324":
173
+ case "325":
174
+ case "326":
175
+ $(".error-" + e.code).show();
176
+ break;
177
+ default:
178
+ $(".error-other").show();
179
+ }
180
+
181
+ showError();
182
+ });
183
+
184
+ }
185
+
186
+ //hide loading
187
+ $("#status .text-mp .msg-loading").hide();
188
+ $("#status .loading-mp").hide();
189
+
190
+ });
191
+
192
+
193
+
194
+ }
195
+ }
196
+
197
+
198
+ function showError() {
199
+ $("#status .loading-mp").hide();
200
+ $("#status").show();
201
+ $("#status").addClass("msg-error");
202
+ $("#card_token_id").val("");
203
+ }
204
+
205
+ function validCpf(cpf){
206
+ var soma;
207
+ var resto;
208
+ soma = 0;
209
+ if (cpf == "00000000000")
210
+ return false;
211
+
212
+ for (i=1; i<=9; i++){
213
+ soma = soma + parseInt(cpf.substring(i-1, i)) * (11 - i);
214
+ resto = (soma * 10) % 11;
215
+ }
216
+
217
+ if ((resto == 10) || (resto == 11))
218
+ resto = 0;
219
+
220
+ if (resto != parseInt(cpf.substring(9, 10)) )
221
+ return false;
222
+
223
+ soma = 0;
224
+
225
+ for (i = 1; i <= 10; i++){
226
+ soma = soma + parseInt(cpf.substring(i-1, i)) * (12 - i);
227
+ resto = (soma * 10) % 11;
228
+ }
229
+
230
+ if ((resto == 10) || (resto == 11))
231
+ resto = 0;
232
+
233
+ if (resto != parseInt(cpf.substring(10, 11))){
234
+ return false;
235
+ }else{
236
+ return true;
237
+ }
238
+ }
239
+
240
+ //setta parcelas
241
+ function setInstallmentInfo(status, installments){
242
+
243
+ var html_options = '<option value="">' + choice_text_mercadopago + '... </option>';
244
+ for(i=0; installments && i<installments.length; i++){
245
+ html_options += "<option value='"+installments[i].installments+"'>"+installments[i].installments +" de " + currency_text_mercadopago + " " + installments[i].share_amount+" ("+ currency_text_mercadopago + " "+ installments[i].total_amount+")</option>";
246
+ };
247
+ $("#installments").html(html_options);
248
+ }
249
+
250
+ function showIssuers(status, issuers){
251
+
252
+ //caso tenha apenas um registro, pega o valor dele e setta em um input escondido
253
+ if (issuers.length == 1) {
254
+ var input_issuers = '<input type="text" name="payment[issuers]" id="issuers" data-checkout="issuers" class="input-text" autocomplete="off" value="' + issuers[0].id + '">';
255
+ $("#issuers").html(input_issuers);
256
+ $("#issuersOptions").hide();
257
+ }else{
258
+
259
+ var options = '<select name="payment[issuers]" id="issuers" data-checkout="issuers" class="input-text" autocomplete="off">'
260
+ options += '<option value="-1">' + choice_text_mercadopago + '...</option>';
261
+
262
+ for(i=0; issuers && i<issuers.length;i++){
263
+
264
+ if (issuers[i].name == "default") {
265
+ issuers[i].name = default_issuer_text_mercadopago;
266
+ }
267
+
268
+ options+="<option value='"+issuers[i].id+"'>"+issuers[i].name +" </option>";
269
+ }
270
+
271
+ options += "</select>";
272
+
273
+ if(issuers.length > 1){
274
+ $("#issuers").html(options);
275
+ $("#issuersOptions").show();
276
+ }else{
277
+ $("#issuers").html("");
278
+ $("#issuersOptions").hide();
279
+ }
280
+ }
281
+ }
282
+
283
+ function removeClass(){
284
+ //remove as class
285
+ $("#status").removeClass("msg-error");
286
+ $("#status").removeClass("msg-success");
287
+ $("#status").removeClass("msg-alert");
288
+ }
289
+ //end load ready
290
+ });
291
+ //end load js
292
+ });
293
+
294
+ }
lib/mercadopago/mercadopago.php ADDED
@@ -0,0 +1,342 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * MercadoPago Integration Library
5
+ * Access MercadoPago for payments integration
6
+ *
7
+ * @author hcasatti
8
+ *
9
+ */
10
+ $GLOBALS["LIB_LOCATION"] = dirname(__FILE__);
11
+
12
+ class MP {
13
+
14
+ const version = "0.2.1";
15
+
16
+ private $client_id;
17
+ private $client_secret;
18
+ private $access_data;
19
+ private $sandbox = FALSE;
20
+
21
+ function __construct($client_id, $client_secret) {
22
+ $this->client_id = $client_id;
23
+ $this->client_secret = $client_secret;
24
+ }
25
+
26
+ public function sandbox_mode($enable = NULL) {
27
+ if (!is_null($enable)) {
28
+ $this->sandbox = $enable === TRUE;
29
+ }
30
+
31
+ return $this->sandbox;
32
+ }
33
+
34
+ /**
35
+ * Get Access Token for API use
36
+ */
37
+ public function get_access_token() {
38
+ $app_client_values = $this->build_query(array(
39
+ 'client_id' => $this->client_id,
40
+ 'client_secret' => $this->client_secret,
41
+ 'grant_type' => 'client_credentials'
42
+ ));
43
+
44
+ $access_data = MPRestClient::post("/oauth/token", $app_client_values, "application/x-www-form-urlencoded");
45
+
46
+ $this->access_data = $access_data['response'];
47
+
48
+ return $this->access_data['access_token'];
49
+ }
50
+
51
+ /**
52
+ * Get information for specific merchant_order
53
+ * @param int $id
54
+ * @return array(json)
55
+ */
56
+
57
+ public function get_merchant_order($id){
58
+
59
+ $access_token = $this->get_access_token();
60
+
61
+ $merchant_order = MPRestClient::get("/merchant_orders/" . $id . "?access_token=" . $access_token);
62
+
63
+ return $merchant_order;
64
+ }
65
+
66
+ /**
67
+ * Get information for specific payment
68
+ * @param int $id
69
+ * @return array(json)
70
+ */
71
+ public function get_payment($id) {
72
+ $access_token = $this->get_access_token();
73
+
74
+ $uri_prefix = $this->sandbox ? "/sandbox" : "";
75
+
76
+ $payment_info = MPRestClient::get($uri_prefix."/collections/notifications/" . $id . "?access_token=" . $access_token);
77
+ return $payment_info;
78
+ }
79
+ public function get_payment_info($id) {
80
+ return $this->get_payment($id);
81
+ }
82
+
83
+ /**
84
+ * Get information for specific authorized payment
85
+ * @param id
86
+ * @return array(json)
87
+ */
88
+ public function get_authorized_payment($id) {
89
+ $access_token = $this->get_access_token();
90
+
91
+ $authorized_payment_info = MPRestClient::get("/authorized_payments/" . $id . "?access_token=" . $access_token);
92
+ return $authorized_payment_info;
93
+ }
94
+
95
+ /**
96
+ * Refund accredited payment
97
+ * @param int $id
98
+ * @return array(json)
99
+ */
100
+ public function refund_payment($id) {
101
+ $access_token = $this->get_access_token();
102
+
103
+ $refund_status = array(
104
+ "status" => "refunded"
105
+ );
106
+
107
+ $response = MPRestClient::put("/collections/" . $id . "?access_token=" . $access_token, $refund_status);
108
+ return $response;
109
+ }
110
+
111
+ /**
112
+ * Cancel pending payment
113
+ * @param int $id
114
+ * @return array(json)
115
+ */
116
+ public function cancel_payment($id) {
117
+ $access_token = $this->get_access_token();
118
+
119
+ $cancel_status = array(
120
+ "status" => "cancelled"
121
+ );
122
+
123
+ $response = MPRestClient::put("/collections/" . $id . "?access_token=" . $access_token, $cancel_status);
124
+ return $response;
125
+ }
126
+
127
+ /**
128
+ * Cancel preapproval payment
129
+ * @param int $id
130
+ * @return array(json)
131
+ */
132
+ public function cancel_preapproval_payment($id) {
133
+ $access_token = $this->get_access_token();
134
+
135
+ $cancel_status = array(
136
+ "status" => "cancelled"
137
+ );
138
+
139
+ $response = MPRestClient::put("/preapproval/" . $id . "?access_token=" . $access_token, $cancel_status);
140
+ return $response;
141
+ }
142
+
143
+ /**
144
+ * Search payments according to filters, with pagination
145
+ * @param array $filters
146
+ * @param int $offset
147
+ * @param int $limit
148
+ * @return array(json)
149
+ */
150
+ public function search_payment($filters, $offset = 0, $limit = 0) {
151
+ $access_token = $this->get_access_token();
152
+
153
+ $filters["offset"] = $offset;
154
+ $filters["limit"] = $limit;
155
+
156
+ $filters = $this->build_query($filters);
157
+
158
+ $uri_prefix = $this->sandbox ? "/sandbox" : "";
159
+
160
+ $collection_result = MPRestClient::get($uri_prefix."/collections/search?" . $filters . "&access_token=" . $access_token);
161
+ return $collection_result;
162
+ }
163
+
164
+ /**
165
+ * Create a checkout preference
166
+ * @param array $preference
167
+ * @return array(json)
168
+ */
169
+ public function create_preference($preference) {
170
+ $access_token = $this->get_access_token();
171
+
172
+ $preference_result = MPRestClient::post("/checkout/preferences?access_token=" . $access_token, $preference);
173
+ return $preference_result;
174
+ }
175
+
176
+ /**
177
+ * Update a checkout preference
178
+ * @param string $id
179
+ * @param array $preference
180
+ * @return array(json)
181
+ */
182
+ public function update_preference($id, $preference) {
183
+ $access_token = $this->get_access_token();
184
+
185
+ $preference_result = MPRestClient::put("/checkout/preferences/{$id}?access_token=" . $access_token, $preference);
186
+ return $preference_result;
187
+ }
188
+
189
+ /**
190
+ * Get a checkout preference
191
+ * @param string $id
192
+ * @return array(json)
193
+ */
194
+ public function get_preference($id) {
195
+ $access_token = $this->get_access_token();
196
+
197
+ $preference_result = MPRestClient::get("/checkout/preferences/{$id}?access_token=" . $access_token);
198
+ return $preference_result;
199
+ }
200
+
201
+ /**
202
+ * Create a preapproval payment
203
+ * @param array $preapproval_payment
204
+ * @return array(json)
205
+ */
206
+ public function create_preapproval_payment($preapproval_payment) {
207
+ $access_token = $this->get_access_token();
208
+
209
+ $preapproval_payment_result = MPRestClient::post("/preapproval?access_token=" . $access_token, $preapproval_payment);
210
+ return $preapproval_payment_result;
211
+ }
212
+
213
+ /**
214
+ * Get a preapproval payment
215
+ * @param string $id
216
+ * @return array(json)
217
+ */
218
+ public function get_preapproval_payment($id) {
219
+ $access_token = $this->get_access_token();
220
+
221
+ $preapproval_payment_result = MPRestClient::get("/preapproval/{$id}?access_token=" . $access_token);
222
+ return $preapproval_payment_result;
223
+ }
224
+
225
+ /**
226
+ * Update a preapproval payment
227
+ * @param string $preapproval_payment, $id
228
+ * @return array(json)
229
+ */
230
+
231
+ public function update_preapproval_payment($id, $preapproval_payment) {
232
+ $access_token = $this->get_access_token();
233
+
234
+ $preapproval_payment_result = MPRestClient::put("/preapproval/" . $id . "?access_token=" . $access_token, $preapproval_payment);
235
+ return $preapproval_payment_result;
236
+ }
237
+
238
+
239
+ /**
240
+ * Create a custon payment
241
+ * @param array $preference
242
+ * @return array(json)
243
+ */
244
+ public function create_custon_payment($info) {
245
+ $access_token = $this->get_access_token();
246
+
247
+ $preference_result = MPRestClient::post("/checkout/custom/create_payment?access_token=" . $access_token, $info);
248
+ return $preference_result;
249
+ }
250
+
251
+
252
+ /* **************************************************************************************** */
253
+
254
+ private function build_query($params) {
255
+ if (function_exists("http_build_query")) {
256
+ return http_build_query($params, "", "&");
257
+ } else {
258
+ foreach ($params as $name => $value) {
259
+ $elements[] = "{$name}=" . urlencode($value);
260
+ }
261
+
262
+ return implode("&", $elements);
263
+ }
264
+ }
265
+
266
+ }
267
+
268
+ /**
269
+ * MercadoPago cURL RestClient
270
+ */
271
+ class MPRestClient {
272
+
273
+ const API_BASE_URL = "https://api.mercadolibre.com";
274
+
275
+ private static function get_connect($uri, $method, $content_type) {
276
+ $connect = curl_init(self::API_BASE_URL . $uri);
277
+
278
+ curl_setopt($connect, CURLOPT_USERAGENT, "MercadoPago Magento-1.9.x-transparent Cart v1.0.1");
279
+ curl_setopt($connect, CURLOPT_RETURNTRANSFER, true);
280
+ curl_setopt($connect, CURLOPT_CUSTOMREQUEST, $method);
281
+ curl_setopt($connect, CURLOPT_HTTPHEADER, array("Accept: application/json", "Content-Type: " . $content_type));
282
+
283
+ return $connect;
284
+ }
285
+
286
+ private static function set_data(&$connect, $data, $content_type) {
287
+ if ($content_type == "application/json") {
288
+ if (gettype($data) == "string") {
289
+ json_decode($data, true);
290
+ } else {
291
+ $data = json_encode($data);
292
+ }
293
+
294
+ if(function_exists('json_last_error')) {
295
+ $json_error = json_last_error();
296
+ if ($json_error != JSON_ERROR_NONE) {
297
+ throw new Exception("JSON Error [{$json_error}] - Data: {$data}");
298
+ }
299
+ }
300
+ }
301
+
302
+ curl_setopt($connect, CURLOPT_POSTFIELDS, $data);
303
+ }
304
+
305
+ private static function exec($method, $uri, $data, $content_type) {
306
+ $connect = self::get_connect($uri, $method, $content_type);
307
+ if ($data) {
308
+ self::set_data($connect, $data, $content_type);
309
+ }
310
+
311
+ $api_result = curl_exec($connect);
312
+ $api_http_code = curl_getinfo($connect, CURLINFO_HTTP_CODE);
313
+
314
+ $response = array(
315
+ "status" => $api_http_code,
316
+ "response" => json_decode($api_result, true)
317
+ );
318
+
319
+ /*if ($response['status'] >= 400) {
320
+ throw new Exception ($response['response']['message'], $response['status']);
321
+ }*/
322
+
323
+ curl_close($connect);
324
+
325
+ return $response;
326
+ }
327
+
328
+ public static function get($uri, $content_type = "application/json") {
329
+ return self::exec("GET", $uri, null, $content_type);
330
+ }
331
+
332
+ public static function post($uri, $data, $content_type = "application/json") {
333
+ return self::exec("POST", $uri, $data, $content_type);
334
+ }
335
+
336
+ public static function put($uri, $data, $content_type = "application/json") {
337
+ return self::exec("PUT", $uri, $data, $content_type);
338
+ }
339
+
340
+ }
341
+
342
+ ?>
package.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>MercadoPagoTransparent</name>
4
+ <version>0.0.1</version>
5
+ <stability>stable</stability>
6
+ <license>OSL v3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Checkout Transparente e Standard (Cart&#xE3;o de credito, Boleto e dinheiro em conta) usando MercadoPago.</summary>
10
+ <description>MercadoPago.com &#xE9; o maior facilitador de pagamentos pela Internet de origem latino-americana com mais de 99,5 milh&#xF5;es de usu&#xE1;rios certificados, registrados e ativos em sua plataforma. Com dez anos de trajet&#xF3;ria na Am&#xE9;rica Latina, &#xE9; uma empresa do Grupo MercadoLivre, com a&#xE7;&#xF5;es negociadas na Nasdaq (NASDAQ:MELI).&#xD;
11
+ &#xD;
12
+ A plataforma foi desenvolvida com a tecnologia mais avan&#xE7;ada em seguran&#xE7;a na Internet por uma equipe de especialistas em finan&#xE7;as, tecnologia e seguran&#xE7;a da informa&#xE7;&#xE3;o, com ampla experi&#xEA;ncia no desenvolvimento de servi&#xE7;os financeiros online. MercadoPago.com est&#xE1; presente em seis pa&#xED;ses: Argentina, Brasil, Chile, Col&#xF4;mbia, M&#xE9;xico e Venezuela.&#xD;
13
+ &#xD;
14
+ Checkout Transparente dispon&#xED;vel para: Brasil, Argentina e Mexico.&#xD;
15
+ &#xD;
16
+ Checkout Standard dispon&#xED;vel para: Brasil, Argentina, Mexico, Venezuela e Colombia.</description>
17
+ <notes>Checkout Transparente dispon&#xED;vel para: Brasil, Argentina e Mexico.&#xD;
18
+ &#xD;
19
+ Checkout Standard dispon&#xED;vel para: Brasil, Argentina, Mexico, Venezuela e Colombia.</notes>
20
+ <authors><author><name>Developers MercadoPago Brasil</name><user>developers_mercadopago</user><email>developers@mercadopago.com.br</email></author></authors>
21
+ <date>2015-03-10</date>
22
+ <time>17:40:20</time>
23
+ <contents><target name="magecommunity"><dir name="MercadoPago"><dir name="Standard"><dir name="Block"><file name="Form.php" hash="9bdf1f52cf6a679b44f3722caec66f6a"/><file name="Info.php" hash="21aac16dbe66bc09af3a9de47f76a1b5"/></dir><dir name="Helper"><file name="Data.php" hash="710ec99ea6abea4cf734aa914c85b85b"/></dir><dir name="Model"><file name="Checkout.php" hash="470d89d12e726393078c2eccb9b6d0e9"/><file name="Observer.php" hash="cb21534771553ef3aed3ea3e2de26f27"/><dir name="Source"><file name="CategoryId.php" hash="5f3ff392848a53c2fa6603c963ae82b5"/><file name="Country.php" hash="c16df06c2007393db005ea79213ee05e"/><file name="Installments.php" hash="2fae68dbabad4c1eef8b834c90dd0b96"/><file name="PaymentMethods.php" hash="ab8008e14838f77491db3b8d15f50ef3"/><file name="TypeCheckout.php" hash="d8b1d8eed83a019a6c21a417fb05ce6a"/></dir></dir><dir name="controllers"><file name="NotificationController.php" hash="99de23a5c9aa3badf03c239686696061"/><file name="PayController.php" hash="e8493b2ef86bd99ef86989861e82ba86"/></dir><dir name="etc"><file name="config.xml" hash="44f0473a9ecb35d9ba6e4f7a0232cbc9"/><file name="system.xml" hash="4227fb788f898b1785d0fb15da65b2fe"/></dir></dir><dir name="Transparent"><dir name="Block"><file name="Form.php" hash="2d74865fe22dba4437209181af6858a1"/><file name="Info.php" hash="32adfbd59dc2f7b8a97a5a778e2c66d5"/><file name="Success.php" hash="a85361ea7af2adf623ea967d297d1545"/><file name=".DS_Store" hash="2074c5a443aba7e611980b76135fd198"/></dir><dir name="Helper"><file name="Data.php" hash="93f79cb3b534e05e8d4576916aaba2e0"/></dir><dir name="Model"><dir name="Resource"><file name="Setup.php" hash="0878b25e586a30e84d308b45e3b82af4"/></dir><dir name="Source"><file name="CategoryId.php" hash="d62071499f4815e3e4244c851aad8fbe"/></dir><file name="Transparent.php" hash="52973d870c2c8df0c3206438bedda707"/><file name=".DS_Store" hash="beeba7d5cb9298ed5ca24b7cb3b6f70a"/></dir><dir name="controllers"><file name="NotificacaoController.php" hash="fcc18d169285346a7548e3a79de84ee0"/><file name="PayController.php" hash="a0b0b0b9695581e2011f29b6767b26b3"/></dir><dir name="etc"><file name="config.xml" hash="4dc111452c4403c22e2d5e2be6b276e6"/><file name="system.xml" hash="52b4e773795bc29f7588aaf2b1343155"/></dir><file name=".DS_Store" hash="16eff6348e7c6882d4e9c990c14eb34a"/></dir><dir name="TransparentTicket"><dir name="Block"><file name="Form.php" hash="c7332ee1427371d7ec6495b8e7d2ea55"/><file name="Info.php" hash="3fad7f5cf0e9f3e2c45cb3084e9abf0c"/></dir><dir name="Helper"><file name="Data.php" hash="0cb47ec830a90247ab08a55c2826698d"/></dir><dir name="Model"><file name="Transparent.php" hash="524b905aba91c740b833b4f6055a42b6"/></dir><dir name="etc"><file name="config.xml" hash="ed7b309497f8bd92220776e6c093ae9f"/><file name="system.xml" hash="1829c574575e26926738e7447cef735e"/></dir></dir><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="mercadopago"><dir name="standard"><file name="info.phtml" hash="bbf59a7a5da905777001128af6c62fb5"/></dir><dir name="transparent"><file name="info.phtml" hash="5df93a3c76af32912fd0806035e758f4"/></dir><dir name="transparent_boleto"><file name="info.phtml" hash="e02cd75cf7831044c1ba4f123418d692"/></dir><dir name="transparent_ticket"><file name="info.phtml" hash="42b77943bbc3e159d9208fbdf47e8243"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="mercadopago"><file name="clean_page.phtml" hash="1f45b4c91be19a384591cb04b2d11805"/><dir name="standard"><file name="form.phtml" hash="804a6cf27cb502749ba71e2ae48507e6"/><file name="info.phtml" hash="a5d8b4ecf65495c12579027a38148368"/><file name="pay.phtml" hash="13091e8ed10cafa4e9de391e1285a234"/></dir><dir name="transparent"><file name="form.phtml" hash="9f9aad246f1767c024c4bbd6579c35e4"/><file name="info.phtml" hash="5df93a3c76af32912fd0806035e758f4"/><file name="success.phtml" hash="62b670733cfedc11dd280c63be1a7161"/><file name="sucesso.phtml" hash="fbfa9d4f2c32a43d301cac7d1418dd40"/></dir><dir name="transparent_boleto"><file name="form.phtml" hash="4dca920aea45d0b211bbf5ee65d95f4e"/><file name="info.phtml" hash="64a3f25e28237be5eaf77c277547da42"/></dir><dir name="transparent_ticket"><file name="form.phtml" hash="17e3ea654229c5f96940f7e7748ca1a8"/><file name="info.phtml" hash="972315ee71242cd527d468e537c2f3f7"/></dir></dir></dir><dir name="layout"><file name="mercadopago.xml" hash="69e3f318b680d1332ea226887ae3ad40"/></dir></dir></dir></dir></target><target name="magelib"><dir name="mercadopago"><file name="mercadopago.php" hash="7d4620c0f68bda77bde9790a7f566ff4"/></dir></target><target name="magelocale"><dir name="es_AR"><file name="mercadopago.csv" hash="db2db0c4f635fda9efde0eceea20597d"/></dir><dir name="es_CO"><file name="mercadopago.csv" hash="096ca1c8dd9ed626f9b9eb7b9dcbc00c"/></dir><dir name="es_ES"><file name="mercadopago.csv" hash="04187abbece8cea73b6d113e952d5592"/></dir><dir name="es_MX"><file name="mercadopago.csv" hash="838605dee2f14e4a79a0f7ca0f622263"/></dir><dir name="pt_BR"><file name="mercadopago.csv" hash="183d1bc3cd99714f97c8bcddf950a0dc"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="mercadopago"><dir name="css"><file name="style.css" hash="5b44c857924de425d6a5942d98880b89"/></dir><dir name="images"><file name="loading.gif" hash="5c43434f066c2fbc4714c768b8f83853"/></dir><file name=".DS_Store" hash="fc730dea33a1da421ae6af1247e8468d"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="MercadoPago_TransparentTicket.xml" hash="cccc9919309346b38b754582bc1526e7"/><file name="MercadoPago_TransparentBoleto.xml" hash="535bef7519e395c6fd274832e55d0c77"/><file name="MercadoPago_Transparent.xml" hash="fb32c46f0b74fa2b5722b59bd627c621"/><file name="MercadoPago_Standard.xml" hash="4f582192168ac08a0dedf19b049503f9"/></dir></target><target name="mageweb"><dir name="js"><dir name="mercadopago"><file name="jquery-1.11.0.min.js" hash="52d16e147b5346147d0f3269cd4d0f80"/><file name="mercadopago.js" hash="c9fd0b5b94ad9c9234c8fa6827ff223b"/></dir></dir></target></contents>
24
+ <compatible/>
25
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
26
+ </package>
skin/frontend/base/default/mercadopago/.DS_Store ADDED
Binary file
skin/frontend/base/default/mercadopago/css/style.css ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ *
3
+ * Checkout
4
+ *
5
+ */
6
+
7
+ .sp-methods .form-list.mercadopago{
8
+ padding:0 !important;
9
+ }
10
+ .sp-methods .form-list.form-mercadopago{
11
+ padding:0 !important;
12
+ }
13
+
14
+ .banner_checkout_mp{
15
+
16
+ }
17
+
18
+ #img_payment_method{
19
+ float: left;
20
+ width: 100%;
21
+ margin: 5px 0 0 0;
22
+ }
23
+
24
+ .box-mes{
25
+ width: 160px;
26
+ float: left;
27
+ margin: 0 10px 0 0;
28
+ }
29
+
30
+ .box-mes select{
31
+ width: 150px;
32
+ }
33
+ .box-ano{
34
+ width: 135px;
35
+ float: left;
36
+ }
37
+
38
+ .box-ano select{
39
+ width: 90px;
40
+ }
41
+
42
+ .box-input{
43
+ float: left;
44
+ width: 100%;
45
+ margin: 10px 0 0 0;
46
+ }
47
+
48
+ .input-box.box-installments{
49
+ margin: 0 0 10px 0;
50
+ }
51
+
52
+ #docType{
53
+ width: 60px;
54
+ }
55
+
56
+ #installments{
57
+ margin: 0 0 5px 0;
58
+ }
59
+ #status{
60
+ float: left;
61
+ margin: 10px 0 10px 0;
62
+ width: 100%;
63
+ border: 1px solid transparent;
64
+ border-radius: 4px;
65
+ display: none;
66
+ }
67
+
68
+ #status.msg-alert{
69
+ color: #31708f;
70
+ background-color: #d9edf7;
71
+ border-color: #bce8f1;
72
+ }
73
+
74
+ #status.msg-success{
75
+ color: #3c763d;
76
+ background-color: #dff0d8;
77
+ border-color: #d6e9c6;
78
+ }
79
+
80
+ #status.msg-error{
81
+ color: #a94442;
82
+ background-color: #f2dede;
83
+ border-color: #ebccd1;
84
+ }
85
+
86
+ #status .box{
87
+ float: left;
88
+ width: 100%;
89
+ padding: 15px;
90
+ }
91
+
92
+ #status .loading-mp{
93
+ float: left;
94
+ margin: 0 10px 0 0;
95
+ }
96
+
97
+ #status .text-mp{
98
+ float: left;
99
+ }
100
+
101
+ p.msg-status{
102
+ margin: 0 0 !important;
103
+ }
104
+
105
+ #mercadopago_transparent_doc{
106
+ width: 120px;
107
+ }
108
+
109
+ #mercadopago_transparent_code{
110
+ width: 50px;
111
+ }
112
+
113
+ /*
114
+ *
115
+ * Pagina de sucesso
116
+ *
117
+ */
118
+
119
+ #mensagem_mp{
120
+ float: left;
121
+ }
122
+ #mensagem_mp h4{
123
+ font-size: 18px;
124
+ }
125
+
126
+ #mensagem_mp .status{
127
+ font-size: 14px;
128
+ }
129
+
130
+ .voltar{
131
+ text-transform:uppercase;
132
+ }
133
+
134
+ #logo_mp{
135
+ float: left;
136
+ /*text-align: center;*/
137
+ width: 100%;
138
+ margin: 40px 0 0 0;
139
+ }
140
+
141
+
142
+
143
+ .btn-boleto{
144
+ font-family: 'Lato',sans-serif;
145
+ font-weight: 400;
146
+ background-color: #36A1F1;
147
+ background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#36A1F1),color-stop(100%,#0F79C9));
148
+ background-image: -webkit-linear-gradient(#36A1F1,#0F79C9);
149
+ background-image: -moz-linear-gradient(#36A1F1,#0F79C9);
150
+ background-image: -o-linear-gradient(#36A1F1,#0F79C9);
151
+ background-image: linear-gradient(#36A1F1,#0F79C9);
152
+ -webkit-box-shadow: inset 0 1px #97DCFF;
153
+ box-shadow: 0 1px #97DCFF inset;
154
+ color: #FFF!important;
155
+ border: 1px solid #0D6FB9;
156
+ border-radius: 4px 4px 4px 4px;
157
+ cursor: pointer;
158
+ display: inline-block;
159
+ text-decoration: none;
160
+ text-align: center;
161
+ line-height: 1.25em;
162
+ padding: 6px 12px;
163
+ font-size: 20px;
164
+ }
165
+
166
+ /*
167
+ *
168
+ *
169
+ */
170
+
171
+ #standard_banner_checkout{
172
+ width: 100%;
173
+ float: left;
174
+ }
175
+
176
+
177
+ @media screen and (max-width: 500px) {
178
+ .banner_checkout_mp{
179
+ width: 100%;
180
+ margin: 0 0 5px 0;
181
+ }
182
+
183
+ .box-mes {
184
+ width: 100%;
185
+ }
186
+
187
+ .box-ano{
188
+ width: 100%;
189
+ margin: 10px 0 0 0;
190
+ }
191
+
192
+ .box-mes select{
193
+ width: 50%;
194
+ }
195
+ .box-ano select{
196
+ width: 50%;
197
+ }
198
+
199
+ #mercadopago_transparent_doc {
200
+ width: 50%;
201
+ }
202
+
203
+ #status{
204
+ margin: 0 0 10px 0;
205
+ }
206
+
207
+ iframe#checkout_mercadopago{
208
+ float: left;
209
+ width: 100% !important;
210
+ }
211
+
212
+ .form-list.mercadopago{
213
+ float: left;
214
+ min-width: 100%;
215
+ width: 100%;
216
+ margin: 0 15px 0 0px;
217
+ }
218
+ }
219
+
220
+
221
+
222
+
skin/frontend/base/default/mercadopago/images/loading.gif ADDED
Binary file