Version Notes
Download this release
Release Info
| Developer | Optimizer Ltd. |
| Extension | SwipeHQ_Checkout |
| Version | 1.3.0 |
| Comparing to | |
| See all releases | |
Code changes from version 1.2.0 to 1.3.0
- app/code/community/SwipeHQ/Checkout/Model/Permittedorderstates.php +20 -0
- app/code/community/SwipeHQ/Checkout/controllers/PaymentController.php +19 -12
- app/code/community/SwipeHQ/Checkout/etc/config.xml +1 -1
- app/code/community/SwipeHQ/Checkout/etc/system.xml +3 -3
- package.xml +2 -2
- readme.txt +55 -0
app/code/community/SwipeHQ/Checkout/Model/Permittedorderstates.php
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class SwipeHQ_Checkout_Model_Permittedorderstates {
|
| 3 |
+
|
| 4 |
+
public function toOptionArray(){
|
| 5 |
+
$orig = new Mage_Adminhtml_Model_System_Config_Source_Order_Status();
|
| 6 |
+
$origOptions = $orig->toOptionArray();
|
| 7 |
+
|
| 8 |
+
$order = new Mage_Sales_Model_Order();
|
| 9 |
+
|
| 10 |
+
$r = array();
|
| 11 |
+
foreach($origOptions as $opt){
|
| 12 |
+
$orderState = $opt['value'];
|
| 13 |
+
if(!$orderState) continue; // omit blank option, we require one to be selected
|
| 14 |
+
if($order->isStateProtected($orderState)) continue; // omit options that will cause errors when we try to set the order state
|
| 15 |
+
$r[] = $opt;
|
| 16 |
+
}
|
| 17 |
+
return $r;
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
}
|
app/code/community/SwipeHQ/Checkout/controllers/PaymentController.php
CHANGED
|
@@ -56,8 +56,6 @@ class SwipeHQ_Checkout_PaymentController extends Mage_Core_Controller_Front_Acti
|
|
| 56 |
}
|
| 57 |
} else {
|
| 58 |
Mage::getSingleton('checkout/session')->addError('Swipe does not support currency: '.$currency.'. Swipe supports these currencies: '.join(', ', $acceptedCurrencies).'.');
|
| 59 |
-
session_write_close(); // required to have message show up after redirect
|
| 60 |
-
Mage_Core_Controller_Varien_Action::_redirect('checkout/onepage/failure', array('_secure'=>true));
|
| 61 |
return;
|
| 62 |
}
|
| 63 |
|
|
@@ -70,27 +68,34 @@ class SwipeHQ_Checkout_PaymentController extends Mage_Core_Controller_Front_Acti
|
|
| 70 |
// The response action is triggered when your gateway sends back a response after processing the customer's payment
|
| 71 |
public function responseAction() {
|
| 72 |
$request = $_REQUEST;
|
| 73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
//Swipe callback
|
| 75 |
if (isset($request['td_user_data'])) {
|
| 76 |
$order_id = $request['td_user_data'];
|
| 77 |
|
| 78 |
-
$is_verified = $this->_verifyTransaction($
|
| 79 |
-
if ($
|
| 80 |
// Payment was successful, so update the order's state, send order email and move to the success page
|
| 81 |
|
| 82 |
-
$order = Mage::getModel('sales/order');
|
| 83 |
$order->loadByIncrementId($order_id);
|
| 84 |
if (!$order->getId()) {
|
| 85 |
Mage::throwException('No order for processing found');
|
| 86 |
}
|
| 87 |
|
| 88 |
$order_status = Mage::getStoreConfig('payment/swipehq/paid_order_status');
|
| 89 |
-
if (
|
| 90 |
$order_status = Mage::getStoreConfig('payment/swipehq/test_order_status');
|
| 91 |
}
|
| 92 |
|
| 93 |
-
$order->
|
|
|
|
|
|
|
|
|
|
|
|
|
| 94 |
|
| 95 |
$order->sendNewOrderEmail();
|
| 96 |
$order->setEmailSent(true);
|
|
@@ -98,11 +103,11 @@ class SwipeHQ_Checkout_PaymentController extends Mage_Core_Controller_Front_Acti
|
|
| 98 |
$order->save();
|
| 99 |
|
| 100 |
Mage::getSingleton('checkout/session')->unsQuoteId();
|
| 101 |
-
}
|
| 102 |
// There is a problem in the response we got
|
| 103 |
$this->cancelAction();
|
| 104 |
-
Mage_Core_Controller_Varien_Action::_redirect('checkout/onepage/failure', array('_secure'=>true));
|
| 105 |
}
|
|
|
|
| 106 |
|
| 107 |
//Result page (user redirect)
|
| 108 |
} elseif (isset($request['result']) && isset($request['user_data'])) {
|
|
@@ -148,8 +153,10 @@ class SwipeHQ_Checkout_PaymentController extends Mage_Core_Controller_Front_Acti
|
|
| 148 |
if (!empty($response)) {
|
| 149 |
$response_data = json_decode($response);
|
| 150 |
|
| 151 |
-
if ($response_data->response_code == 200 &&
|
| 152 |
-
|
|
|
|
|
|
|
| 153 |
}
|
| 154 |
}
|
| 155 |
return false;
|
| 56 |
}
|
| 57 |
} else {
|
| 58 |
Mage::getSingleton('checkout/session')->addError('Swipe does not support currency: '.$currency.'. Swipe supports these currencies: '.join(', ', $acceptedCurrencies).'.');
|
|
|
|
|
|
|
| 59 |
return;
|
| 60 |
}
|
| 61 |
|
| 68 |
// The response action is triggered when your gateway sends back a response after processing the customer's payment
|
| 69 |
public function responseAction() {
|
| 70 |
$request = $_REQUEST;
|
| 71 |
+
|
| 72 |
+
$transaction_id = $request['transaction_id'];
|
| 73 |
+
$testMode = Mage::getStoreConfig('payment/swipehq/test_mode');
|
| 74 |
+
$order = Mage::getModel('sales/order');
|
| 75 |
+
|
| 76 |
//Swipe callback
|
| 77 |
if (isset($request['td_user_data'])) {
|
| 78 |
$order_id = $request['td_user_data'];
|
| 79 |
|
| 80 |
+
$is_verified = $this->_verifyTransaction($transaction_id);
|
| 81 |
+
if ($is_verified) {
|
| 82 |
// Payment was successful, so update the order's state, send order email and move to the success page
|
| 83 |
|
|
|
|
| 84 |
$order->loadByIncrementId($order_id);
|
| 85 |
if (!$order->getId()) {
|
| 86 |
Mage::throwException('No order for processing found');
|
| 87 |
}
|
| 88 |
|
| 89 |
$order_status = Mage::getStoreConfig('payment/swipehq/paid_order_status');
|
| 90 |
+
if ($testMode) {
|
| 91 |
$order_status = Mage::getStoreConfig('payment/swipehq/test_order_status');
|
| 92 |
}
|
| 93 |
|
| 94 |
+
if($order->isStateProtected($order_status)){
|
| 95 |
+
Mage::throwException('Swipe configuration error: "Paid Order Status" must not be: "'.$order_status.'". Failed to change state.');
|
| 96 |
+
}else{
|
| 97 |
+
$order->setState($order_status, true, 'Swipe has authorized the payment.');
|
| 98 |
+
}
|
| 99 |
|
| 100 |
$order->sendNewOrderEmail();
|
| 101 |
$order->setEmailSent(true);
|
| 103 |
$order->save();
|
| 104 |
|
| 105 |
Mage::getSingleton('checkout/session')->unsQuoteId();
|
| 106 |
+
} else {
|
| 107 |
// There is a problem in the response we got
|
| 108 |
$this->cancelAction();
|
|
|
|
| 109 |
}
|
| 110 |
+
die('LPN OK, transaction_id: '.$transaction_id.', is_verified: '.($is_verified?'y':'n'));
|
| 111 |
|
| 112 |
//Result page (user redirect)
|
| 113 |
} elseif (isset($request['result']) && isset($request['user_data'])) {
|
| 153 |
if (!empty($response)) {
|
| 154 |
$response_data = json_decode($response);
|
| 155 |
|
| 156 |
+
if ($response_data->response_code == 200 &&
|
| 157 |
+
$response_data->data->transaction_id == $transaction_id &&
|
| 158 |
+
$response_data->data->transaction_approved == 'yes') {
|
| 159 |
+
return true;
|
| 160 |
}
|
| 161 |
}
|
| 162 |
return false;
|
app/code/community/SwipeHQ/Checkout/etc/config.xml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<SwipeHQ_Checkout>
|
| 5 |
-
<version>1.0.0</version
|
| 6 |
</SwipeHQ_Checkout>
|
| 7 |
</modules>
|
| 8 |
<global>
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<SwipeHQ_Checkout>
|
| 5 |
+
<version>1.0.0</version><!-- todo: what's the point of this version number? where is it used? -->
|
| 6 |
</SwipeHQ_Checkout>
|
| 7 |
</modules>
|
| 8 |
<global>
|
app/code/community/SwipeHQ/Checkout/etc/system.xml
CHANGED
|
@@ -78,7 +78,7 @@
|
|
| 78 |
<order_status translate="label">
|
| 79 |
<label>New Order Status</label>
|
| 80 |
<frontend_type>select</frontend_type>
|
| 81 |
-
<source_model>
|
| 82 |
<sort_order>60</sort_order>
|
| 83 |
<show_in_default>1</show_in_default>
|
| 84 |
<show_in_website>1</show_in_website>
|
|
@@ -87,7 +87,7 @@
|
|
| 87 |
<paid_order_status translate="label">
|
| 88 |
<label>Paid Order Status</label>
|
| 89 |
<frontend_type>select</frontend_type>
|
| 90 |
-
|
| 91 |
<sort_order>70</sort_order>
|
| 92 |
<show_in_default>1</show_in_default>
|
| 93 |
<show_in_website>1</show_in_website>
|
|
@@ -97,7 +97,7 @@
|
|
| 97 |
<label>Test Order Status</label>
|
| 98 |
<comment>Paid order status in the test mode</comment>
|
| 99 |
<frontend_type>select</frontend_type>
|
| 100 |
-
|
| 101 |
<sort_order>80</sort_order>
|
| 102 |
<show_in_default>1</show_in_default>
|
| 103 |
<show_in_website>1</show_in_website>
|
| 78 |
<order_status translate="label">
|
| 79 |
<label>New Order Status</label>
|
| 80 |
<frontend_type>select</frontend_type>
|
| 81 |
+
<source_model>swipehq/permittedorderstates</source_model>
|
| 82 |
<sort_order>60</sort_order>
|
| 83 |
<show_in_default>1</show_in_default>
|
| 84 |
<show_in_website>1</show_in_website>
|
| 87 |
<paid_order_status translate="label">
|
| 88 |
<label>Paid Order Status</label>
|
| 89 |
<frontend_type>select</frontend_type>
|
| 90 |
+
<source_model>swipehq/permittedorderstates</source_model>
|
| 91 |
<sort_order>70</sort_order>
|
| 92 |
<show_in_default>1</show_in_default>
|
| 93 |
<show_in_website>1</show_in_website>
|
| 97 |
<label>Test Order Status</label>
|
| 98 |
<comment>Paid order status in the test mode</comment>
|
| 99 |
<frontend_type>select</frontend_type>
|
| 100 |
+
<source_model>swipehq/permittedorderstates</source_model>
|
| 101 |
<sort_order>80</sort_order>
|
| 102 |
<show_in_default>1</show_in_default>
|
| 103 |
<show_in_website>1</show_in_website>
|
package.xml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>SwipeHQ_Checkout</name>
|
| 4 |
-
<version>1.
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license>GNU General Public License (GPL)</license>
|
| 7 |
<channel>community</channel>
|
|
@@ -16,7 +16,7 @@
|
|
| 16 |
<email>support@swipehq.com</email>
|
| 17 |
</author>
|
| 18 |
</authors>
|
| 19 |
-
<date>2013-09-
|
| 20 |
<time>00:00:00</time>
|
| 21 |
<contents>
|
| 22 |
<target name="magecommunity">
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>SwipeHQ_Checkout</name>
|
| 4 |
+
<version>1.3.0</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license>GNU General Public License (GPL)</license>
|
| 7 |
<channel>community</channel>
|
| 16 |
<email>support@swipehq.com</email>
|
| 17 |
</author>
|
| 18 |
</authors>
|
| 19 |
+
<date>2013-09-18</date>
|
| 20 |
<time>00:00:00</time>
|
| 21 |
<contents>
|
| 22 |
<target name="magecommunity">
|
readme.txt
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Hikashop Swipe plugin
|
| 2 |
+
|
| 3 |
+
Version: 1.3.0 / 18 Sep 2013
|
| 4 |
+
Copyright: (c) 2012-2013, Optimizer Ltd.
|
| 5 |
+
Link: http://www.swipehq.com/checkout/
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
REQUIREMENTS
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
* Swipe account
|
| 13 |
+
* Magento
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
INSTALLATION
|
| 17 |
+
---
|
| 18 |
+
|
| 19 |
+
1. Please install this extension through the normal Magento installation process (System -> Magento Connect -> Magento Connect Manager, then
|
| 20 |
+
Install New Extensions, grabbing the key from http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15121/ or Direct
|
| 21 |
+
Package File Upload, selecting this zip)
|
| 22 |
+
2. After successful installation it will appear in the list of Packages as "SwipeHQ_Checkout"
|
| 23 |
+
3. Then configure the plugin, go back to the Magento Admin, then go to System -> Configuration -> Sales -> Payment Methods -> Swipe Checkout,
|
| 24 |
+
adding the following details from your Swipe Merchant login under Settings -> API Credentials:
|
| 25 |
+
Merchant ID
|
| 26 |
+
API Key
|
| 27 |
+
Payment Page Url
|
| 28 |
+
Api Url
|
| 29 |
+
4. And finally configure your Swipe account to send customers back to your shop after they pay.
|
| 30 |
+
In your Merchant login under Settings -> Payment Notifiers, set:
|
| 31 |
+
Callback Url: %YOUR_WEBSITE%/swipehq/payment/response
|
| 32 |
+
Callback pass back user data: on
|
| 33 |
+
LPN Url: %YOUR_WEBSITE%/swipehq/payment/response
|
| 34 |
+
making sure to replace %YOUR_WEBSITE% with your website url, e.g. www.example.com/my-shop/swipehq/payment/response
|
| 35 |
+
5. All done, test it out, add some products to your cart and you will get the option to pay with Swipe.
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
NOTES
|
| 39 |
+
---
|
| 40 |
+
* Magento must be configured to use a currency that your Swipe Merchant Account supports for customers to be able to use Swipe to be a payment option,
|
| 41 |
+
see Settings -> API Credentials for a list of currencies your Merchant Account supports. And see System -> Manage Currency -> Symboles
|
| 42 |
+
to see which currency your Magento is using.
|
| 43 |
+
* Magento allows this plugin to set the order state to only a limited subset of all order states. You must mark orders as complete manually once you ship
|
| 44 |
+
them.
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
CHANGE LOG
|
| 48 |
+
---
|
| 49 |
+
|
| 50 |
+
1.3.0:
|
| 51 |
+
- first version with this readme
|
| 52 |
+
- fixing bug where magento does not allow you to set an order's state to complete
|
| 53 |
+
- tested against Magento-1.7.0.2
|
| 54 |
+
|
| 55 |
+
|
