Eupago_MBWAY - Version 1.0.5

Version Notes

callback compatibility

Download this release

Release Info

Developer Eupago
Extension Eupago_MBWAY
Version 1.0.5
Comparing to
See all releases


Code changes from version 1.0.4 to 1.0.5

app/code/community/Eupago/Mbway/controllers/CallbackController.php CHANGED
@@ -1,13 +1,9 @@
1
  <?php
2
- /*
3
- Mygateway Payment Controller
4
- By: Junaid Bhura
5
- www.junaidbhura.com
6
- */
7
 
8
  class Eupago_Mbway_CallbackController extends Mage_Core_Controller_Front_Action {
9
 
10
- public function mbwayAction() {
 
11
 
12
  // tirar de comentário se pretender validar apenas pedidos post
13
  // if(!$this->getRequest()->isPost())
@@ -16,9 +12,115 @@ class Eupago_Mbway_CallbackController extends Mage_Core_Controller_Front_Action
16
  // carrega dados de callback e encomenda
17
  $callBack_params = (object)$this->getRequest()->getParams();
18
  $order = Mage::getModel('sales/order')->load($callBack_params->identificador, 'increment_id');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  // valida metodo de pagamento
21
- if(!isset($callBack_params->mp) || $callBack_params->mp != 'MBW:PT')
22
  exit("método de pagamento inválido");
23
 
24
  // valida chave API
@@ -47,21 +149,158 @@ class Eupago_Mbway_CallbackController extends Mage_Core_Controller_Front_Action
47
 
48
  // marca como paga ou gera fatura
49
  if($this->validaTransacao($callBack_params, $order)){
50
- //$this->marcaComoPaga($order, $callBack_params->valor); // -> para usar para marcar como paga sem gerar fatura
51
- $this->capture($order);
 
 
52
  }
53
  }
54
 
55
- private function marcaComoPaga($order,$valor_pago){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  $order->setData('state', "complete");
58
  $order->setStatus("processing");
59
  $order->sendOrderUpdateEmail();
60
- $history = $order->addStatusHistoryComment('Encomenda paga por MBWAY.', false);
61
  $history->setIsCustomerNotified(true);
 
 
62
  $order->setTotalPaid($valor_pago);
63
  $order->save();
64
- echo "estado alterado para processing com sucesso";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
 
67
  private function validaTransacao($CallBack, $order){
@@ -87,4 +326,5 @@ class Eupago_Mbway_CallbackController extends Mage_Core_Controller_Front_Action
87
  echo "Pagamento foi capturado com sucesso. e a fatura foi gerada";
88
  }
89
 
 
90
  }
1
  <?php
 
 
 
 
 
2
 
3
  class Eupago_Mbway_CallbackController extends Mage_Core_Controller_Front_Action {
4
 
5
+ // valida todos os metodos de pagamento
6
+ public function allAction(){
7
 
8
  // tirar de comentário se pretender validar apenas pedidos post
9
  // if(!$this->getRequest()->isPost())
12
  // carrega dados de callback e encomenda
13
  $callBack_params = (object)$this->getRequest()->getParams();
14
  $order = Mage::getModel('sales/order')->load($callBack_params->identificador, 'increment_id');
15
+ $method = $order->getPayment()->getMethod();
16
+ $metodo_callback = null;
17
+ switch(urldecode($callBack_params->mp)){
18
+ case 'PC:PT':
19
+ $metodo_callback = "multibanco";
20
+ break;
21
+ case 'MW:PT':
22
+ $metodo_callback = "mbway";
23
+ break;
24
+ default:
25
+ exit("método de pagamento inválido");
26
+ }
27
+
28
+ // valida metodo de pagamento
29
+ if(!isset($callBack_params->mp) || $method != $metodo_callback)
30
+ exit("método de pagamento não corresponde ao da encomenda");
31
+
32
+ // valida chave API
33
+ if($callBack_params->chave_api != Mage::getStoreConfig('payment/'.$metodo_callback.'/chave'))
34
+ exit("chave API inválida");
35
+
36
+ // valida order_id
37
+ if($order->getId() == null)
38
+ exit("a encomenda não existe");
39
+
40
+ // valida estado da encomenda
41
+ if($order->getStatus() == "canceled") // devemos validar se esta completa?
42
+ exit("não foi possivel concluir o pagamento porque o estado da encomenda é: ".$order_status);
43
+
44
+ // valida valor da encomenda -> comentar no caso de premitir pagamento parcial
45
+ if($order->getGrandTotal() != $callBack_params->valor)
46
+ exit ("O valor da encomenda e o valor pago não correspondem!");
47
+
48
+ // verifica se a encomenda já está paga
49
+ if($order->getBaseTotalDue() == 0)
50
+ exit("A encomenda já se encontra paga!");
51
+
52
+ // valida valor por pagar
53
+ if($order->getBaseTotalDue() < $callBack_params->valor)
54
+ exit("O valor a pagamento é inferior ao valor pago!");
55
+
56
+ // marca como paga ou gera fatura
57
+ if($this->validaTransacao($callBack_params, $order)){
58
+ if(class_exists('SOAPClient'))
59
+ $this->capture($order);
60
+ else
61
+ $this->marcaComoPaga($order, $callBack_params->valor, true); // -> para usar para marcar como paga sem gerar fatura
62
+ }
63
+ }
64
+
65
+ public function multibancoAction($params = null) {
66
+
67
+ // tirar de comentário se pretender validar apenas pedidos post
68
+ // if(!$this->getRequest()->isPost())
69
+ // exit("pedido de callback deve ser post");
70
+
71
+ // carrega dados de callback e encomenda
72
+ $callBack_params = ($params == null) ? (object)$this->getRequest()->getParams() : $params;
73
+ $order = Mage::getModel('sales/order')->load($callBack_params->identificador, 'increment_id');
74
+
75
+ // valida metodo de pagamento
76
+ if(!isset($callBack_params->mp) || urldecode($callBack_params->mp) != 'PC:PT')
77
+ exit("método de pagamento inválido");
78
+
79
+ // valida chave API
80
+ if($callBack_params->chave_api != Mage::getStoreConfig('payment/multibanco/chave'))
81
+ exit("chave API inválida");
82
+
83
+ // valida order_id
84
+ if($order->getId() == null)
85
+ exit("a encomenda não existe");
86
+
87
+ // valida estado da encomenda
88
+ if($order->getStatus() == "canceled") // devemos validar se esta completa?
89
+ exit("não foi possivel concluir o pagamento porque o estado da encomenda é: ".$order_status);
90
+
91
+ // valida valor da encomenda -> comentar no caso de premitir pagamento parcial
92
+ if($order->getGrandTotal() != $callBack_params->valor)
93
+ exit ("O valor da encomenda e o valor pago não correspondem!");
94
+
95
+ // verifica se a encomenda já está paga
96
+ if($order->getBaseTotalDue() == 0)
97
+ exit("A encomenda já se encontra paga!");
98
+
99
+ // valida valor por pagar
100
+ if($order->getBaseTotalDue() < $callBack_params->valor)
101
+ exit("O valor a pagamento é inferior ao valor pago!");
102
+
103
+ // marca como paga ou gera fatura
104
+ if($this->validaTransacao($callBack_params, $order)){
105
+ if(class_exists('SOAPClient'))
106
+ $this->capture($order);
107
+ else
108
+ $this->marcaComoPaga($order, $callBack_params->valor, true); // -> para usar para marcar como paga sem gerar fatura
109
+ }
110
+ }
111
+
112
+ public function mbwayAction($params = null) {
113
+
114
+ // tirar de comentário se pretender validar apenas pedidos post
115
+ // if(!$this->getRequest()->isPost())
116
+ // exit("pedido de callback deve ser post");
117
+
118
+ // carrega dados de callback e encomenda
119
+ $callBack_params = ($params == null) ? (object)$this->getRequest()->getParams() : $params;
120
+ $order = Mage::getModel('sales/order')->load($callBack_params->identificador, 'increment_id');
121
 
122
  // valida metodo de pagamento
123
+ if(!isset($callBack_params->mp) || urldecode($callBack_params->mp) != 'MW:PT')
124
  exit("método de pagamento inválido");
125
 
126
  // valida chave API
149
 
150
  // marca como paga ou gera fatura
151
  if($this->validaTransacao($callBack_params, $order)){
152
+ if(class_exists('SOAPClient'))
153
+ $this->capture($order);
154
+ else
155
+ $this->marcaComoPaga($order, $callBack_params->valor, true); // -> para usar para marcar como paga sem gerar fatura
156
  }
157
  }
158
 
159
+ // CALLBACK ANTIGO FICARÁ DEPRECATED NA PROXIMA VERSÃO
160
+ public function autorizeAction(){
161
+
162
+ ///// dados vindos da api para comfirmar
163
+ $CallBack = $this->getRequest()->getParams();
164
+ $CallBack_valor = $CallBack['valor'];
165
+ $CallBack_referencia = $CallBack['referencia'];
166
+ $CallBack_chave_api = $CallBack['chave_api'];
167
+ $CallBack_orderId = $CallBack['identificador'];
168
+ $CallBack_autorizacao = $CallBack['autorizacao'];
169
+
170
+ ////// dados de encomenda
171
+ $OrderNumber = $CallBack_orderId; //$CallBack_orderId vaem da api Eupago[order-id]
172
+ $order = Mage::getModel('sales/order')->load($OrderNumber, 'increment_id');
173
+ $valor_encomenda = $order->grand_total; //retirado do valor total da encomenda
174
+
175
+ /////// dados do pagamento
176
+ $pagamento = $order->getPayment();
177
+
178
+ // se não existir dados de pagamento antigos chama o novo callback
179
+ if($pagamento->eupago_referencia == null || $pagamento->eupago_referencia == "" ){
180
+ // carrega dados de callback e encomenda
181
+ $callBack_params = (object)$CallBack;
182
+ $method = $order->getPayment()->getMethod();
183
+ $metodo_callback = null;
184
+ switch(urldecode($callBack_params->mp)){
185
+ case 'PC:PT':
186
+ $metodo_callback = "multibanco";
187
+ break;
188
+ case 'MW:PT':
189
+ $metodo_callback = "mbway";
190
+ break;
191
+ default:
192
+ exit("método de pagamento inválido");
193
+ }
194
+
195
+ // valida metodo de pagamento
196
+ if(!isset($callBack_params->mp) || $method != $metodo_callback)
197
+ exit("método de pagamento não corresponde ao da encomenda");
198
+
199
+ // valida chave API
200
+ if($callBack_params->chave_api != Mage::getStoreConfig('payment/'.$metodo_callback.'/chave'))
201
+ exit("chave API inválida");
202
+
203
+ // valida order_id
204
+ if($order->getId() == null)
205
+ exit("a encomenda não existe");
206
+
207
+ // valida estado da encomenda
208
+ if($order->getStatus() == "canceled") // devemos validar se esta completa?
209
+ exit("não foi possivel concluir o pagamento porque o estado da encomenda é: ".$order_status);
210
+
211
+ // valida valor da encomenda -> comentar no caso de premitir pagamento parcial
212
+ if($order->getGrandTotal() != $callBack_params->valor)
213
+ exit ("O valor da encomenda e o valor pago não correspondem!");
214
+
215
+ // verifica se a encomenda já está paga
216
+ if($order->getBaseTotalDue() == 0)
217
+ exit("A encomenda já se encontra paga!");
218
+
219
+ // valida valor por pagar
220
+ if($order->getBaseTotalDue() < $callBack_params->valor)
221
+ exit("O valor a pagamento é inferior ao valor pago!");
222
+
223
+ // marca como paga ou gera fatura
224
+ if($this->validaTransacao($callBack_params, $order)){
225
+ if(class_exists('SOAPClient'))
226
+ $this->capture($order);
227
+ else
228
+ $this->marcaComoPaga($order, $callBack_params->valor, true); // -> para usar para marcar como paga sem gerar fatura
229
+ }
230
+ return;
231
+ }
232
+
233
+ /////// dados do pagamento antigos
234
+ $entidade = $pagamento->eupago_entidade;
235
+ $referencia = str_pad($pagamento->eupago_referencia, 9, "0", STR_PAD_LEFT);
236
+ $valor_gerado = $pagamento->eupago_montante;
237
 
238
+ /////// gera autorizacao
239
+ $chave_api = Mage::getStoreConfig('payment/multibanco/chave');
240
+ $autorizacao = md5(date('Y-m-d').$chave_api);
241
+
242
+ //////// Confere dados
243
+ $confere_montantes = (($valor_encomenda == $valor_gerado) == $CallBack_valor ? true : false);
244
+ $confere_autorizacao = ($autorizacao == $CallBack_autorizacao ? true : false);
245
+ $confere_referencia = ($referencia == $CallBack_referencia ? true : false);
246
+ $confere_chave_api = ($CallBack_chave_api == $chave_api ? true : false);
247
+
248
+
249
+ ////// se tudo ok, faz o update do estado da encomenda e envia um email ao cliente
250
+ if($confere_montantes && $confere_chave_api && $confere_referencia){ /*futuro upgrade -> $confere_autorizacao*/
251
+
252
+ $order->setData('state', "complete");
253
+ $order->setStatus("processing");
254
+ $order->sendOrderUpdateEmail();
255
+
256
+ //////// hack for generate invoice automatically
257
+ $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
258
+ if (!$invoice->getTotalQty()) {
259
+ Mage::throwException(Mage::helper('core')->__('Cannot create an invoice without products.'));
260
+ }
261
+ $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
262
+ $invoice->register();
263
+ $transactionSave = Mage::getModel('core/resource_transaction')
264
+ ->addObject($invoice)
265
+ ->addObject($invoice->getOrder());
266
+ $transactionSave->save();
267
+ ////////////////
268
+
269
+ $history = $order->addStatusHistoryComment('Order marked as complete automatically.', false);
270
+ $history->setIsCustomerNotified(true);
271
+ $order->save();
272
+
273
+ echo "alterado para pago..";
274
+ }else{
275
+ echo "os valores de pagamento não correspondem com os da encomenda";
276
+ }
277
+ }
278
+
279
+ private function marcaComoPaga($order,$valor_pago,$geraFatura = false){
280
  $order->setData('state', "complete");
281
  $order->setStatus("processing");
282
  $order->sendOrderUpdateEmail();
283
+ $history = $order->addStatusHistoryComment('Encomenda paga por MULTIBANCO.', false);
284
  $history->setIsCustomerNotified(true);
285
+ if($geraFatura)
286
+ $this->geraFatura($order);
287
  $order->setTotalPaid($valor_pago);
288
  $order->save();
289
+ echo "estado alterado para processing com sucesso. e gerada fatura sem transação";
290
+ }
291
+
292
+ private function geraFatura($order){
293
+ //////// hack para gerar fatura sem transação automaticamente
294
+ $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
295
+ if (!$invoice->getTotalQty()) {
296
+ Mage::throwException(Mage::helper('core')->__('Cannot create an invoice without products.'));
297
+ }
298
+ $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
299
+ $invoice->register();
300
+ $transactionSave = Mage::getModel('core/resource_transaction')
301
+ ->addObject($invoice)
302
+ ->addObject($invoice->getOrder());
303
+ $transactionSave->save();
304
  }
305
 
306
  private function validaTransacao($CallBack, $order){
326
  echo "Pagamento foi capturado com sucesso. e a fatura foi gerada";
327
  }
328
 
329
+
330
  }
app/code/community/Eupago/Mbway/etc/config.xml CHANGED
@@ -23,7 +23,7 @@
23
  <use>standard</use>
24
  <args>
25
  <module>Eupago_Mbway</module>
26
- <frontName>Eupago</frontName>
27
  </args>
28
  </Eupago_Mbway>
29
  </routers>
23
  <use>standard</use>
24
  <args>
25
  <module>Eupago_Mbway</module>
26
+ <frontName>mbway</frontName>
27
  </args>
28
  </Eupago_Mbway>
29
  </routers>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Eupago_MBWAY</name>
4
- <version>1.0.4</version>
5
  <stability>stable</stability>
6
  <license>GNU General Public License (GPL)</license>
7
  <channel>community</channel>
@@ -11,11 +11,11 @@
11
  &#xD;
12
  [EN] - Allow payments by mbway app&#xD;
13
  </description>
14
- <notes>fix images</notes>
15
  <authors><author><name>Eupago</name><user>eupago</user><email>suporte@eupago.pt</email></author></authors>
16
- <date>2016-12-07</date>
17
- <time>18:50:56</time>
18
- <contents><target name="magecommunity"><dir name="Eupago"><dir name="Mbway"><dir name="Block"><dir name="Form"><file name="Mbway.php" hash="87f0784cd78d5ce7cfbe532133070d15"/></dir><dir name="Info"><file name="Mbway.php" hash="acadf6f16d5b118124f723ca49aa45be"/></dir></dir><dir name="Model"><file name="Mbway.php" hash="68a6d4f4072a31bd1c94f478ac6a9f17"/><dir name="System"><dir name="Config"><file name="Template.php" hash="718050382dd9d91d291e7827f3267b8e"/></dir></dir></dir><dir name="controllers"><file name="CallbackController.php" hash="162e06ac5e37ae219b2ad83ff3fb38e9"/></dir><dir name="etc"><file name="config.xml" hash="1aa33d93a198cb5ccb97233b3563e453"/><file name="system.xml" hash="033bf9badb6cde28ffb67982a3c821aa"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Eupago_Mbway.xml" hash="1a844093c055d916fc3cc16fa9c86f64"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="eupago"><dir name="mbway"><dir name="form"><file name="default.phtml" hash="2325880e1c94f851c8379996786e128f"/><file name="mbway.phtml" hash="3ca1a607601ca50e70b75ad625032cd9"/></dir><dir name="info"><file name="default.phtml" hash="df73cde94c9f2d9e189396ffe9afbaa3"/><file name="mbway.phtml" hash="cab1c28cdf664e28c496ad8ea4edc5a0"/></dir></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="eupago"><dir name="mbway"><dir name="form"><file name="mbway.phtml" hash="1fa44aab0a61a78c9a2abf4604264db2"/></dir><dir name="info"><file name="mbway.phtml" hash="2486d82ad350cd29d0640ba8799280c0"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="eupago"><dir name="mbway"><file name="MBWAY_RGB_negativo_m.png" hash="71de2353d68621b7ae1d66bb38b63b12"/><file name="MBWAY_RGB_negativo_s.png" hash="71f9710d7968c845d6344d5354b39c46"/><file name="MBWAY_RGB_positivo_m.png" hash="dd01c36caee3bca598831a26eae35aa5"/><file name="MBWAY_RGB_positivo_s.png" hash="1b8445fc5ec6b202c91ec67490a89315"/><file name="mbway_icon.png" hash="c8d7cee9ee9ca2f30eda5dec00d279bc"/></dir></dir></dir></dir></dir></dir></target></contents>
19
  <compatible/>
20
  <dependencies><required><php><min>5.2.0</min><max>7.0.0</max></php></required></dependencies>
21
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Eupago_MBWAY</name>
4
+ <version>1.0.5</version>
5
  <stability>stable</stability>
6
  <license>GNU General Public License (GPL)</license>
7
  <channel>community</channel>
11
  &#xD;
12
  [EN] - Allow payments by mbway app&#xD;
13
  </description>
14
+ <notes>callback compatibility</notes>
15
  <authors><author><name>Eupago</name><user>eupago</user><email>suporte@eupago.pt</email></author></authors>
16
+ <date>2016-12-19</date>
17
+ <time>14:52:49</time>
18
+ <contents><target name="magecommunity"><dir name="Eupago"><dir name="Mbway"><dir name="Block"><dir name="Form"><file name="Mbway.php" hash="87f0784cd78d5ce7cfbe532133070d15"/></dir><dir name="Info"><file name="Mbway.php" hash="acadf6f16d5b118124f723ca49aa45be"/></dir></dir><dir name="Model"><file name="Mbway.php" hash="68a6d4f4072a31bd1c94f478ac6a9f17"/><dir name="System"><dir name="Config"><file name="Template.php" hash="718050382dd9d91d291e7827f3267b8e"/></dir></dir></dir><dir name="controllers"><file name="CallbackController.php" hash="0b63ffd1b5112cc2b0341de1983264c1"/></dir><dir name="etc"><file name="config.xml" hash="83bb95028c20e760540f99b6617d8e5b"/><file name="system.xml" hash="033bf9badb6cde28ffb67982a3c821aa"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Eupago_Mbway.xml" hash="1a844093c055d916fc3cc16fa9c86f64"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="eupago"><dir name="mbway"><dir name="form"><file name="default.phtml" hash="2325880e1c94f851c8379996786e128f"/><file name="mbway.phtml" hash="3ca1a607601ca50e70b75ad625032cd9"/></dir><dir name="info"><file name="default.phtml" hash="df73cde94c9f2d9e189396ffe9afbaa3"/><file name="mbway.phtml" hash="cab1c28cdf664e28c496ad8ea4edc5a0"/></dir></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="eupago"><dir name="mbway"><dir name="form"><file name="mbway.phtml" hash="1fa44aab0a61a78c9a2abf4604264db2"/></dir><dir name="info"><file name="mbway.phtml" hash="2486d82ad350cd29d0640ba8799280c0"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="eupago"><dir name="mbway"><file name="MBWAY_RGB_negativo_m.png" hash="71de2353d68621b7ae1d66bb38b63b12"/><file name="MBWAY_RGB_negativo_s.png" hash="71f9710d7968c845d6344d5354b39c46"/><file name="MBWAY_RGB_positivo_m.png" hash="dd01c36caee3bca598831a26eae35aa5"/><file name="MBWAY_RGB_positivo_s.png" hash="1b8445fc5ec6b202c91ec67490a89315"/><file name="mbway_icon.png" hash="c8d7cee9ee9ca2f30eda5dec00d279bc"/></dir></dir></dir></dir></dir></dir></target></contents>
19
  <compatible/>
20
  <dependencies><required><php><min>5.2.0</min><max>7.0.0</max></php></required></dependencies>
21
  </package>