Ferratum_Ferbuy - Version 1.0.0

Version Notes

1.0.0:
Initial release
Tested on Magento v1.6.1.0

Download this release

Release Info

Developer Magento Core Team
Extension Ferratum_Ferbuy
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

app/code/local/Ferratum/Ferbuy/Block/Redirect.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento Ferbuy payment extension
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @category Mage
13
+ * @package Ferratum_Ferbuy
14
+ * @author Pavel Saparov, <info@ferbuy.com>
15
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+
19
+ class Ferratum_Ferbuy_Block_Redirect extends Mage_Core_Block_Template
20
+ {
21
+ protected function _construct()
22
+ {
23
+ $this->setTemplate('ferbuy/redirect.phtml');
24
+ }
25
+
26
+ public function getForm()
27
+ {
28
+ $model = Mage::getModel('ferbuy/ferbuy');
29
+
30
+ $form = new Varien_Data_Form();
31
+ $form->setAction($model->getGatewayUrl())
32
+ ->setId('ferbuy_checkout')
33
+ ->setName('ferbuy_checkout')
34
+ ->setMethod('POST')
35
+ ->setUseContainer(true);
36
+
37
+ foreach ($model->getCheckoutFormFields() as $field => $value) {
38
+ $form->addField($field, 'hidden', array('name' => $field, 'value' => $value));
39
+ }
40
+
41
+ return $form->getHtml();
42
+ }
43
+ }
app/code/local/Ferratum/Ferbuy/Helper/Data.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento Ferbuy payment extension
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @category Mage
13
+ * @package Ferratum_Ferbuy
14
+ * @author Pavel Saparov, <info@ferbuy.com>
15
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+
19
+ class Ferratum_Ferbuy_Helper_Data extends Mage_Core_Helper_Abstract
20
+ {
21
+
22
+ }
app/code/local/Ferratum/Ferbuy/Model/Adminhtml/System/Config/Source/Modes.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento Ferbuy payment extension
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @category Mage
13
+ * @package Ferratum_Ferbuy
14
+ * @author Pavel Saparov, <info@ferbuy.com>
15
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+
19
+ class Ferratum_Ferbuy_Model_Adminhtml_System_Config_Source_Modes
20
+ {
21
+ public function toOptionArray() {
22
+ return array(
23
+ array(
24
+ "value" => "demo",
25
+ "label" => Mage::helper("ferbuy")->__("Demo Mode")
26
+ ),
27
+ array(
28
+ "value" => "live",
29
+ "label" => Mage::helper("ferbuy")->__("Live Mode")
30
+ ),
31
+ );
32
+ }
33
+ }
app/code/local/Ferratum/Ferbuy/Model/Base.php ADDED
@@ -0,0 +1,369 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento Ferbuy payment extension
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @category Mage
13
+ * @package Ferratum_Ferbuy
14
+ * @author Pavel Saparov, <info@ferbuy.com>
15
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+
19
+ class Ferratum_Ferbuy_Model_Base extends Varien_Object
20
+ {
21
+ protected $_callback;
22
+ protected $_config = null;
23
+ protected $_isLocked = false;
24
+ protected $_logFileName = "ferbuy.log";
25
+
26
+ /**
27
+ * Initialize basic ferbuy settings
28
+ */
29
+ public function _construct() {
30
+ parent::_construct();
31
+ $this->_config = Mage::getStoreConfig('ferbuy/settings');
32
+ }
33
+
34
+ /**
35
+ * Retrieve config value
36
+ *
37
+ * @param string $field
38
+ * @return mixed
39
+ */
40
+ public function getConfigData($field)
41
+ {
42
+ if (isset($this->_config[$field])) {
43
+ return $this->_config[$field];
44
+ } else {
45
+ return false;
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Set callback data
51
+ *
52
+ * @param array $data
53
+ * @return Ferratum_Ferbuy_Model_Base
54
+ */
55
+ public function setCallbackData($data)
56
+ {
57
+ $this->_callback = $data;
58
+ return $this;
59
+ }
60
+
61
+ /**
62
+ * Get callback data
63
+ *
64
+ * @param string $field
65
+ * @return string
66
+ */
67
+ public function getCallbackData($field = null)
68
+ {
69
+ if ($field === null) {
70
+ return $this->_callback;
71
+ } else {
72
+ return @$this->_callback[$field];
73
+ }
74
+ }
75
+
76
+ /**
77
+ * If the debug mode is enabled
78
+ *
79
+ * @return bool
80
+ */
81
+ public function isDebug()
82
+ {
83
+ return $this->getConfigData('debug');
84
+ }
85
+
86
+ /**
87
+ * If the live mode is enabled
88
+ *
89
+ * @return bool
90
+ */
91
+ public function isLive()
92
+ {
93
+ return ($this->getConfigData('live_mode') == 'live');
94
+ }
95
+
96
+ /**
97
+ * Log data into the logfile
98
+ *
99
+ * @param string $msg
100
+ * @return void
101
+ */
102
+ public function log($msg)
103
+ {
104
+ if ($this->getConfigData('debug')) {
105
+ Mage::log($msg, null, $this->_logFileName);
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Create lock file
111
+ *
112
+ * @return Ferratum_Ferbuy_Model_Base
113
+ */
114
+ public function lock()
115
+ {
116
+ $varDir = Mage::getConfig()->getVarDir('locks');
117
+ $lockFilename = $varDir . DS . $this->getCallbackData('reference') . '.lock';
118
+ $fp = @fopen($lockFilename, 'x');
119
+
120
+ if ($fp) {
121
+ $this->_isLocked = true;
122
+ $pid = getmypid();
123
+ $now = date('Y-m-d H:i:s');
124
+ fwrite($fp, "Locked by $pid at $now\n");
125
+ }
126
+
127
+ return $this;
128
+ }
129
+
130
+ /**
131
+ * Unlock file
132
+ *
133
+ * @return Ferratum_Ferbuy_Model_Base
134
+ */
135
+ public function unlock()
136
+ {
137
+ $this->_isLocked = false;
138
+ $varDir = Mage::getConfig()->getVarDir('locks');
139
+ $lockFilename = $varDir . DS . $this->getCallbackData('reference') . '.lock';
140
+ unlink($lockFilename);
141
+
142
+ return $this;
143
+ }
144
+
145
+ /**
146
+ * Create and mail invoice
147
+ *
148
+ * @param Mage_Sales_Model_Order $order
149
+ * @return boolean
150
+ */
151
+ protected function createInvoice(Mage_Sales_Model_Order $order)
152
+ {
153
+ if ($order->canInvoice() && !$order->hasInvoices()) {
154
+ $invoice = $order->prepareInvoice();
155
+ $invoice->register();
156
+ if ($invoice->canCapture()) {
157
+ $invoice->capture();
158
+ }
159
+ $invoice->save();
160
+
161
+ Mage::getModel("core/resource_transaction")
162
+ ->addObject($invoice)
163
+ ->addObject($invoice->getOrder())
164
+ ->save();
165
+
166
+ $mail_invoice = $this->getConfigData("mail_invoice");
167
+ if ($mail_invoice) {
168
+ $invoice->setEmailSent(true);
169
+ $invoice->save();
170
+ $invoice->sendEmail();
171
+ }
172
+
173
+ $statusMessage = $mail_invoice ? "Invoice # %s created and send to customer." : "Invoice # %s created.";
174
+ $order->addStatusToHistory(
175
+ $order->getStatus(),
176
+ Mage::helper("ferbuy")->__($statusMessage, $invoice->getIncrementId(),
177
+ $mail_invoice)
178
+ );
179
+
180
+ return true;
181
+ }
182
+
183
+ return false;
184
+ }
185
+
186
+ /**
187
+ * Notify shop owners on failed invoice creation
188
+ *
189
+ * @param Mage_Sales_Model_Order $order
190
+ * @return void
191
+ */
192
+ protected function onFailedInvoicing($order) {
193
+ $storeId = $order->getStore()->getId();
194
+
195
+ $ident = Mage::getStoreConfig('ferbuy/settings/notification_email');
196
+ $sender_email = Mage::getStoreConfig('trans_email/ident_general/email', $storeId);
197
+ $sender_name = Mage::getStoreConfig('trans_email/ident_general/name', $storeId);
198
+ $recipient_email = Mage::getStoreConfig('trans_email/ident_'.$ident.'/email', $storeId);
199
+ $recipient_name = Mage::getStoreConfig('trans_email/ident_'.$ident.'/name', $storeId);
200
+
201
+ $mail = new Zend_Mail();
202
+ $mail->setFrom($sender_email, $sender_name);
203
+ $mail->addTo($recipient_email, $recipient_name);
204
+ $mail->setSubject(Mage::helper("ferbuy")->__('Automatic invoice creation failed'));
205
+ $mail->setBodyText(Mage::helper("ferbuy")->__('Magento was unable to create an invoice for Order # %s after a successful payment via FerBuy (transaction # %s)', $order->getIncrementId(), $this->getCallbackData('transaction_id')));
206
+ $mail->setBodyHtml(Mage::helper("ferbuy")->__('Magento was unable to create an invoice for <b>Order # %s</b> after a successful payment via FerBuy <b>(transaction # %s)</b>', $order->getIncrementId(), $this->getCallbackData('transaction_id')));
207
+ $mail->send();
208
+ }
209
+
210
+ /**
211
+ * Returns true if the amounts match
212
+ *
213
+ * @param Mage_Sales_Model_Order $order
214
+ * @return boolean
215
+ */
216
+ protected function validateAmount(Mage_Sales_Model_Order $order)
217
+ {
218
+ $amountInCents = (int) sprintf('%.0f', $order->getGrandTotal()*100);
219
+ $callbackAmount = (int) $this->getCallbackData('amount');
220
+
221
+ if (($amountInCents != $callbackAmount) && (abs($callbackAmount - $amountInCents) > 1)) {
222
+ $this->log("OrderID: {$order->getId()} do not match amounts. Sent $amountInCents, Received: $callbackAmount");
223
+ $statusMessage = Mage::helper("ferbuy")->__("Hacker attempt: Order total amount does not match FerBuy's gross total amount!");
224
+ $order->addStatusToHistory($order->getStatus(), $statusMessage);
225
+ $order->save();
226
+ return false;
227
+ }
228
+
229
+ return true;
230
+ }
231
+
232
+ /**
233
+ * Process callback for all transactions
234
+ *
235
+ * @return void
236
+ */
237
+ public function processCallback()
238
+ {
239
+ $id = $this->getCallbackData('reference');
240
+ $order = Mage::getModel('sales/order');
241
+ $order->loadByIncrementId($id);
242
+
243
+ // Log callback data
244
+ $this->log('Receiving callback data:');
245
+ $this->log($this->getCallbackData());
246
+
247
+ // Validate amount
248
+ if (!$this->validateAmount($order)) {
249
+ $this->log('Amount validation failed!');
250
+ exit();
251
+ }
252
+
253
+ $statusComplete = $this->getConfigData("complete_status");
254
+ $statusFailed = $this->getConfigData("failed_status");
255
+ $statusFraud = $this->getConfigData("fraud_status");
256
+ $autocreateInvoice = $this->getConfigData("autocreate_invoice");
257
+ $evInvoicingFailed = $this->getConfigData("event_invoicing_failed");
258
+
259
+ $complete = false;
260
+ $canceled = false;
261
+ $newState = null;
262
+ $newStatus = true;
263
+ $statusMessage = '';
264
+
265
+ switch ($this->getCallbackData('status')) {
266
+ case "200":
267
+ $complete = true;
268
+ $newState = Mage_Sales_Model_Order::STATE_PROCESSING;
269
+ $newStatus = $statusComplete;
270
+ $statusMessage = Mage::helper("ferbuy")->__("Transaction complete.");
271
+ break;
272
+ case "400":
273
+ $canceled = true;
274
+ $newState = Mage_Sales_Model_Order::STATE_CANCELED;
275
+ $newStatus = $statusFailed;
276
+ $statusMessage = Mage::helper("ferbuy")->__("Transaction failed.");
277
+ break;
278
+ case "408":
279
+ $canceled = true;
280
+ $newState = Mage_Sales_Model_Order::STATE_CANCELED;
281
+ $newStatus = $statusFraud;
282
+ $statusMessage = Mage::helper("ferbuy")->__("Transaction timed out.");
283
+ break;
284
+ case "410":
285
+ $canceled = true;
286
+ $newState = Mage_Sales_Model_Order::STATE_CANCELED;
287
+ $newStatus = $statusFailed;
288
+ $statusMessage = Mage::helper("ferbuy")->__("Transaction canceled by user.");
289
+ break;
290
+ }
291
+
292
+ // Update only certain states
293
+ $canUpdate = false;
294
+ $undoCancel = false;
295
+ if ($order->getState() == Mage_Sales_Model_Order::STATE_NEW ||
296
+ $order->getState() == Mage_Sales_Model_Order::STATE_PENDING_PAYMENT ||
297
+ $order->getState() == Mage_Sales_Model_Order::STATE_PROCESSING ||
298
+ $order->getState() == Mage_Sales_Model_Order::STATE_CANCELED) {
299
+ $canUpdate = true;
300
+ }
301
+
302
+ foreach ($order->getStatusHistoryCollection(true) as $_item) {
303
+ // Don't update order status if the payment is complete
304
+ if ($_item->getStatusLabel() == ucfirst($statusComplete)) {
305
+ $canUpdate = false;
306
+ // Uncancel an order if the payment is considered complete
307
+ } elseif (($_item->getStatusLabel() == ucfirst($statusFailed)) ||
308
+ ($_item->getStatusLabel() == ucfirst($statusFraud))) {
309
+ $undoCancel = true;
310
+ }
311
+ }
312
+
313
+ // Lock
314
+ $this->lock();
315
+
316
+ // Uncancel order if necessary
317
+ if ($undoCancel) {
318
+ foreach($order->getAllItems() as $_item) {
319
+ if ($_item->getQtyCanceled() > 0) $_item->setQtyCanceled(0)->save();
320
+ if ($_item->getQtyInvoiced() > 0) $_item->setQtyInvoiced(0)->save();
321
+ }
322
+
323
+ $order->setBaseDiscountCanceled(0)
324
+ ->setBaseShippingCanceled(0)
325
+ ->setBaseSubtotalCanceled(0)
326
+ ->setBaseTaxCanceled(0)
327
+ ->setBaseTotalCanceled(0)
328
+ ->setDiscountCanceled(0)
329
+ ->setShippingCanceled(0)
330
+ ->setSubtotalCanceled(0)
331
+ ->setTaxCanceled(0)
332
+ ->setTotalCanceled(0);
333
+ }
334
+
335
+ // Update the status if changed
336
+ if ($canUpdate && (($newState != $order->getState()) || ($newStatus != $order->getStatus()))) {
337
+ // Set order state and status
338
+ $order->setState($newState, $newStatus, $statusMessage);
339
+ $this->log("Changing state to '$newState' with message '$statusMessage' for order ID: $id.");
340
+
341
+ // Send new order e-mail
342
+ if ($complete && !$canceled && !$order->getEmailSent()) {
343
+ $order->setEmailSent(true);
344
+ $order->sendNewOrderEmail();
345
+ }
346
+
347
+ // Save order status changes
348
+ $order->save();
349
+
350
+ // Create an invoice when the payment is completed
351
+ if ($complete && !$canceled && $autocreateInvoice) {
352
+ $invoiceCreated = $this->createInvoice($order);
353
+ if ($invoiceCreated) {
354
+ $this->log("Creating invoice for order ID: $id.");
355
+ } else {
356
+ $this->log("Unable to create invoice for order ID: $id.");
357
+ }
358
+
359
+ // Send notification
360
+ if (!$invoiceCreated && $evInvoicingFailed) {
361
+ $this->eventInvoicingFailed($order);
362
+ }
363
+ }
364
+ }
365
+
366
+ // Unlock
367
+ $this->unlock();
368
+ }
369
+ }
app/code/local/Ferratum/Ferbuy/Model/Ferbuy.php ADDED
@@ -0,0 +1,216 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento Ferbuy payment extension
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @category Mage
13
+ * @package Ferratum_Ferbuy
14
+ * @author Pavel Saparov, <info@ferbuy.com>
15
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+
19
+ class Ferratum_Ferbuy_Model_Ferbuy extends Mage_Payment_Model_Method_Abstract
20
+ {
21
+ /**
22
+ * Payment Method features
23
+ *
24
+ * @var mixed
25
+ */
26
+ protected $_code = 'ferbuy';
27
+
28
+ /**
29
+ * FerBuy settings
30
+ *
31
+ * @var mixed
32
+ */
33
+ protected $_url = 'https://gateway.ferbuy.com/';
34
+ protected $_supportedCurrencies = array('SGD', 'PLN', 'CZK');
35
+
36
+ /**
37
+ * Mage_Payment_Model settings
38
+ *
39
+ * @var bool
40
+ */
41
+ protected $_isGateway = true;
42
+ protected $_canAuthorize = true;
43
+ protected $_canCapture = true;
44
+ protected $_canUseInternal = false;
45
+ protected $_canUseCheckout = true;
46
+ protected $_canUseForMultishipping = true;
47
+
48
+ /**
49
+ * Return Gateway Url
50
+ *
51
+ * @return string
52
+ */
53
+ public function getGatewayUrl()
54
+ {
55
+ $base = Mage::getSingleton('ferbuy/base');
56
+ $env = ($base->isLive()) ? 'live/' : 'demo/';
57
+
58
+ return $this->_url . $env;
59
+ }
60
+
61
+ /**
62
+ * Get plugin version to send to gateway (debugging purposes)
63
+ *
64
+ * @return string
65
+ */
66
+ public function getPluginVersion()
67
+ {
68
+ return (string) Mage::getConfig()->getNode('modules/Ferratum_Ferbuy/version');
69
+ }
70
+
71
+ /**
72
+ * Get checkout session namespace
73
+ *
74
+ * @return Mage_Checkout_Model_Session
75
+ */
76
+ public function getCheckout()
77
+ {
78
+ return Mage::getSingleton('checkout/session');
79
+ }
80
+
81
+ /**
82
+ * Get current quote
83
+ *
84
+ * @return Mage_Sales_Model_Quote
85
+ */
86
+ public function getQuote()
87
+ {
88
+ return $this->getCheckout()->getQuote();
89
+ }
90
+
91
+ /**
92
+ * Get current order
93
+ *
94
+ * @return Mage_Sales_Model_Order
95
+ */
96
+ public function getOrder()
97
+ {
98
+ $order = Mage::getModel('sales/order');
99
+ $order->loadByIncrementId($this->getCheckout()->getLastRealOrderId());
100
+ return $order;
101
+ }
102
+
103
+ /**
104
+ * Magento will use this for payment redirection
105
+ *
106
+ * @return string
107
+ */
108
+ public function getOrderPlaceRedirectUrl()
109
+ {
110
+ return Mage::getUrl('ferbuy/payment/redirect/', array('_secure' => true));
111
+ }
112
+
113
+ /**
114
+ * Retrieve config value for store by path
115
+ *
116
+ * @param string $path
117
+ * @param mixed $store
118
+ * @return mixed
119
+ */
120
+ public function getConfigData($field, $storeId = null)
121
+ {
122
+ if ($storeId === null) {
123
+ $storeId = $this->getStore();
124
+ }
125
+
126
+ $configSettings = Mage::getStoreConfig('ferbuy/settings', $storeId);
127
+ $configGateway = Mage::getStoreConfig('ferbuy/ferbuy', $storeId);
128
+ $config = array_merge($configSettings, $configGateway);
129
+
130
+ return @$config[$field];
131
+ }
132
+
133
+ /**
134
+ * Check method for processing with base currency
135
+ *
136
+ * @param string $currencyCode
137
+ * @return boolean
138
+ */
139
+ public function canUseForCurrency($currencyCode)
140
+ {
141
+ return in_array($currencyCode, $this->_supportedCurrencies);
142
+ }
143
+
144
+ /**
145
+ * Change order status
146
+ *
147
+ * @param Mage_Sales_Model_Order $order
148
+ * @return void
149
+ */
150
+ protected function initiateTransactionStatus($order)
151
+ {
152
+ // Change order status
153
+ $newState = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
154
+ $newStatus = $this->getConfigData('initialized_status');
155
+ $statusMessage = Mage::helper('ferbuy')->__('Transaction started, waiting for payment.');
156
+ $order->setState($newState, $newStatus, $statusMessage);
157
+ $order->save();
158
+ }
159
+
160
+ /**
161
+ * Generates checkout form fields
162
+ *
163
+ * @return array
164
+ */
165
+ public function getCheckoutFormFields()
166
+ {
167
+ $base = Mage::getSingleton('ferbuy/base');
168
+
169
+ $order = $this->getOrder();
170
+ $customer = $order->getBillingAddress();
171
+
172
+ // Add initiate state
173
+ $this->initiateTransactionStatus($order);
174
+
175
+ $s_arr = array();
176
+ $s_arr['site_id'] = $this->getConfigData('site_id');
177
+ $s_arr['reference'] = $order->getIncrementId();
178
+ $s_arr['amount'] = sprintf('%.0f', $order->getGrandTotal() * 100);
179
+ $s_arr['currency'] = $order->getOrderCurrencyCode();
180
+ $s_arr['first_name'] = $customer->getFirstname();
181
+ $s_arr['last_name'] = $customer->getLastname();
182
+ $s_arr['email_address'] = $order->getCustomerEmail();
183
+ $s_arr['address'] = $customer->getStreet(1);
184
+ $s_arr['address_line2'] = $customer->getStreet(2);
185
+ $s_arr['city'] = $customer->getCity();
186
+ $s_arr['country_iso'] = $customer->getCountry();
187
+ $s_arr['postal_code'] = $customer->getPostcode();
188
+ $s_arr['mobile_phone'] = $customer->getTelephone();
189
+ $s_arr['return_url_ok'] = Mage::getUrl('ferbuy/payment/success/', array('_secure' => true));
190
+ $s_arr['return_url_cancel'] = Mage::getUrl('ferbuy/payment/cancel/', array('_secure' => true));
191
+ $s_arr['shop_version'] = 'Magento '. Mage::getVersion();
192
+ $s_arr['plugin_name'] = 'Ferratum_Ferbuy';
193
+ $s_arr['plugin_version'] = $this->getPluginVersion();
194
+ //$s_arr['extra'] = $this->getCheckout()->getFerbuyQuoteId();
195
+
196
+ $env = ($base->isLive()) ? 'live' : 'demo';
197
+ $s_arr['checksum'] = sha1(join("&", array(
198
+ $env,
199
+ $s_arr['site_id'],
200
+ $s_arr['reference'],
201
+ $s_arr['currency'],
202
+ $s_arr['amount'],
203
+ $s_arr['first_name'],
204
+ $s_arr['last_name'],
205
+ $this->getConfigData('hash_key')
206
+ )));
207
+
208
+ // Logging
209
+ $base->log('Initiating a new transaction');
210
+ $base->log('Sending customer to FerBuy with values:');
211
+ $base->log('URL = ' . $this->getGatewayUrl());
212
+ $base->log($s_arr);
213
+
214
+ return $s_arr;
215
+ }
216
+ }
app/code/local/Ferratum/Ferbuy/controllers/PaymentController.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento Ferbuy payment extension
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @category Mage
13
+ * @package Ferratum_Ferbuy
14
+ * @author Pavel Saparov, <info@ferbuy.com>
15
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+
19
+ class Ferratum_Ferbuy_PaymentController extends Mage_Core_Controller_Front_Action
20
+ {
21
+ /**
22
+ * Verify the callback
23
+ *
24
+ * @param array $data
25
+ * @return boolean
26
+ */
27
+ protected function _validate($data)
28
+ {
29
+ $base = Mage::getSingleton('ferbuy/base');
30
+ $env = $base->isLive() ? 'live' : 'demo';
31
+
32
+ $verify = join("&", array(
33
+ $env,
34
+ $data['reference'],
35
+ $data['transaction_id'],
36
+ $data['status'],
37
+ $data['currency'],
38
+ $data['amount'],
39
+ $base->getConfigData('hash_key')
40
+ ));
41
+
42
+ if (sha1($verify) == $data['checksum']) {
43
+ return true;
44
+ }
45
+
46
+ return false;
47
+ }
48
+
49
+ /**
50
+ * Reditect customer to the gateway using his prefered payment method
51
+ */
52
+ public function redirectAction()
53
+ {
54
+ $session = Mage::getSingleton('checkout/session');
55
+ $session->setFerbuyQuoteId($session->getQuoteId());
56
+
57
+ $this->loadLayout();
58
+ $block = $this->getLayout()->createBlock(
59
+ 'Ferratum_Ferbuy_Block_Redirect'
60
+ );
61
+
62
+ $this->getLayout()->getBlock('content')->append($block);
63
+ $this->renderLayout();
64
+ }
65
+
66
+ /**
67
+ * After a failed transaction a customer will be send here
68
+ */
69
+ public function cancelAction()
70
+ {
71
+ $base = Mage::getSingleton('ferbuy/base');
72
+ $session = Mage::getSingleton('checkout/session');
73
+
74
+ $order_id = $session->getLastRealOrderId();
75
+ $order = Mage::getSingleton('sales/order')->loadByIncrementId($order_id);
76
+ if ($order_id) {
77
+ $order->setState($base->getConfigData('order_status_failed'));
78
+ $order->cancel();
79
+ $order->save();
80
+ }
81
+
82
+ $quote = Mage::getModel('sales/quote')->load($session->getFerbuyQuoteId());
83
+ if ($quote->getId()) {
84
+ $quote->setIsActive(true);
85
+ $quote->save();
86
+ }
87
+
88
+ $this->_redirect('checkout/cart');
89
+ }
90
+
91
+ /**
92
+ * After a successful transaction a customer will be send here
93
+ */
94
+ public function successAction()
95
+ {
96
+ $session = Mage::getSingleton('checkout/session');
97
+ $quote = Mage::getModel('sales/quote')->load($session->getFerbuyQuoteId());
98
+ if ($quote->getId()) {
99
+ $quote->setIsActive(false);
100
+ $quote->delete();
101
+ }
102
+
103
+ $this->_redirect('checkout/onepage/success', array('_secure'=>true));
104
+ }
105
+
106
+ /**
107
+ * Control URL called by gateway
108
+ */
109
+ public function controlAction()
110
+ {
111
+ $base = Mage::getModel('ferbuy/base');
112
+ $data = $this->getRequest()->getPost();
113
+
114
+ // Verify callback hash
115
+ if (!$this->getRequest()->isPost() || !$this->_validate($data)) {
116
+ $base->log('Callback hash validation failed!');
117
+ $base->log('Received data from FerBuy:');
118
+ $base->log($data);
119
+ exit();
120
+ }
121
+
122
+ // Process callback
123
+ $base->setCallbackData($data)->processCallback();
124
+
125
+ // Obtain quote and status
126
+ $status = (int) $data['status'];
127
+ $session = Mage::getSingleton('checkout/session');
128
+ $quote = Mage::getModel('sales/quote')->load($session->getFerbuyQuoteId());
129
+
130
+ // Set Mage_Sales_Model_Quote to inactive and delete
131
+ if (200 <= $status && $status <= 299) {
132
+ if ($quote->getId()) {
133
+ $quote->setIsActive(false);
134
+ $quote->delete();
135
+ }
136
+
137
+ // Set Mage_Sales_Model_Quote to active and save
138
+ } else {
139
+ if ($quote->getId()) {
140
+ $quote->setIsActive(true);
141
+ $quote->save();
142
+ }
143
+ }
144
+
145
+ // Display transaction_id and status
146
+ echo $data['transaction_id'].'.'.$data['status'];
147
+ }
148
+ }
app/code/local/Ferratum/Ferbuy/etc/adminhtml.xml ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * Magento Ferbuy payment extension
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * @category Mage
14
+ * @package Ferratum_Ferbuy
15
+ * @author Pavel Saparov, <info@ferbuy.com>
16
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+ -->
20
+ <config>
21
+ <acl>
22
+ <resources>
23
+ <admin>
24
+ <children>
25
+ <system>
26
+ <children>
27
+ <config>
28
+ <children>
29
+ <ferbuy>
30
+ <title>Ferbuy Settings</title>
31
+ </ferbuy>
32
+ </children>
33
+ </config>
34
+ </children>
35
+ </system>
36
+ </children>
37
+ </admin>
38
+ </resources>
39
+ </acl>
40
+ </config>
app/code/local/Ferratum/Ferbuy/etc/config.xml ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * Magento Ferbuy payment extension
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * @category Mage
14
+ * @package Ferratum_Ferbuy
15
+ * @author Pavel Saparov, <info@ferbuy.com>
16
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+ -->
20
+ <config>
21
+ <modules>
22
+ <Ferratum_Ferbuy>
23
+ <version>1.0.0</version>
24
+ </Ferratum_Ferbuy>
25
+ </modules>
26
+
27
+ <global>
28
+ <blocks>
29
+ <ferbuy>
30
+ <class>Ferratum_Ferbuy_Block</class>
31
+ </ferbuy>
32
+ </blocks>
33
+ <helpers>
34
+ <ferbuy>
35
+ <class>Ferratum_Ferbuy_Helper</class>
36
+ </ferbuy>
37
+ </helpers>
38
+ <models>
39
+ <ferbuy>
40
+ <class>Ferratum_Ferbuy_Model</class>
41
+ </ferbuy>
42
+ </models>
43
+ <resources>
44
+ <ferbuy_setup>
45
+ <setup>
46
+ <module>Ferratum_Ferbuy</module>
47
+ </setup>
48
+ <connection>
49
+ <use>core_setup</use>
50
+ </connection>
51
+ </ferbuy_setup>
52
+ <ferbuy_read>
53
+ <connection>
54
+ <use>core_read</use>
55
+ </connection>
56
+ </ferbuy_read>
57
+ <ferbuy_write>
58
+ <connection>
59
+ <use>core_write</use>
60
+ </connection>
61
+ </ferbuy_write>
62
+ </resources>
63
+ </global>
64
+
65
+ <adminhtml>
66
+ <layout>
67
+ <updates>
68
+ <ferbuy>
69
+ <file>ferbuy.xml</file>
70
+ </ferbuy>
71
+ </updates>
72
+ </layout>
73
+ <acl>
74
+ <resources>
75
+ <admin>
76
+ <children>
77
+ <system>
78
+ <children>
79
+ <config>
80
+ <children>
81
+ <ferbuy>
82
+ <title>Ferbuy Settings</title>
83
+ </ferbuy>
84
+ </children>
85
+ </config>
86
+ </children>
87
+ </system>
88
+ </children>
89
+ </admin>
90
+ </resources>
91
+ </acl>
92
+ </adminhtml>
93
+
94
+ <frontend>
95
+ <routers>
96
+ <ferbuy>
97
+ <use>standard</use>
98
+ <args>
99
+ <module>Ferratum_Ferbuy</module>
100
+ <frontName>ferbuy</frontName>
101
+ </args>
102
+ </ferbuy>
103
+ </routers>
104
+ </frontend>
105
+
106
+ <default>
107
+ <payment>
108
+ <ferbuy>
109
+ <active>1</active>
110
+ <model>ferbuy/ferbuy</model>
111
+ <title>FerBuy (Buy Now, Pay Later)</title>
112
+ <allowspecific>0</allowspecific>
113
+ </ferbuy>
114
+ </payment>
115
+
116
+ <ferbuy>
117
+ <settings>
118
+ <initialized_status>pending</initialized_status>
119
+ <complete_status>processing</complete_status>
120
+ <failed_status>canceled</failed_status>
121
+ <autocreate_invoice>1</autocreate_invoice>
122
+ <mail_invoice>1</mail_invoice>
123
+ <invoicing_failed>0</invoicing_failed>
124
+ <notification_email>general</notification_email>
125
+ <live_mode>demo</live_mode>
126
+ <debug>0</debug>
127
+ </settings>
128
+ <ferbuy>
129
+ <active>1</active>
130
+ <model>ferbuy/ferbuy</model>
131
+ <title>FerBuy (Buy Now, Pay Later)</title>
132
+ <allowspecific>0</allowspecific>
133
+ </ferbuy>
134
+ </ferbuy>
135
+ </default>
136
+ </config>
app/code/local/Ferratum/Ferbuy/etc/system.xml ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * Magento Ferbuy payment extension
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * @category Mage
14
+ * @package Ferratum_Ferbuy
15
+ * @author Pavel Saparov, <info@ferbuy.com>
16
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+ -->
20
+ <config>
21
+ <sections>
22
+ <ferbuy module="ferbuy">
23
+ <label>Ferbuy</label>
24
+ <class>ferbuy-section</class>
25
+ <header_css>ferbuy-header</header_css>
26
+ <tab>sales</tab>
27
+ <frontend_type>text</frontend_type>
28
+ <sort_order>999</sort_order>
29
+ <show_in_default>1</show_in_default>
30
+ <show_in_website>1</show_in_website>
31
+ <show_in_store>1</show_in_store>
32
+ <groups>
33
+ <settings translate="comment">
34
+ <label>Settings</label>
35
+ <comment><![CDATA[<strong>Note:</strong> Don't forget to set-up in the <a href="https://merchants.ferbuy.com/" target="_blank">Merchant Backoffice</a> a Control URL to "http://www.yourdomain.com/ferbuy/payment/control/".]]></comment>
36
+ <sort_order>100</sort_order>
37
+ <show_in_default>1</show_in_default>
38
+ <show_in_website>1</show_in_website>
39
+ <show_in_store>1</show_in_store>
40
+ <fields>
41
+ <live_mode translate="label comment">
42
+ <label>Test/Live Mode</label>
43
+ <frontend_type>select</frontend_type>
44
+ <comment><![CDATA[Switching between test and live mode. If you don't have an account <a href='http://www.ferbuy.com/' target='_blank'>Sign Up</a>.]]></comment>
45
+ <source_model>ferbuy/adminhtml_system_config_source_modes</source_model>
46
+ <sort_order>20</sort_order>
47
+ <show_in_default>1</show_in_default>
48
+ <show_in_website>1</show_in_website>
49
+ <show_in_store>1</show_in_store>
50
+ </live_mode>
51
+ <site_id translate="label comment">
52
+ <label>Site ID</label>
53
+ <frontend_type>text</frontend_type>
54
+ <comment><![CDATA[Fill in you Site ID number. You can find your Site ID number at <a href="https://merchants.ferbuy.com/" target="_blank">Merchant Backoffice</a>.]]></comment>
55
+ <sort_order>30</sort_order>
56
+ <show_in_default>1</show_in_default>
57
+ <show_in_website>1</show_in_website>
58
+ <show_in_store>1</show_in_store>
59
+ </site_id>
60
+ <hash_key translate="label comment">
61
+ <label>Checksum</label>
62
+ <frontend_type>text</frontend_type>
63
+ <comment><![CDATA[Fill in you secret checksum key for the site. You can create your hash key code at <a href="https://merchants.ferbuy.com/" target="_blank">Merchant Backoffice</a>.]]></comment>
64
+ <sort_order>40</sort_order>
65
+ <show_in_default>1</show_in_default>
66
+ <show_in_website>1</show_in_website>
67
+ <show_in_store>1</show_in_store>
68
+ </hash_key>
69
+ <autocreate_invoice translate="label comment">
70
+ <label>Create invoice after payment</label>
71
+ <frontend_type>select</frontend_type>
72
+ <comment>Automatically create invoices after payment.</comment>
73
+ <source_model>adminhtml/system_config_source_yesno</source_model>
74
+ <sort_order>50</sort_order>
75
+ <show_in_default>1</show_in_default>
76
+ <show_in_website>1</show_in_website>
77
+ <show_in_store>1</show_in_store>
78
+ </autocreate_invoice>
79
+ <mail_invoice translate="label comment">
80
+ <label>Mail invoice to customer</label>
81
+ <frontend_type>select</frontend_type>
82
+ <comment>Automatically mail invoices to a customer.</comment>
83
+ <source_model>adminhtml/system_config_source_yesno</source_model>
84
+ <sort_order>60</sort_order>
85
+ <show_in_default>1</show_in_default>
86
+ <show_in_website>1</show_in_website>
87
+ <show_in_store>1</show_in_store>
88
+ </mail_invoice>
89
+ <invoicing_failed translate="label">
90
+ <label>Notify on failed invoice creation</label>
91
+ <frontend_type>select</frontend_type>
92
+ <source_model>adminhtml/system_config_source_yesno</source_model>
93
+ <sort_order>70</sort_order>
94
+ <show_in_default>1</show_in_default>
95
+ <show_in_website>1</show_in_website>
96
+ <show_in_store>1</show_in_store>
97
+ </invoicing_failed>
98
+ <notification_email translate="label">
99
+ <label>Notifications recipient</label>
100
+ <frontend_type>select</frontend_type>
101
+ <source_model>adminhtml/system_config_source_email_identity</source_model>
102
+ <sort_order>80</sort_order>
103
+ <show_in_default>1</show_in_default>
104
+ <show_in_website>1</show_in_website>
105
+ <show_in_store>1</show_in_store>
106
+ </notification_email>
107
+ <initialized_status translate="label">
108
+ <label>Transaction in progress status</label>
109
+ <frontend_type>select</frontend_type>
110
+ <source_model>adminhtml/system_config_source_order_status</source_model>
111
+ <sort_order>100</sort_order>
112
+ <show_in_default>1</show_in_default>
113
+ <show_in_website>1</show_in_website>
114
+ <show_in_store>1</show_in_store>
115
+ </initialized_status>
116
+ <complete_status translate="label">
117
+ <label>Transaction complete status</label>
118
+ <frontend_type>select</frontend_type>
119
+ <source_model>adminhtml/system_config_source_order_status</source_model>
120
+ <sort_order>110</sort_order>
121
+ <show_in_default>1</show_in_default>
122
+ <show_in_website>1</show_in_website>
123
+ <show_in_store>1</show_in_store>
124
+ </complete_status>
125
+ <failed_status translate="label">
126
+ <label>Transaction failed status</label>
127
+ <frontend_type>select</frontend_type>
128
+ <source_model>adminhtml/system_config_source_order_status</source_model>
129
+ <sort_order>120</sort_order>
130
+ <show_in_default>1</show_in_default>
131
+ <show_in_website>1</show_in_website>
132
+ <show_in_store>1</show_in_store>
133
+ </failed_status>
134
+ <debug translate="label comment">
135
+ <label>Debug</label>
136
+ <frontend_type>select</frontend_type>
137
+ <comment>Will log details for debugging purposes in /var/log/ferbuy.log file.</comment>
138
+ <source_model>adminhtml/system_config_source_yesno</source_model>
139
+ <sort_order>130</sort_order>
140
+ <show_in_default>1</show_in_default>
141
+ <show_in_website>1</show_in_website>
142
+ <show_in_store>1</show_in_store>
143
+ </debug>
144
+ </fields>
145
+ </settings>
146
+
147
+ <ferbuy translate="label" module="ferbuy">
148
+ <label>FerBuy (Buy Now, Pay Later)</label>
149
+ <sort_order>200</sort_order>
150
+ <show_in_default>1</show_in_default>
151
+ <show_in_website>1</show_in_website>
152
+ <show_in_store>1</show_in_store>
153
+ <fields>
154
+ <active translate="label">
155
+ <label>Enabled</label>
156
+ <frontend_type>select</frontend_type>
157
+ <source_model>adminhtml/system_config_source_yesno</source_model>
158
+ <sort_order>1</sort_order>
159
+ <show_in_default>1</show_in_default>
160
+ <show_in_website>1</show_in_website>
161
+ <show_in_store>1</show_in_store>
162
+ </active>
163
+ <title translate="label">
164
+ <label>Title</label>
165
+ <frontend_type>text</frontend_type>
166
+ <sort_order>10</sort_order>
167
+ <show_in_default>1</show_in_default>
168
+ <show_in_website>1</show_in_website>
169
+ <show_in_store>1</show_in_store>
170
+ </title>
171
+ <min_order_total translate="label comment">
172
+ <label>Minimum Order Total</label>
173
+ <frontend_type>text</frontend_type>
174
+ <comment>Checkout option will not be available with an order that does not meet the minimum.</comment>
175
+ <sort_order>20</sort_order>
176
+ <show_in_default>1</show_in_default>
177
+ <show_in_website>1</show_in_website>
178
+ <show_in_store>1</show_in_store>
179
+ </min_order_total>
180
+ <max_order_total translate="label comment">
181
+ <label>Maximum Order Total</label>
182
+ <frontend_type>text</frontend_type>
183
+ <comment>Checkout option will not be available with an order that does exceeds the maximum.</comment>
184
+ <sort_order>30</sort_order>
185
+ <show_in_default>1</show_in_default>
186
+ <show_in_website>1</show_in_website>
187
+ <show_in_store>1</show_in_store>
188
+ </max_order_total>
189
+ <allowspecific translate="label">
190
+ <label>Payment from applicable countries</label>
191
+ <frontend_type>allowspecific</frontend_type>
192
+ <sort_order>40</sort_order>
193
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
194
+ <show_in_default>1</show_in_default>
195
+ <show_in_website>1</show_in_website>
196
+ <show_in_store>1</show_in_store>
197
+ </allowspecific>
198
+ <specificcountry translate="label">
199
+ <label>Payment from Specific countries</label>
200
+ <frontend_type>multiselect</frontend_type>
201
+ <sort_order>50</sort_order>
202
+ <source_model>adminhtml/system_config_source_country</source_model>
203
+ <show_in_default>1</show_in_default>
204
+ <show_in_website>1</show_in_website>
205
+ <show_in_store>1</show_in_store>
206
+ </specificcountry>
207
+ <sort_order translate="label">
208
+ <label>Sort order</label>
209
+ <frontend_type>text</frontend_type>
210
+ <sort_order>100</sort_order>
211
+ <show_in_default>1</show_in_default>
212
+ <show_in_website>1</show_in_website>
213
+ <show_in_store>1</show_in_store>
214
+ </sort_order>
215
+ </fields>
216
+ </ferbuy>
217
+ </groups>
218
+ </ferbuy>
219
+ </sections>
220
+ </config>
app/design/adminhtml/default/default/layout/ferbuy.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * Magento Ferbuy payment extension
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * @category Mage
14
+ * @package Ferratum_Ferbuy
15
+ * @author Pavel Saparov, <info@ferbuy.com>
16
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+ -->
20
+ <layout>
21
+ <adminhtml_system_config_edit>
22
+ <reference name="head">
23
+ <action method="addCss"><name>ferbuy.css</name></action>
24
+ </reference>
25
+ </adminhtml_system_config_edit>
26
+ </layout>
app/design/frontend/base/default/template/ferbuy/redirect.phtml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php echo Mage::helper("ferbuy")->__("You will be redirected to FerBuy to finish your transaction."); ?>
2
+ <?php echo $this->getForm(); ?>
3
+ <script type="text/javascript">document.getElementById("ferbuy_checkout").submit();</script>
app/etc/modules/Ferratum_Ferbuy.xml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento Ferbuy payment extension
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * @category Mage
14
+ * @package Ferratum_Ferbuy
15
+ * @author Pavel Saparov, <info@ferbuy.com>
16
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+ -->
20
+ <config>
21
+ <modules>
22
+ <Ferratum_Ferbuy>
23
+ <active>true</active>
24
+ <codePool>local</codePool>
25
+ <depends>
26
+ <Mage_Payment />
27
+ </depends>
28
+ </Ferratum_Ferbuy>
29
+ </modules>
30
+ </config>
package.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Ferratum_Ferbuy</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>FerBuy payments provides the possibility for your customers to pay by invoice.</summary>
10
+ <description>FerBuy payments provides the possibility for your customers to pay by invoice. The FerBuy product is currently available in the following countries:&#xD;
11
+ &#xD;
12
+ Czech Republic - www.ferbuy.cz&#xD;
13
+ Poland - www.ferbuy.pl&#xD;
14
+ Singapore - www.ferbuy.sg&#xD;
15
+ &#xD;
16
+ For more information, please visit your local FerBuy website.</description>
17
+ <notes>1.0.0:&#xD;
18
+ Initial release&#xD;
19
+ Tested on Magento v1.6.1.0</notes>
20
+ <authors><author><name>Bjorn Zwaaneveld</name><user>auto-converted</user><email>bjorn.zwaaneveld@ferbuy.com</email></author></authors>
21
+ <date>2013-06-13</date>
22
+ <time>19:15:09</time>
23
+ <contents><target name="magelocal"><dir name="Ferratum"><dir name="Ferbuy"><dir name="Block"><file name="Redirect.php" hash="3c997c3d6741a67daca980dd5bea6b54"/></dir><dir name="Helper"><file name="Data.php" hash="57656afd9b7578c100e551cd7c661319"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><file name="Modes.php" hash="8745cabaaf2ba688aa07773eb9e4507c"/></dir></dir></dir></dir><file name="Base.php" hash="95df7645281b6da83a11d5d5b6aab321"/><file name="Ferbuy.php" hash="2b090a497a0ca3996af1b81b096be8fb"/></dir><dir name="controllers"><file name="PaymentController.php" hash="d077d19ef89a7233e28da89bb5f212a8"/></dir><dir name="etc"><file name="adminhtml.xml" hash="3ef2013840386516ff6700925b8d3d89"/><file name="config.xml" hash="50b85e93d4a3b53ebefe993a7469cde1"/><file name="system.xml" hash="96dc8ac4992e10c4621e2080eab2d48a"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Ferratum_Ferbuy.xml" hash="63ac15b41485745bc375b770d71530f4"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="ferbuy.xml" hash="a0d8d82b70314a40bbf99cfa71ff6a4d"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="ferbuy"><file name="redirect.phtml" hash="5e1940098954f124ea7b9b973ba94e72"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="images"><file name="ferbuy.png" hash="6f69778a6152cd21c6a6ec2fdc28d1d7"/></dir><file name="ferbuy.css" hash="34d9a5b7093bf202e82bb0cf99901343"/></dir></dir></dir></target></contents>
24
+ <compatible/>
25
+ <dependencies/>
26
+ </package>
skin/adminhtml/default/default/ferbuy.css ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Magento Ferbuy payment extension
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Open Software License (OSL 3.0)
7
+ * that is bundled with this package in the file LICENSE.txt.
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 Mage
12
+ * @package Ferratum_Ferbuy
13
+ * @author Pavel Saparov, <info@ferbuy.com>
14
+ * @copyright Copyright (c) 2013 JT Family Holding OY (http://www.ferbuy.com)
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+
18
+ h3.ferbuy-header { background:url(images/ferbuy.png) no-repeat 0 0; height:0; overflow:hidden; padding:22px 0 0; width:55px; }
19
+
20
+ ul.tabs a.ferbuy-section,
21
+ ul.tabs a.ferbuy-section:hover { background:url(images/tabs_span_bg.gif) repeat-x 0 100%; border-bottom:none; padding:0.5em 0.5em 0.5em 1.5em; }
22
+ ul.tabs a.ferbuy-section:hover { background-color:#d8e6e6; }
23
+ ul.tabs a.ferbuy-section.active, ul.tabs a.ferbuy-section.active:hover { background-color:#fff; }
24
+ ul.tabs a.ferbuy-section span,
25
+ ul.tabs a.ferbuy-section:hover span { background:url(images/ferbuy.png) no-repeat 0 0; height:0; overflow:hidden; padding:22px 0 0; width:55px; }
26
+
27
+ .ferbuy-selection { border-collapse:collapse; width:100%; }
28
+ .ferbuy-selection .ferbuy-selection-info { text-align:right; }
29
+ .ferbuy-selection th { font-size:13px; padding:5px 0; text-align:left; vertical-align:middle; }
30
+ .ferbuy-selection td { background:#f2f2f2; border-bottom:5px solid #fff; padding:5px; vertical-align:top; }
31
+ .ferbuy-selection .ferbuy-selection-simplified { background:#fff; padding-left:35px; }
32
+ .ferbuy-selection td a { color:#2997d8; }
33
+ .ferbuy-selection td strong { color:#3c616a; }
34
+ .ferbuy-selection td label { display:block; padding-left:30px; text-indent:-30px; }
35
+ .ferbuy-selection td div label { display:inline; padding:0; text-indent:0; }
36
+ .ferbuy-selection td input { height:13px; overflow:hidden; margin-right:15px; position:relative; top:-1px; width:13px; vertical-align:middle; }
37
+
38
+ .ferbuy-config .form-list { width:100%; }
39
+ .ferbuy-config tr.hover { background:#f7f7f7; }
40
+ .ferbuy-config tr.hover label { cursor:help; }
41
+
42
+ .ferbuy-credentials { border:1px solid #f2f2f2; }
43
+ .ferbuy-credentials caption { padding:5px; text-align:left; }
44
+ .ferbuy-credentials .value { color:#ccc; }
skin/adminhtml/default/default/images/ferbuy.png ADDED
Binary file