Version Notes
Now with postback
Download this release
Release Info
| Developer | Paystation |
| Extension | Paystation_Magento_1_8_ModuleV5 |
| Version | 0.0.10 |
| Comparing to | |
| See all releases | |
Version 0.0.10
- app/code/local/Mage/Paystation/Block/Standard/Form.php +27 -0
- app/code/local/Mage/Paystation/Helper/Data.php +33 -0
- app/code/local/Mage/Paystation/Model/Abstract.php +71 -0
- app/code/local/Mage/Paystation/Model/Session.php +25 -0
- app/code/local/Mage/Paystation/Model/Source/Cctype.php +27 -0
- app/code/local/Mage/Paystation/Model/Source/PaymentAction.php +25 -0
- app/code/local/Mage/Paystation/Model/Source/Processing.php +26 -0
- app/code/local/Mage/Paystation/Model/Source/StandardAction.php +24 -0
- app/code/local/Mage/Paystation/Model/Standard.php +338 -0
- app/code/local/Mage/Paystation/controllers/PostbackController.php +177 -0
- app/code/local/Mage/Paystation/controllers/StandardController.php +342 -0
- app/code/local/Mage/Paystation/etc/config.xml +86 -0
- app/code/local/Mage/Paystation/etc/system.xml +105 -0
- app/etc/modules/Mage_Paystation.xml +15 -0
- package.xml +18 -0
app/code/local/Mage/Paystation/Block/Standard/Form.php
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* PayStation Payment Module For Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 9 |
+
*
|
| 10 |
+
* @package Mage_Paystation
|
| 11 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 12 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 13 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 14 |
+
*/
|
| 15 |
+
class Mage_Paystation_Block_Standard_Form extends Mage_Payment_Block_Form
|
| 16 |
+
{
|
| 17 |
+
protected function _construct()
|
| 18 |
+
{
|
| 19 |
+
//$this->setTemplate('paystation/standard/form.phtml');
|
| 20 |
+
|
| 21 |
+
// We need to ask only the CC type from the customer - rest of the information will be collected
|
| 22 |
+
// by PayStation when we redirect to their servers. Also, the value for each card type is different
|
| 23 |
+
// from the normal values in Magento. Hence, we need to specifically pass them to our custom template
|
| 24 |
+
//$this->setData('cctypes', Mage::getModel('Mage_Paystation_Model_Standard')->getConfigData('cctypes'));
|
| 25 |
+
parent::_construct();
|
| 26 |
+
}
|
| 27 |
+
}
|
app/code/local/Mage/Paystation/Helper/Data.php
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 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 |
+
* If you did not receive a copy of the license and are unable to
|
| 12 |
+
* obtain it through the world-wide-web, please send an email
|
| 13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
| 14 |
+
*
|
| 15 |
+
* DISCLAIMER
|
| 16 |
+
*
|
| 17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
| 18 |
+
* versions in the future. If you wish to customize Magento for your
|
| 19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category Mage
|
| 22 |
+
* @package Mage_PayStation
|
| 23 |
+
* @copyright Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
|
| 24 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* PayStation data helper
|
| 29 |
+
*/
|
| 30 |
+
class Mage_Paystation_Helper_Data extends Mage_Core_Helper_Abstract
|
| 31 |
+
{
|
| 32 |
+
|
| 33 |
+
}
|
app/code/local/Mage/Paystation/Model/Abstract.php
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* PayStation Payment Module For Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 9 |
+
*
|
| 10 |
+
* @package Mage_Paystation
|
| 11 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 12 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 13 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 14 |
+
*/
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* PayStation Abstract Payment Module
|
| 18 |
+
*/
|
| 19 |
+
abstract class Mage_Paystation_Model_Abstract extends Mage_Payment_Model_Method_Abstract
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* Get Paystation API Model
|
| 23 |
+
*
|
| 24 |
+
* @return Mage_Paystation_Model_Api_Nvp
|
| 25 |
+
*/
|
| 26 |
+
public function getApi()
|
| 27 |
+
{
|
| 28 |
+
return Mage::getSingleton('paystation/api_nvp');
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* Get paystation session namespace
|
| 33 |
+
*
|
| 34 |
+
* @return Mage_Paystation_Model_Session
|
| 35 |
+
*/
|
| 36 |
+
public function getSession()
|
| 37 |
+
{
|
| 38 |
+
return Mage::getSingleton('paystation/session');
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* Get checkout session namespace
|
| 43 |
+
*
|
| 44 |
+
* @return Mage_Checkout_Model_Session
|
| 45 |
+
*/
|
| 46 |
+
public function getCheckout()
|
| 47 |
+
{
|
| 48 |
+
return Mage::getSingleton('checkout/session');
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
/**
|
| 52 |
+
* Get current quote
|
| 53 |
+
*
|
| 54 |
+
* @return Mage_Sales_Model_Quote
|
| 55 |
+
*/
|
| 56 |
+
public function getQuote()
|
| 57 |
+
{
|
| 58 |
+
return $this->getCheckout()->getQuote();
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
public function getRedirectUrl()
|
| 62 |
+
{
|
| 63 |
+
return $this->getApi()->getRedirectUrl();
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
public function getCountryRegionId()
|
| 67 |
+
{
|
| 68 |
+
$a = $this->getApi()->getShippingAddress();
|
| 69 |
+
return $this;
|
| 70 |
+
}
|
| 71 |
+
}
|
app/code/local/Mage/Paystation/Model/Session.php
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* PayStation Payment Module For Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 9 |
+
*
|
| 10 |
+
* @package Mage_Paystation
|
| 11 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 12 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 13 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 14 |
+
*/
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Paystation transaction session namespace
|
| 18 |
+
*/
|
| 19 |
+
class Mage_Paystation_Model_Session extends Mage_Core_Model_Session_Abstract
|
| 20 |
+
{
|
| 21 |
+
public function __construct()
|
| 22 |
+
{
|
| 23 |
+
$this->init('paystation');
|
| 24 |
+
}
|
| 25 |
+
}
|
app/code/local/Mage/Paystation/Model/Source/Cctype.php
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* PayStation Payment Module For Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 9 |
+
*
|
| 10 |
+
* @package Mage_Paystation
|
| 11 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 12 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 13 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 14 |
+
*/
|
| 15 |
+
class Mage_Paystation_Model_Source_Cctype
|
| 16 |
+
{
|
| 17 |
+
public function toOptionArray()
|
| 18 |
+
{
|
| 19 |
+
return array(
|
| 20 |
+
array('value' => 'visa', 'label' => 'Visa'),
|
| 21 |
+
array('value' => 'mastercard', 'label' => 'MasterCard'),
|
| 22 |
+
array('value' => 'amex', 'label' => 'American Express'),
|
| 23 |
+
array('value' => 'dinersclub', 'label' => 'Diners Club'),
|
| 24 |
+
array('value' => 'qcard', 'label' => 'Union Pay'),
|
| 25 |
+
);
|
| 26 |
+
}
|
| 27 |
+
}
|
app/code/local/Mage/Paystation/Model/Source/PaymentAction.php
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* PayStation Payment Module For Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 9 |
+
*
|
| 10 |
+
* @package Mage_Paystation
|
| 11 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 12 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 13 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 14 |
+
*/
|
| 15 |
+
class Mage_Paystation_Model_Source_PaymentAction
|
| 16 |
+
{
|
| 17 |
+
public function toOptionArray()
|
| 18 |
+
{
|
| 19 |
+
return array(
|
| 20 |
+
#array('value' => Mage_Paystation_Model_Api_Abstract::PAYMENT_TYPE_AUTH, 'label' => Mage::helper('paystation')->__('Authorization')),
|
| 21 |
+
#array('value' => Mage_Paystation_Model_Api_Abstract::PAYMENT_TYPE_ORDER, 'label' => Mage::helper('paystation')->__('Order')),
|
| 22 |
+
array('value' => Mage_Paystation_Model_Api_Abstract::PAYMENT_TYPE_SALE, 'label' => Mage::helper('paystation')->__('Sale')),
|
| 23 |
+
);
|
| 24 |
+
}
|
| 25 |
+
}
|
app/code/local/Mage/Paystation/Model/Source/Processing.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* PayStation Payment Module For Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 9 |
+
*
|
| 10 |
+
* @package Mage_Paystation
|
| 11 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 12 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 13 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 14 |
+
*/
|
| 15 |
+
class Mage_Paystation_Model_Source_Processing extends Mage_Adminhtml_Model_System_Config_Source_Order_Status
|
| 16 |
+
{
|
| 17 |
+
protected $_stateStatuses = array (
|
| 18 |
+
//Mage_Sales_Model_Order::STATE_NEW,
|
| 19 |
+
Mage_Sales_Model_Order::STATE_PENDING_PAYMENT,
|
| 20 |
+
//Mage_Sales_Model_Order::STATE_PROCESSING,
|
| 21 |
+
//Mage_Sales_Model_Order::STATE_COMPLETE,
|
| 22 |
+
//Mage_Sales_Model_Order::STATE_CLOSED,
|
| 23 |
+
//Mage_Sales_Model_Order::STATE_CANCELED,
|
| 24 |
+
//Mage_Sales_Model_Order::STATE_HOLDED,
|
| 25 |
+
);
|
| 26 |
+
}
|
app/code/local/Mage/Paystation/Model/Source/StandardAction.php
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* PayStation Payment Module For Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 9 |
+
*
|
| 10 |
+
* @package Mage_Paystation
|
| 11 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 12 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 13 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 14 |
+
*/
|
| 15 |
+
class Mage_Paystation_Model_Source_StandardAction
|
| 16 |
+
{
|
| 17 |
+
public function toOptionArray()
|
| 18 |
+
{
|
| 19 |
+
return array(
|
| 20 |
+
#array('value' => Mage_Paystation_Model_Standard::PAYMENT_TYPE_AUTH, 'label' => Mage::helper('paystation')->__('Authorization')),
|
| 21 |
+
array('value' => Mage_Paystation_Model_Standard::PAYMENT_TYPE_SALE, 'label' => Mage::helper('paystation')->__('Sale')),
|
| 22 |
+
);
|
| 23 |
+
}
|
| 24 |
+
}
|
app/code/local/Mage/Paystation/Model/Standard.php
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* PayStation Payment Module For Magento
|
| 5 |
+
*
|
| 6 |
+
* NOTICE OF LICENSE
|
| 7 |
+
*
|
| 8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 9 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 10 |
+
*
|
| 11 |
+
* @package Mage_Paystation
|
| 12 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 13 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 14 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 15 |
+
*
|
| 16 |
+
* Updated Jack Stinchcombe 18/11/2013
|
| 17 |
+
* Updated Jack Stinchcombe 05/08/2014
|
| 18 |
+
*/
|
| 19 |
+
class Mage_Paystation_Model_Standard extends Mage_Payment_Model_Method_Abstract {
|
| 20 |
+
|
| 21 |
+
protected $_code = 'paystation_standard';
|
| 22 |
+
protected $_formBlockType = 'paystation/standard_form';
|
| 23 |
+
protected $_allowCurrencyCode = array('AUD', 'CAD', 'CHF', 'CZK', 'DKK', 'EUR', 'GBP', 'HKD', 'HUF', 'JPY', 'NOK', 'NZD', 'PLN', 'SEK', 'SGD', 'USD');
|
| 24 |
+
// This payment method doesn't support capture, void or refund
|
| 25 |
+
protected $_authorize = '';
|
| 26 |
+
protected $_isGateway = true;
|
| 27 |
+
protected $_canAuthorize = true;
|
| 28 |
+
protected $_canCapture = false;
|
| 29 |
+
protected $_canCapturePartial = false;
|
| 30 |
+
protected $_canRefund = false;
|
| 31 |
+
protected $_canVoid = false;
|
| 32 |
+
protected $_canUseInternal = false;
|
| 33 |
+
protected $_canUseCheckout = true;
|
| 34 |
+
protected $_canUseForMultishipping = true;
|
| 35 |
+
protected $_canSaveCc = false;
|
| 36 |
+
|
| 37 |
+
public function getSession() {
|
| 38 |
+
return Mage::getSingleton('paystation/session');
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
public function getCheckout() {
|
| 42 |
+
return Mage::getSingleton('checkout/session');
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
public function getQuote() {
|
| 46 |
+
return $this->getCheckout()->getQuote();
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
public function canUseInternal() {
|
| 50 |
+
return false;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
public function canUseForMultishipping() {
|
| 54 |
+
return true;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
public function createFormBlock($name) {
|
| 58 |
+
$block = $this->getLayout()->createBlock('paystation/standard_form', $name)
|
| 59 |
+
->setMethod('paystation_standard')
|
| 60 |
+
->setPayment($this->getPayment())
|
| 61 |
+
->setTemplate('paystation/standard/form.phtml');
|
| 62 |
+
|
| 63 |
+
return $block;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
/* validate the currency code is avaialable to use for paystation or not */
|
| 67 |
+
|
| 68 |
+
public function validate() {
|
| 69 |
+
parent::validate();
|
| 70 |
+
$currency_code = $this->getQuote()->getBaseCurrencyCode();
|
| 71 |
+
if (!in_array($currency_code, $this->_allowCurrencyCode)) {
|
| 72 |
+
Mage::throwException(Mage::helper('paystation')->__('Selected currency code (' . $currency_code . ') is not compatabile with PayStation'));
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
//if (!isset($_SESSION['redirectURL'])) $this->initiate_paystation();
|
| 76 |
+
return $this;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
public function onOrderValidate(Mage_Sales_Model_Order_Payment $payment) {
|
| 80 |
+
return $this;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
public function onInvoiceCreate(Mage_Sales_Model_Invoice_Payment $payment) {
|
| 84 |
+
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
public function canCapture() {
|
| 88 |
+
return true;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
public function getOrderPlaceRedirectUrl() {
|
| 92 |
+
|
| 93 |
+
//mail('jack@face.co.nz', 'getOrderPlaceRedirectUrl()', '');
|
| 94 |
+
|
| 95 |
+
//return Mage::getUrl('paystation/standard/redirect', array('_secure' => true));
|
| 96 |
+
// set the quote id so that we can load the quote later if, we need to show the shopping cart page again.
|
| 97 |
+
$session = Mage::getSingleton('checkout/session');
|
| 98 |
+
$session->setPaystationStandardQuoteId($session->getQuoteId());
|
| 99 |
+
$session->unsQuoteId();
|
| 100 |
+
|
| 101 |
+
return $this->initiate_paystation();
|
| 102 |
+
/* if (isset($_SESSION['redirectURL']) && !empty($_SESSION['redirectURL'])) {
|
| 103 |
+
return $_SESSION['redirectURL'];
|
| 104 |
+
}
|
| 105 |
+
return null; */
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
// The fields that you set here are acces in Redirect.php
|
| 109 |
+
// and can be sent to the external payment gateway if needed.
|
| 110 |
+
// All the fields that are entered by the user on the checkout page can be accessed here.
|
| 111 |
+
public function getStandardCheckoutFormFields() {
|
| 112 |
+
|
| 113 |
+
$orderIncrementId = $this->getCheckout()->getLastRealOrderId();
|
| 114 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
|
| 115 |
+
|
| 116 |
+
$quote = $this->getQuote();
|
| 117 |
+
$currency_code = $quote->getBaseCurrencyCode();
|
| 118 |
+
$isQuoteVirtual = $quote->getIsVirtual();
|
| 119 |
+
$address = $isQuoteVirtual ? $quote->getBillingAddress() : $quote->getShippingAddress();
|
| 120 |
+
$shipping = $isQuoteVirtual ? $quote->getShippingAddress() : $quote->getBillingAddress();
|
| 121 |
+
$customer_email = $address->getEmail();
|
| 122 |
+
|
| 123 |
+
//$orderIncrementId = $this->getCheckout()->getLastRealOrderId();
|
| 124 |
+
|
| 125 |
+
if ($address->getFirstname() == '') {
|
| 126 |
+
$orderIncrementId = $this->getCheckout()->getLastRealOrderId();
|
| 127 |
+
$quote = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
|
| 128 |
+
$currency_code = $quote->getBaseCurrencyCode();
|
| 129 |
+
$isQuoteVirtual = $quote->getIsVirtual();
|
| 130 |
+
$address = $isQuoteVirtual ? $quote->getBillingAddress() : $quote->getShippingAddress();
|
| 131 |
+
$shipping = $isQuoteVirtual ? $quote->getShippingAddress() : $quote->getBillingAddress();
|
| 132 |
+
$customer_email = $quote->getCustomerEmail();
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
if (!isset($shipping) || empty($shipping)) {
|
| 136 |
+
$shipping = $address;
|
| 137 |
+
}
|
| 138 |
+
|
| 139 |
+
$sArr = array(
|
| 140 |
+
'merchant_id' => $this->getConfigData('paystation_id'),
|
| 141 |
+
'gateway_id' => $this->getConfigData('gateway_id'),
|
| 142 |
+
'testmode' => $this->getConfigData('testmode'),
|
| 143 |
+
'invoice' => $this->getCheckout()->getLastRealOrderId(),
|
| 144 |
+
'currency_code' => $currency_code,
|
| 145 |
+
'address_override' => 1,
|
| 146 |
+
// billing address
|
| 147 |
+
'first_name' => $address->getFirstname(),
|
| 148 |
+
'last_name' => $address->getLastname(),
|
| 149 |
+
'address1' => $address->getStreet(1),
|
| 150 |
+
'address2' => $address->getStreet(2),
|
| 151 |
+
'city' => $address->getCity(),
|
| 152 |
+
'state' => $address->getRegionCode(),
|
| 153 |
+
'country' => $address->getCountry(),
|
| 154 |
+
'zip' => $address->getPostcode(),
|
| 155 |
+
'telephone' => $address->getTelephone(),
|
| 156 |
+
// shipping address
|
| 157 |
+
's_first_name' => $shipping->getFirstname(),
|
| 158 |
+
's_last_name' => $shipping->getLastname(),
|
| 159 |
+
's_address1' => $shipping->getStreet(1),
|
| 160 |
+
's_address2' => $shipping->getStreet(2),
|
| 161 |
+
's_city' => $shipping->getCity(),
|
| 162 |
+
's_state' => $shipping->getRegionCode(),
|
| 163 |
+
's_country' => $shipping->getCountry(),
|
| 164 |
+
's_zip' => $shipping->getPostcode(),
|
| 165 |
+
's_telephone' => $shipping->getTelephone(),
|
| 166 |
+
'email' => $customer_email,
|
| 167 |
+
'cctype' => $quote->getPayment()->getCcType(),
|
| 168 |
+
'order' => $order
|
| 169 |
+
);
|
| 170 |
+
|
| 171 |
+
//http://docs.magentocommerce.com/Mage_Sales/Mage_Sales_Model_Quote.htm
|
| 172 |
+
|
| 173 |
+
$quote2 = $quote->collectTotals();
|
| 174 |
+
$totals = $quote2->getTotals();
|
| 175 |
+
|
| 176 |
+
$final_amount = $totals['grand_total']['value'];
|
| 177 |
+
|
| 178 |
+
$sArr['final_amount'] = sprintf('%.2f', $final_amount);
|
| 179 |
+
$_SESSION['paystation_amount'] = number_format($final_amount, 4);
|
| 180 |
+
$_SESSION['paystation_id'] = $this->getConfigData('paystation_id');
|
| 181 |
+
//var_dump ($_SESSION['paystation_amount']);
|
| 182 |
+
|
| 183 |
+
return $sArr;
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
public function getPaystationUrl() {
|
| 187 |
+
$url = 'https://secure.paystation.com/cgi-bin/order2/processorder1.pl';
|
| 188 |
+
return $url;
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
public function getDebug() {
|
| 192 |
+
return Mage::getStoreConfig('paystation/wps/debug_flag');
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
public function isInitializeNeeded() {
|
| 196 |
+
return true;
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
public function initialize($paymentAction, $stateObject) {
|
| 200 |
+
$state = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
|
| 201 |
+
$stateObject->setState($state);
|
| 202 |
+
$stateObject->setStatus('pending_payment');
|
| 203 |
+
$stateObject->setIsNotified(false);
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
function makePaystationSessionID($min = 8, $max = 8) {
|
| 207 |
+
// seed the random number generator - straight from PHP manual
|
| 208 |
+
$seed = (double) microtime() * getrandmax();
|
| 209 |
+
srand($seed);
|
| 210 |
+
|
| 211 |
+
// make a string of $max characters with ASCII values of 40-122
|
| 212 |
+
$p = 0;
|
| 213 |
+
$pass ="";
|
| 214 |
+
while ($p < $max):
|
| 215 |
+
$r = chr(123 - (rand() % 75));
|
| 216 |
+
|
| 217 |
+
// get rid of all non-alphanumeric characters
|
| 218 |
+
if (!($r >= 'a' && $r <= 'z') && !($r >= 'A' && $r <= 'Z') && !($r >= '1' && $r <= '9'))
|
| 219 |
+
continue;
|
| 220 |
+
$pass.=$r;
|
| 221 |
+
|
| 222 |
+
$p++;
|
| 223 |
+
endwhile;
|
| 224 |
+
// if string is too short, remake it
|
| 225 |
+
if (strlen($pass) < $min):
|
| 226 |
+
$pass = $this->makePaystationSessionID($min, $max);
|
| 227 |
+
endif;
|
| 228 |
+
|
| 229 |
+
return $pass;
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
function directTransaction($url, $params) {
|
| 233 |
+
|
| 234 |
+
$defined_vars = get_defined_vars();
|
| 235 |
+
|
| 236 |
+
//use curl to get reponse
|
| 237 |
+
$ch = curl_init();
|
| 238 |
+
curl_setopt($ch, CURLOPT_POST, 1);
|
| 239 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
|
| 240 |
+
curl_setopt($ch, CURLOPT_URL, $url);
|
| 241 |
+
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
| 242 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
| 243 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
| 244 |
+
//curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);
|
| 245 |
+
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
|
| 246 |
+
|
| 247 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
| 248 |
+
$result = curl_exec($ch);
|
| 249 |
+
if (curl_error($ch)) {
|
| 250 |
+
echo curl_error($ch);
|
| 251 |
+
}
|
| 252 |
+
curl_close($ch);
|
| 253 |
+
|
| 254 |
+
return $result;
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
function initiate_paystation() {
|
| 258 |
+
|
| 259 |
+
$returnURL = urlencode( Mage::getUrl('paystation/standard/notificationurl'));
|
| 260 |
+
$postbackURL = urlencode( Mage::getUrl('paystation/postback'));
|
| 261 |
+
|
| 262 |
+
|
| 263 |
+
$_SESSION['paystation_success'] = false;
|
| 264 |
+
$_SESSION['paystation_redirected'] = false;
|
| 265 |
+
|
| 266 |
+
// Try to initiate a transaction with PayStation and get the redirect URL
|
| 267 |
+
$checkoutfields = $this->getStandardCheckoutFormFields();
|
| 268 |
+
$email = $checkoutfields['email'];
|
| 269 |
+
|
| 270 |
+
$postback = Mage::getStoreConfig('payment/paystation_standard/postback', Mage::app()->getStore());
|
| 271 |
+
|
| 272 |
+
$quoteID= Mage::getSingleton('checkout/session')->getQuoteId();
|
| 273 |
+
if ($quoteID==NULL) $quoteID = "NULL";
|
| 274 |
+
|
| 275 |
+
$quote = Mage::getModel('sales/quote')->load($quoteID);
|
| 276 |
+
$reservedOrderId = $quote->getReservedOrderId();
|
| 277 |
+
|
| 278 |
+
$authenticationKey = Mage::getStoreConfig('payment/paystation_standard/hmac_key', Mage::app()->getStore());
|
| 279 |
+
$hmacWebserviceName = 'paystation';
|
| 280 |
+
$pstn_HMACTimestamp = time();
|
| 281 |
+
|
| 282 |
+
|
| 283 |
+
$paystationURL = "https://www.paystation.co.nz/direct/paystation.dll";
|
| 284 |
+
$amount = ($checkoutfields['final_amount'] * 100);
|
| 285 |
+
$testMode = ($checkoutfields['testmode'] ? true : false);
|
| 286 |
+
$postback = Mage::getStoreConfig('payment/paystation_standard/postback', Mage::app()->getStore());
|
| 287 |
+
$pstn_pi = $checkoutfields['merchant_id']; //"607113"; //Paystation ID
|
| 288 |
+
$pstn_gi = $checkoutfields['gateway_id']; //"CARDPAY"; //Gateway ID
|
| 289 |
+
$site = ''; // site can be used to differentiate transactions from different websites in admin.
|
| 290 |
+
// $pstn_mr = urlencode('schlocalhost-' . time()); // merchant reference is optional, but is a great way to tie a transaction in with a customer (this is displayed in Paystation Administration when looking at transaction details). Max length is 64 char. Make sure you use it!
|
| 291 |
+
if ($testMode) $pstn_mr = urlencode($email.':test-mode:'.$reservedOrderId);
|
| 292 |
+
else $pstn_mr = urlencode($email.':'.$reservedOrderId);//:'.$orderID);
|
| 293 |
+
|
| 294 |
+
$merchantSession = urlencode(time() . '-' . $this->makePaystationSessionID(18, 18)); // max length of ms is 64 char
|
| 295 |
+
$_SESSION['paystation_ms'] = $merchantSession;
|
| 296 |
+
$paystationParams = "paystation&pstn_pi=" . $pstn_pi . "&pstn_gi=" . $pstn_gi . "&pstn_ms=" . $merchantSession . "&pstn_am=" . $amount . "&pstn_mr=" . $pstn_mr . "&pstn_nr=t";
|
| 297 |
+
$paystationParams .= "&pstn_du=".$returnURL;
|
| 298 |
+
|
| 299 |
+
if ($postback=='1') $paystationParams .= "&pstn_dp=".$postbackURL;
|
| 300 |
+
//echo "postback: ";
|
| 301 |
+
//var_dump ($postback);
|
| 302 |
+
//var_dump ($paystationParams); exit();
|
| 303 |
+
|
| 304 |
+
//$this->setTransactionAdditionalInfo ('pstn_ms', $merchantSession);
|
| 305 |
+
|
| 306 |
+
if ($testMode == true) {
|
| 307 |
+
$paystationParams = $paystationParams . "&pstn_tm=t";
|
| 308 |
+
}
|
| 309 |
+
// if, possible pass the cc type so that the first step of selecting card type can be skipped on the external page
|
| 310 |
+
|
| 311 |
+
|
| 312 |
+
$hmacBody = pack('a*', $pstn_HMACTimestamp).pack('a*', $hmacWebserviceName) . pack('a*', $paystationParams);
|
| 313 |
+
$hmacHash = hash_hmac('sha512', $hmacBody, $authenticationKey);
|
| 314 |
+
$hmacGetParams = '?pstn_HMACTimestamp=' . $pstn_HMACTimestamp . '&pstn_HMAC=' . $hmacHash;
|
| 315 |
+
$paystationURL.= $hmacGetParams;
|
| 316 |
+
|
| 317 |
+
$initiationResult = $this->directTransaction($paystationURL, $paystationParams);
|
| 318 |
+
preg_match_all("/<(.*?)>(.*?)\</", $initiationResult, $outarr, PREG_SET_ORDER);
|
| 319 |
+
$n = 0;
|
| 320 |
+
while (isset($outarr[$n])) {
|
| 321 |
+
$retarr[$outarr[$n][1]] = strip_tags($outarr[$n][0]);
|
| 322 |
+
$n++;
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
|
| 326 |
+
$_SESSION['redirectURL'] = '';
|
| 327 |
+
if (isset($retarr['DigitalOrder']) && isset($retarr['PaystationTransactionID'])) {
|
| 328 |
+
$_SESSION['redirectURL'] = $retarr['DigitalOrder'];
|
| 329 |
+
|
| 330 |
+
|
| 331 |
+
return $_SESSION['redirectURL'];
|
| 332 |
+
} else {
|
| 333 |
+
Mage::throwException(Mage::helper('paystation')->__('Error: ' . $retarr['em']));
|
| 334 |
+
return null;
|
| 335 |
+
}
|
| 336 |
+
}
|
| 337 |
+
|
| 338 |
+
}
|
app/code/local/Mage/Paystation/controllers/PostbackController.php
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* PayStation Payment Module For Magento
|
| 5 |
+
*
|
| 6 |
+
* NOTICE OF LICENSE
|
| 7 |
+
*
|
| 8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 9 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 10 |
+
*
|
| 11 |
+
* @package Mage_Paystation
|
| 12 |
+
* @author Jack Stinchcombe info@paystation.co.nz
|
| 13 |
+
* @copyright Copyright (c) 2014 Paystation Ltd
|
| 14 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 15 |
+
*
|
| 16 |
+
*
|
| 17 |
+
*/
|
| 18 |
+
require_once('Mage/Paystation/controllers/StandardController.php');
|
| 19 |
+
|
| 20 |
+
class Mage_Paystation_PostbackController extends Mage_Core_Controller_Front_Action {
|
| 21 |
+
|
| 22 |
+
public function indexAction() {
|
| 23 |
+
if (!$this->getRequest()->isPost()) {
|
| 24 |
+
return;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
$xml = file_get_contents('php://input');
|
| 28 |
+
$xml = simplexml_load_string($xml);
|
| 29 |
+
//var_dump ($xml);
|
| 30 |
+
|
| 31 |
+
if (!empty($xml)) {
|
| 32 |
+
//echo ('<hr>!empty(xml) <br><br>');
|
| 33 |
+
$errorCode = (int) $xml->ec;
|
| 34 |
+
$errorMessage = $xml->em;
|
| 35 |
+
$transactionId = $xml->ti;
|
| 36 |
+
$cardType = $xml->ct;
|
| 37 |
+
$merchantReference = $xml->merchant_ref;
|
| 38 |
+
$testMode = $xml->tm;
|
| 39 |
+
$merchantSession = $xml->MerchantSession;
|
| 40 |
+
$usedAcquirerMerchantId = $xml->UsedAcquirerMerchantID;
|
| 41 |
+
$amount = $xml->PurchaseAmount; // Note this is in cents
|
| 42 |
+
$transactionTime = $xml->TransactionTime;
|
| 43 |
+
$requestIp = $xml->RequestIP;
|
| 44 |
+
|
| 45 |
+
$message = "Error Code: " . $errorCode . "<br/>";
|
| 46 |
+
$message .= "Error Message: " . $errorMessage . "<br/>";
|
| 47 |
+
$message .= "Transaction ID: " . $transactionId . "<br/>";
|
| 48 |
+
$message .= "Card Type: " . $cardType . "<br/>";
|
| 49 |
+
$message .= "Merchant Reference: " . $merchantReference . "<br/>";
|
| 50 |
+
$message .= "Test Mode: " . $testMode . "<br/>";
|
| 51 |
+
$message .= "Merchant Session: " . $merchantSession . "<br/>";
|
| 52 |
+
$message .= "Merchant ID: " . $usedAcquirerMerchantId . "<br/>";
|
| 53 |
+
$message .= "Amount: " . $amount . " (cents)<br/>";
|
| 54 |
+
$message .= "Transaction Time: " . $transactionTime . "<br/>";
|
| 55 |
+
$message .= "IP: " . $requestIp . "<br/>";
|
| 56 |
+
|
| 57 |
+
$merchant_ref = $merchantReference;
|
| 58 |
+
$xpl = explode(':', $merchant_ref);
|
| 59 |
+
$customer_email = $xpl[0];
|
| 60 |
+
$orderid = $xpl[1];
|
| 61 |
+
$testmode = Mage::getStoreConfig('payment/paystation_standard/testmode', Mage::app()->getStore());
|
| 62 |
+
|
| 63 |
+
if ($orderid == "test-mode" && $testmode =="1") {
|
| 64 |
+
$orderid = $xpl[2];
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
//var_dump ($customer_email);
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($orderid);
|
| 73 |
+
|
| 74 |
+
|
| 75 |
+
if ($errorCode == 0) {
|
| 76 |
+
|
| 77 |
+
// transaction approved ...
|
| 78 |
+
|
| 79 |
+
//var_dump ($order);
|
| 80 |
+
|
| 81 |
+
$this->processOrder($order, $transactionId, $errorMessage);
|
| 82 |
+
|
| 83 |
+
$s = $order->getStatusLabel();
|
| 84 |
+
|
| 85 |
+
//var_dump ($s);
|
| 86 |
+
|
| 87 |
+
//echo " -==- =-=-= ";
|
| 88 |
+
|
| 89 |
+
//var_dump ($s);
|
| 90 |
+
//var_dump ($order);
|
| 91 |
+
|
| 92 |
+
$success = true;
|
| 93 |
+
|
| 94 |
+
$msg = "Payment successful.\n<br />TnxID: " . $transactionId . ".\n<br />TnxSess: " . $merchantSession;
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
return; // this
|
| 98 |
+
} else {
|
| 99 |
+
if ($order->getId()) {
|
| 100 |
+
$order->addStatusToHistory(
|
| 101 |
+
$order->getStatus(),//continue setting current order status
|
| 102 |
+
Mage_Sales_Model_Order::STATE_CANCELED, urldecode($errorMessage) . ' at PayStation', Mage::helper('paystation')->__($errorMessage . ' from PayStation')
|
| 103 |
+
);
|
| 104 |
+
$order->setState(Mage_Sales_Model_Order::STATE_CANCELED, true);
|
| 105 |
+
$order->save();
|
| 106 |
+
|
| 107 |
+
//\echo "<hr>";
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
function processOrder($order, $transactionId, $errorMessage) {
|
| 114 |
+
//$s = "dsffsdsd";//$order->getStatusLabel();
|
| 115 |
+
|
| 116 |
+
// echo " ?? ??";
|
| 117 |
+
//var_dump ($s);
|
| 118 |
+
//echo "<hr>";
|
| 119 |
+
//
|
| 120 |
+
// echo "<pre>";
|
| 121 |
+
// var_dump($order);
|
| 122 |
+
echo "<hr>";
|
| 123 |
+
|
| 124 |
+
if ($order->getId()) {
|
| 125 |
+
|
| 126 |
+
$amount = $order->getGrandTotal();
|
| 127 |
+
$order->addStatusToHistory(
|
| 128 |
+
$order->getStatus(), urldecode($errorMessage) . ' at Paystation', Mage::helper('paystation')->__($errorMessage . ' from Paystation')
|
| 129 |
+
);
|
| 130 |
+
$payment = $order->getPayment();
|
| 131 |
+
$payment->setTransactionId( $transactionId)
|
| 132 |
+
->setIsTransactionClosed(0);
|
| 133 |
+
|
| 134 |
+
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);//, Mage::helper('paystation')->__('PayStation payment successful.', true), $notified = true);
|
| 135 |
+
$order->save();
|
| 136 |
+
|
| 137 |
+
//var_dump ($order);
|
| 138 |
+
|
| 139 |
+
if (method_exists($payment, 'registerCaptureNotification')) {
|
| 140 |
+
$payment->registerCaptureNotification($amount);
|
| 141 |
+
$order->sendNewOrderEmail();
|
| 142 |
+
} else {
|
| 143 |
+
$newOrderStatus = $order->getStatus();
|
| 144 |
+
if (!$order->canInvoice()) {
|
| 145 |
+
// when order cannot create invoice, need to have some logic to take care
|
| 146 |
+
$order->addStatusToHistory(
|
| 147 |
+
$order->getStatus(), // keep order status/state
|
| 148 |
+
Mage::helper('paystation')->__('Error in creating an invoice', true), $notified = true
|
| 149 |
+
);
|
| 150 |
+
} else {
|
| 151 |
+
// need to save transaction id
|
| 152 |
+
$order->getPayment()->setTransactionId($_POST['order_num']);
|
| 153 |
+
|
| 154 |
+
// need to convert from order into invoice
|
| 155 |
+
$invoice = $order->prepareInvoice();
|
| 156 |
+
$invoice->register()->pay();
|
| 157 |
+
Mage::getModel('core/resource_transaction')
|
| 158 |
+
->addObject($invoice)
|
| 159 |
+
->addObject($invoice->getOrder())
|
| 160 |
+
->save();
|
| 161 |
+
|
| 162 |
+
$order->setState(
|
| 163 |
+
//Mage_Sales_Model_Order::STATE_COMPLETE, true,
|
| 164 |
+
Mage_Sales_Model_Order::STATE_PROCESSING, true, Mage::helper('paystation')->__('Notified customer about invoice #%s.', $invoice->getIncrementId()), $notified = true);
|
| 165 |
+
//Mage_Sales_Model_Order::STATE_PROCESSING);//, true, Mage::helper('paystation')->__('Notified customer about invoice #%s.', $invoice->getIncrementId()), $notified = true);
|
| 166 |
+
|
| 167 |
+
$order->save();
|
| 168 |
+
$order->sendNewOrderEmail();
|
| 169 |
+
}
|
| 170 |
+
}
|
| 171 |
+
$order->save();
|
| 172 |
+
}
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
?>
|
app/code/local/Mage/Paystation/controllers/StandardController.php
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* PayStation Payment Module For Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 9 |
+
*
|
| 10 |
+
* @package Mage_Paystation
|
| 11 |
+
* @author Gayatri S Ajith <gayatri@schogini.com>
|
| 12 |
+
* @copyright Copyright (c) 2010 Schogini (http://schogini.biz)
|
| 13 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 14 |
+
*/
|
| 15 |
+
class Mage_Paystation_StandardController extends Mage_Core_Controller_Front_Action
|
| 16 |
+
{
|
| 17 |
+
protected $_order;
|
| 18 |
+
|
| 19 |
+
public function getOrder()
|
| 20 |
+
{
|
| 21 |
+
if ($this->_order == null) {
|
| 22 |
+
}
|
| 23 |
+
return $this->_order;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
protected function _expireAjax()
|
| 27 |
+
{
|
| 28 |
+
if (!Mage::getSingleton('checkout/session')->getQuote()->hasItems()) {
|
| 29 |
+
$this->getResponse()->setHeader('HTTP/1.1','403 Session Expired');
|
| 30 |
+
exit;
|
| 31 |
+
}
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
public function getStandard()
|
| 35 |
+
{
|
| 36 |
+
return Mage::getSingleton('paystation/standard');
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
/**
|
| 40 |
+
* When a customer chooses Paystation on Checkout/Payment page
|
| 41 |
+
*
|
| 42 |
+
*/
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
public function redirectAction()
|
| 46 |
+
{
|
| 47 |
+
|
| 48 |
+
$paystation = Mage::getSingleton('paystation/standard');
|
| 49 |
+
$paystation->payment_success = false;
|
| 50 |
+
|
| 51 |
+
$session = Mage::getSingleton('checkout/session');
|
| 52 |
+
$session->setPaystationStandardQuoteId($session->getQuoteId());
|
| 53 |
+
$_SESSION['quoteId'] = $session->getQuoteId();
|
| 54 |
+
$session->unsQuoteId();
|
| 55 |
+
|
| 56 |
+
header('location: ' . $_SESSION['redirectURL']);
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
public function notificationurlAction()
|
| 60 |
+
{
|
| 61 |
+
$success = false;
|
| 62 |
+
$message = '';
|
| 63 |
+
$display_message = '';
|
| 64 |
+
|
| 65 |
+
$session = Mage::getSingleton('checkout/session');
|
| 66 |
+
$quote = $session ->getQuote();
|
| 67 |
+
$quote_data = $quote->$_data;
|
| 68 |
+
$is_multi_shipping = $quote_data ['is_multi_shipping'];
|
| 69 |
+
|
| 70 |
+
$confirm =-1;
|
| 71 |
+
$success = false;
|
| 72 |
+
$QL_amount = '';
|
| 73 |
+
$QL_EC =-1;
|
| 74 |
+
|
| 75 |
+
if (isset($_SESSION['paystation_id'])) {
|
| 76 |
+
$confirm = $this->transactionVerification($_SESSION['paystation_id'],$_GET['ti'], $QL_amount, $QL_merchant_session, $QL_EC);
|
| 77 |
+
//mail ('jack@face.co.nz', 'QL_amount:'.(int)$QL_amount. ' QL_merchant_session: '.$QL_merchant_session. ' ec: '.$confirm, '');
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
if (!isset($_GET['em'])) {
|
| 81 |
+
$_SESSION['paystation_success']=false;
|
| 82 |
+
$success = false;
|
| 83 |
+
$display_message = "Sorry, we couldn't find the payment information.\nTransaction ID: " . ((isset($_GET['ti']))?$_GET['ti']:'Not defined') . "\nError Code: " . ((isset($_GET['ec']))?$_GET['ec']:'Not defined');
|
| 84 |
+
$message = "Payment information was not included with return URL." .
|
| 85 |
+
"\n<br />TnxID: " . ((isset($_GET['ti']))?$_GET['ti']:'Not defined') .
|
| 86 |
+
"\n<br />ErrCode: " . ((isset($_GET['ec']))?$_GET['ec']:'Not defined') .
|
| 87 |
+
"\n<br />TnxSess: " . ((isset($_GET['ms']))?$_GET['ms']:'Not defined') .
|
| 88 |
+
"\n<br />Amount: " . ((isset($_GET['am']))?$_GET['am']:'Not defined');
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
elseif ($_GET['ec']=="0" && (int)$confirm==0 && $QL_amount==$_GET['am'] && $_SESSION['paystation_ms'] == $QL_merchant_session) {
|
| 92 |
+
// transaction approved ...
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
$success = true;
|
| 96 |
+
$_SESSION['paystation_success']=true;
|
| 97 |
+
$msg = "Payment successful.\n<br />TnxID: " . ((isset($_GET['ti']))?$_GET['ti']:'Not defined') . ".\n<br />TnxSess: " . ((isset($_GET['ms']))?$_GET['ms']:'Not defined');
|
| 98 |
+
|
| 99 |
+
$session = Mage::getSingleton('checkout/session');
|
| 100 |
+
|
| 101 |
+
//get the order number from the merchant reference
|
| 102 |
+
$merchant_ref = $_GET['merchant_ref'];
|
| 103 |
+
$xpl = explode ('-', $merchant_ref);
|
| 104 |
+
$_SESSION['paystation_cust_email'] = $xpl[1];
|
| 105 |
+
|
| 106 |
+
$orderid= Mage::getSingleton('checkout/session')->getLastRealOrderId();
|
| 107 |
+
|
| 108 |
+
if ($orderid==NULL) {
|
| 109 |
+
$xpl = explode(':', $merchant_ref);
|
| 110 |
+
$customer_email = $xpl[0];
|
| 111 |
+
$orderid = $xpl[1];
|
| 112 |
+
$testmode = Mage::getStoreConfig('payment/paystation_standard/testmode', Mage::app()->getStore());
|
| 113 |
+
|
| 114 |
+
if ($orderid == "test-mode" && $testmode =="1") {
|
| 115 |
+
$orderid = $xpl[2];
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($orderid);
|
| 120 |
+
|
| 121 |
+
if ($_SESSION['paystation_multishipping']==true) {
|
| 122 |
+
|
| 123 |
+
$this->_redirect('checkout/multishipping/success');
|
| 124 |
+
}
|
| 125 |
+
else {
|
| 126 |
+
$postback = Mage::getStoreConfig('payment/paystation_standard/postback', Mage::app()->getStore());
|
| 127 |
+
|
| 128 |
+
if ($order && $postback=="0") {
|
| 129 |
+
$this->processOrder ($order);
|
| 130 |
+
}
|
| 131 |
+
$this->_redirect('checkout/onepage/success');
|
| 132 |
+
}
|
| 133 |
+
return; // this return has not particular use - just to ensure that after redirect it doesn't do anything
|
| 134 |
+
|
| 135 |
+
} else {
|
| 136 |
+
// transaction failed
|
| 137 |
+
$success = false;
|
| 138 |
+
$display_message = $_GET['em'] . ".\nTransaction ID: " . ((isset($_GET['ti']))?$_GET['ti']:'Not defined') . "\nError Code: " . ((isset($_GET['ec']))?$_GET['ec']:'Not defined');
|
| 139 |
+
|
| 140 |
+
$message = "Paystation payment unsucessful. Message from gateway: " . $_GET['em'] .
|
| 141 |
+
"\n<br />TnxID: " . ((isset($_GET['ti']))?$_GET['ti']:'Not defined') .
|
| 142 |
+
"\n<br />ErrCode: " . ((isset($_GET['ec']))?$_GET['ec']:'Not defined') .
|
| 143 |
+
"\n<br />TnxSess: " . ((isset($_GET['ms']))?$_GET['ms']:'Not defined') .
|
| 144 |
+
"\n<br />Amount: " . ((isset($_GET['am']))?$_GET['am']:'Not defined');
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
if (!$success) {
|
| 148 |
+
if ($is_multi_shipping==true) {
|
| 149 |
+
|
| 150 |
+
$_SESSION['paystation_success']=false;
|
| 151 |
+
$_SESSION['paystation_error_message'] = $display_message;
|
| 152 |
+
$this->_redirect('checkout/multishipping/success');
|
| 153 |
+
}
|
| 154 |
+
elseif ($is_multi_shipping==false) $this->paymentError($message, $display_message);
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
function paymentError($msg, $display_message = '')
|
| 160 |
+
{
|
| 161 |
+
// if a display message has not been set then, use the order message
|
| 162 |
+
if (empty($display_message)) $display_message = $msg;
|
| 163 |
+
|
| 164 |
+
// cancel order
|
| 165 |
+
$session = Mage::getSingleton('checkout/session');
|
| 166 |
+
$session->setQuoteId($session->getPaystationStandardQuoteId(true));
|
| 167 |
+
Mage::getModel('sales/quote')->load($session->getQuoteId())->setIsActive(true)->save();
|
| 168 |
+
|
| 169 |
+
|
| 170 |
+
$postback = Mage::getStoreConfig('payment/paystation_standard/postback', Mage::app()->getStore());
|
| 171 |
+
|
| 172 |
+
if ($session->getLastRealOrderId() && $postback=="0") {
|
| 173 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
|
| 174 |
+
if ($order->getId()) {
|
| 175 |
+
$order->addStatusToHistory(
|
| 176 |
+
//$order->getStatus(),//continue setting current order status
|
| 177 |
+
Mage_Sales_Model_Order::STATE_CANCELED,
|
| 178 |
+
urldecode($msg) . ' at PayStation',
|
| 179 |
+
Mage::helper('paystation')->__($msg . ' from PayStation')
|
| 180 |
+
);
|
| 181 |
+
$order->save();
|
| 182 |
+
}
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
$display_message = 'Paystation payment unsuccessful. Reason: ' . "\n" . $display_message;
|
| 186 |
+
$session->addError(nl2br($display_message));
|
| 187 |
+
|
| 188 |
+
$this->_redirect('checkout/onepage/failure');
|
| 189 |
+
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
|
| 193 |
+
public function transactionVerification($paystationID,$transactionID, &$QL_amount, &$QL_merchant_session, &$QL_EC) {
|
| 194 |
+
|
| 195 |
+
$transactionVerified='';
|
| 196 |
+
$lookupXML=$this->quickLookup($paystationID,'ti',$transactionID);
|
| 197 |
+
//$lookupXML=quickLookup($paystationID,'ms',$merchantSession);
|
| 198 |
+
$p = xml_parser_create();
|
| 199 |
+
xml_parse_into_struct($p, $lookupXML, $vals, $tags);
|
| 200 |
+
xml_parser_free($p);
|
| 201 |
+
//ob_start();
|
| 202 |
+
///echo "\r\n";
|
| 203 |
+
for ($i=0;$i<count($vals);$i++) {
|
| 204 |
+
|
| 205 |
+
$key = $vals[$i];
|
| 206 |
+
$key = $key['tag'];
|
| 207 |
+
$val = $i;
|
| 208 |
+
//var_dump ($key);
|
| 209 |
+
if ($key == "PAYSTATIONERRORCODE") {
|
| 210 |
+
$transactionVerified= (int)$vals[$val]['value'];
|
| 211 |
+
$QL_EC = (int)$transactionVerified;
|
| 212 |
+
//echo "QL_EC: "; var_dump ($QL_EC);
|
| 213 |
+
}
|
| 214 |
+
elseif ($key == "PURCHASEAMOUNT") { //19
|
| 215 |
+
$QL_amount= $vals[$val];
|
| 216 |
+
$QL_amount= $QL_amount ['value'];
|
| 217 |
+
}
|
| 218 |
+
elseif ($key == "MERCHANTSESSION") { //15
|
| 219 |
+
$QL_merchant_session= $vals[$val]['value'];
|
| 220 |
+
}
|
| 221 |
+
else {
|
| 222 |
+
continue;
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
+
return $transactionVerified;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
public function quickLookup($pi,$type,$value){
|
| 230 |
+
/*
|
| 231 |
+
https://www.paystation.co.nz/lookup/quick/?pi=850047&ms=123
|
| 232 |
+
- or –
|
| 233 |
+
https://www.paystation.co.nz/lookup/quick/?pi=850047&ti=0000585260-01
|
| 234 |
+
*/
|
| 235 |
+
|
| 236 |
+
$url = "https://payments.paystation.co.nz/lookup/";//
|
| 237 |
+
$params = "&pi=$pi&$type=$value";
|
| 238 |
+
|
| 239 |
+
$authenticationKey = Mage::getStoreConfig('payment/paystation_standard/hmac_key', Mage::app()->getStore());
|
| 240 |
+
$hmacWebserviceName = 'paystation';
|
| 241 |
+
$pstn_HMACTimestamp = time();
|
| 242 |
+
|
| 243 |
+
$hmacBody = pack('a*', $pstn_HMACTimestamp) . pack('a*', $hmacWebserviceName) . pack('a*', $params);
|
| 244 |
+
$hmacHash = hash_hmac('sha512', $hmacBody, $authenticationKey);
|
| 245 |
+
$hmacGetParams = '?pstn_HMACTimestamp=' . $pstn_HMACTimestamp . '&pstn_HMAC=' . $hmacHash;
|
| 246 |
+
|
| 247 |
+
$url.= $hmacGetParams;
|
| 248 |
+
$defined_vars = get_defined_vars();
|
| 249 |
+
//use curl to get reponse
|
| 250 |
+
$ch = curl_init();
|
| 251 |
+
curl_setopt($ch, CURLOPT_URL,$url);
|
| 252 |
+
curl_setopt($ch, CURLOPT_POST, 1);
|
| 253 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
|
| 254 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
| 255 |
+
curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);
|
| 256 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
|
| 257 |
+
$result=curl_exec ($ch);
|
| 258 |
+
curl_close ($ch);
|
| 259 |
+
|
| 260 |
+
|
| 261 |
+
|
| 262 |
+
$h = htmlspecialchars($result);
|
| 263 |
+
|
| 264 |
+
return $result;
|
| 265 |
+
}
|
| 266 |
+
|
| 267 |
+
function parseCode($mvalues) {
|
| 268 |
+
$result='';
|
| 269 |
+
for ($i=0; $i < count($mvalues); $i++) {
|
| 270 |
+
if (!strcmp($mvalues[$i]["tag"],"QSIRESPONSECODE") && isset($mvalues[$i]["value"])){
|
| 271 |
+
$result=$mvalues[$i]["value"];
|
| 272 |
+
}
|
| 273 |
+
}
|
| 274 |
+
return $result;
|
| 275 |
+
}
|
| 276 |
+
function processOrder ($order) {
|
| 277 |
+
|
| 278 |
+
if ($order->getId()) {
|
| 279 |
+
$amount = $order->getGrandTotal();
|
| 280 |
+
$order->addStatusToHistory(
|
| 281 |
+
$order->getStatus(),
|
| 282 |
+
urldecode($msg) . ' at Paystation',
|
| 283 |
+
Mage::helper('paystation')->__($msg . ' from Paystation')
|
| 284 |
+
);
|
| 285 |
+
$payment = $order->getPayment();
|
| 286 |
+
$payment->setTransactionId($_GET['ti'])
|
| 287 |
+
->setIsTransactionClosed(0);
|
| 288 |
+
|
| 289 |
+
$order->setState(
|
| 290 |
+
Mage_Sales_Model_Order::STATE_PROCESSING, true, 'PayStation payment successful.');
|
| 291 |
+
|
| 292 |
+
|
| 293 |
+
$st = $order->getStatus();
|
| 294 |
+
|
| 295 |
+
|
| 296 |
+
if (method_exists($payment, 'registerCaptureNotification')) {
|
| 297 |
+
$payment->registerCaptureNotification($amount);
|
| 298 |
+
$order->sendNewOrderEmail();
|
| 299 |
+
|
| 300 |
+
$order->setState(
|
| 301 |
+
Mage_Sales_Model_Order::STATE_PROCESSING, true, 'PayStation payment successful.', true);
|
| 302 |
+
$order->save();
|
| 303 |
+
|
| 304 |
+
}
|
| 305 |
+
else {
|
| 306 |
+
$newOrderStatus = $order->getStatus();
|
| 307 |
+
if (!$order->canInvoice()) {
|
| 308 |
+
// when order cannot create invoice, need to have some logic to take care
|
| 309 |
+
$order->addStatusToHistory(
|
| 310 |
+
$order->getStatus(), // keep order status/state
|
| 311 |
+
Mage::helper('paystation')->__('Error in creating an invoice', true),
|
| 312 |
+
$notified = true
|
| 313 |
+
);
|
| 314 |
+
|
| 315 |
+
} else {
|
| 316 |
+
// need to save transaction id
|
| 317 |
+
$order->getPayment()->setTransactionId($_GET['ti']);
|
| 318 |
+
|
| 319 |
+
// need to convert from order into invoice
|
| 320 |
+
$invoice = $order->prepareInvoice();
|
| 321 |
+
$invoice->register()->pay();
|
| 322 |
+
Mage::getModel('core/resource_transaction')
|
| 323 |
+
->addObject($invoice)
|
| 324 |
+
->addObject($invoice->getOrder())
|
| 325 |
+
->save();
|
| 326 |
+
|
| 327 |
+
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true,
|
| 328 |
+
Mage::helper('paystation')->__('Notified customer about invoice #%s.', $invoice->getIncrementId()),
|
| 329 |
+
$notified = true
|
| 330 |
+
);
|
| 331 |
+
$order->save();
|
| 332 |
+
$order->sendNewOrderEmail();
|
| 333 |
+
}
|
| 334 |
+
|
| 335 |
+
}
|
| 336 |
+
$order->save();
|
| 337 |
+
}
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
}
|
| 341 |
+
|
| 342 |
+
?>
|
app/code/local/Mage/Paystation/etc/config.xml
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Mage_Paystation>
|
| 5 |
+
<version>0.1</version>
|
| 6 |
+
</Mage_Paystation>
|
| 7 |
+
</modules>
|
| 8 |
+
<global>
|
| 9 |
+
<models>
|
| 10 |
+
<paystation>
|
| 11 |
+
<class>Mage_Paystation_Model</class>
|
| 12 |
+
<resourceModel>paystation_mysql4</resourceModel>
|
| 13 |
+
</paystation>
|
| 14 |
+
<paystation_mysql4>
|
| 15 |
+
<class>Mage_Paystation_Model_Mysql4</class>
|
| 16 |
+
<entities>
|
| 17 |
+
<paystation_debug><table>paystation_debug</table></paystation_debug>
|
| 18 |
+
</entities>
|
| 19 |
+
</paystation_mysql4>
|
| 20 |
+
</models>
|
| 21 |
+
<resources>
|
| 22 |
+
<paystation_setup>
|
| 23 |
+
<connection>
|
| 24 |
+
<use>core_setup</use>
|
| 25 |
+
</connection>
|
| 26 |
+
</paystation_setup>
|
| 27 |
+
<paystation_write>
|
| 28 |
+
<connection>
|
| 29 |
+
<use>core_write</use>
|
| 30 |
+
</connection>
|
| 31 |
+
</paystation_write>
|
| 32 |
+
<paystation_read>
|
| 33 |
+
<connection>
|
| 34 |
+
<use>core_read</use>
|
| 35 |
+
</connection>
|
| 36 |
+
</paystation_read>
|
| 37 |
+
</resources>
|
| 38 |
+
<blocks>
|
| 39 |
+
<paystation><class>Mage_Paystation_Block</class></paystation>
|
| 40 |
+
</blocks>
|
| 41 |
+
<rewrite>
|
| 42 |
+
|
| 43 |
+
<Mage_Paystation_checkout_multishipping_overview>
|
| 44 |
+
<from><![CDATA[#^/checkout/multishipping/overview/#]]></from>
|
| 45 |
+
|
| 46 |
+
<to>/paystation/checkout_multishipping/overview/</to>
|
| 47 |
+
</Mage_Paystation_checkout_multishipping_overview>
|
| 48 |
+
<Mage_Paystation_checkout_multishipping_overviewPost>
|
| 49 |
+
<from><![CDATA[#^/checkout/multishipping/overviewPost/#]]></from>
|
| 50 |
+
|
| 51 |
+
<to>/paystation/checkout_multishipping/overviewPost/</to>
|
| 52 |
+
</Mage_Paystation_checkout_multishipping_overviewPost>
|
| 53 |
+
<Mage_Paystation_checkout_multishipping_success>
|
| 54 |
+
<from><![CDATA[#^/checkout/multishipping/success/#]]></from>
|
| 55 |
+
<to>/paystation/checkout_multishipping/success/</to>
|
| 56 |
+
</Mage_Paystation_checkout_multishipping_success>
|
| 57 |
+
</rewrite>
|
| 58 |
+
</global>
|
| 59 |
+
<frontend>
|
| 60 |
+
<secure_url>
|
| 61 |
+
<paystation_standard>/paystation/standard</paystation_standard>
|
| 62 |
+
</secure_url>
|
| 63 |
+
<routers>
|
| 64 |
+
<paystation>
|
| 65 |
+
<use>standard</use>
|
| 66 |
+
<args>
|
| 67 |
+
<module>Mage_Paystation</module>
|
| 68 |
+
<frontName>paystation</frontName>
|
| 69 |
+
</args>
|
| 70 |
+
</paystation>
|
| 71 |
+
</routers>
|
| 72 |
+
</frontend>
|
| 73 |
+
<default>
|
| 74 |
+
<payment>
|
| 75 |
+
<paystation_standard>
|
| 76 |
+
<model>paystation/standard</model>
|
| 77 |
+
<title>Paystation Payment Gateway</title>
|
| 78 |
+
<testmode>1</testmode>
|
| 79 |
+
<postback>1</postback>
|
| 80 |
+
<allowspecific>0</allowspecific>
|
| 81 |
+
<order_status>pending_paystation</order_status>
|
| 82 |
+
<cctypes>visa,mastercard</cctypes>
|
| 83 |
+
</paystation_standard>
|
| 84 |
+
</payment>
|
| 85 |
+
</default>
|
| 86 |
+
</config>
|
app/code/local/Mage/Paystation/etc/system.xml
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<sections>
|
| 4 |
+
<payment>
|
| 5 |
+
<groups>
|
| 6 |
+
<paystation_standard translate="label" module="paystation">
|
| 7 |
+
<label>Paystation Payment Gateway</label>
|
| 8 |
+
|
| 9 |
+
<frontend_type>text</frontend_type>
|
| 10 |
+
<sort_order>102</sort_order>
|
| 11 |
+
<show_in_default>1</show_in_default>
|
| 12 |
+
<show_in_website>1</show_in_website>
|
| 13 |
+
<show_in_store>1</show_in_store>
|
| 14 |
+
<fields>
|
| 15 |
+
<active translate="label">
|
| 16 |
+
<label>Enabled</label>
|
| 17 |
+
<frontend_type>select</frontend_type>
|
| 18 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 19 |
+
<sort_order>1</sort_order>
|
| 20 |
+
<show_in_default>1</show_in_default>
|
| 21 |
+
<show_in_website>1</show_in_website>
|
| 22 |
+
<show_in_store>1</show_in_store>
|
| 23 |
+
</active>
|
| 24 |
+
<title translate="label">
|
| 25 |
+
<label>Title</label>
|
| 26 |
+
<comment>This is the text that appears beside the payment method during checkout.</comment>
|
| 27 |
+
<frontend_type>text</frontend_type>
|
| 28 |
+
<sort_order>2</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 |
+
</title>
|
| 33 |
+
<paystation_id translate="label">
|
| 34 |
+
<comment>Provided by Paystation</comment>
|
| 35 |
+
<label>Paystation ID</label>
|
| 36 |
+
<frontend_type>text</frontend_type>
|
| 37 |
+
<sort_order>3</sort_order>
|
| 38 |
+
<show_in_default>1</show_in_default>
|
| 39 |
+
<show_in_website>1</show_in_website>
|
| 40 |
+
<show_in_store>1</show_in_store>
|
| 41 |
+
</paystation_id>
|
| 42 |
+
<gateway_id translate="label">
|
| 43 |
+
<comment>Provided by Paystation</comment>
|
| 44 |
+
<label>Gateway ID</label>
|
| 45 |
+
<frontend_type>text</frontend_type>
|
| 46 |
+
<sort_order>4</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 |
+
</gateway_id>
|
| 51 |
+
<hmac_key translate="label">
|
| 52 |
+
<comment>Provided by Paystation</comment>
|
| 53 |
+
<label>HMAC key</label>
|
| 54 |
+
<frontend_type>text</frontend_type>
|
| 55 |
+
<sort_order>5</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 |
+
</hmac_key>
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
<postback translate="label">
|
| 63 |
+
<comment>
|
| 64 |
+
<![CDATA[
|
| 65 |
+
We strongly suggest setting 'Enable Postback' to 'Yes' as it will allow the cart to capture payment results even
|
| 66 |
+
if your customers re-direct is interrupted. However, if your development/test environment is local or on a network
|
| 67 |
+
that cannot receive connections from the internet, you must set 'Enable Postback' to 'No'.<br/><br/>
|
| 68 |
+
|
| 69 |
+
Your Paystation account needs to reflect your Magento settings accurately, otherwise order status will not update correctly.
|
| 70 |
+
Email <b>info@paystation.co.nz</b> with your Paystation ID and advise whether 'Enable Postback' is set to 'Yes' or 'No' in your Magento settings.
|
| 71 |
+
]]>
|
| 72 |
+
</comment>
|
| 73 |
+
<label>Enable PostBack</label>
|
| 74 |
+
<frontend_type>select</frontend_type>
|
| 75 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 76 |
+
<sort_order>6</sort_order>
|
| 77 |
+
<show_in_default>1</show_in_default>
|
| 78 |
+
<show_in_website>1</show_in_website>
|
| 79 |
+
<show_in_store>1</show_in_store>
|
| 80 |
+
</postback>
|
| 81 |
+
<testmode translate="label">
|
| 82 |
+
<label>Test Mode</label>
|
| 83 |
+
<frontend_type>select</frontend_type>
|
| 84 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 85 |
+
<sort_order>7</sort_order>
|
| 86 |
+
<show_in_default>1</show_in_default>
|
| 87 |
+
<show_in_website>1</show_in_website>
|
| 88 |
+
<show_in_store>1</show_in_store>
|
| 89 |
+
</testmode>
|
| 90 |
+
<sort_order translate="label">
|
| 91 |
+
<comment>Optional parameter - controlls the order payment methods are
|
| 92 |
+
displayed in the checkout.</comment>
|
| 93 |
+
<label>Sort order</label>
|
| 94 |
+
<frontend_type>text</frontend_type>
|
| 95 |
+
<sort_order>100</sort_order>
|
| 96 |
+
<show_in_default>1</show_in_default>
|
| 97 |
+
<show_in_website>1</show_in_website>
|
| 98 |
+
<show_in_store>1</show_in_store>
|
| 99 |
+
</sort_order>
|
| 100 |
+
</fields>
|
| 101 |
+
</paystation_standard>
|
| 102 |
+
</groups>
|
| 103 |
+
</payment>
|
| 104 |
+
</sections>
|
| 105 |
+
</config>
|
app/etc/modules/Mage_Paystation.xml
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<config>
|
| 2 |
+
<modules>
|
| 3 |
+
|
| 4 |
+
<Mage_Paystation>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>local</codePool>
|
| 7 |
+
<depends>
|
| 8 |
+
<Mage_Paygate />
|
| 9 |
+
</depends>
|
| 10 |
+
<version>0.1.0</version>
|
| 11 |
+
</Mage_Paystation>
|
| 12 |
+
|
| 13 |
+
</modules>
|
| 14 |
+
</config>
|
| 15 |
+
|
package.xml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Paystation_Magento_1_8_ModuleV5</name>
|
| 4 |
+
<version>0.0.10</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license>OSL v3.0</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>Paystation three-party payment module with Postback</summary>
|
| 10 |
+
<description>Paystation three-party payment module with Postback</description>
|
| 11 |
+
<notes>Now with postback</notes>
|
| 12 |
+
<authors><author><name>Paystation</name><user>Paystation</user><email>info@paystation.co.nz</email></author></authors>
|
| 13 |
+
<date>2014-08-18</date>
|
| 14 |
+
<time>05:21:37</time>
|
| 15 |
+
<contents><target name="magelocal"><dir><dir name="Mage"><dir name="Paystation"><dir name="Block"><dir name="Standard"><file name="Form.php" hash="29304def98cb1949740c2a6d8edba9e0"/></dir></dir><dir name="Helper"><file name="Data.php" hash="37cfb5767197bb15b7c02f05b303a999"/></dir><dir name="Model"><file name="Abstract.php" hash="274b033bb3bc1bfe8f540114f810960e"/><file name="Session.php" hash="f677d1b5e6e2104536e4189eb563681a"/><dir name="Source"><file name="Cctype.php" hash="8ad4533997e40260a159a0014f5cf713"/><file name="PaymentAction.php" hash="920c20b2fe48b3cdce1cbcccdf3ec516"/><file name="Processing.php" hash="b66b423e58438e041ae5cddea19e2254"/><file name="StandardAction.php" hash="a324886c922616e3e640bf6cb0f20901"/></dir><file name="Standard.php" hash="2f74e9a16ce24904b6eac957650a2fcd"/></dir><dir name="controllers"><file name="PostbackController.php" hash="76bb5fd51651c3fbd75f0e57e8bd9153"/><file name="StandardController.php" hash="f5e3d87f3d3e9358e4b18176604ecb9a"/></dir><dir name="etc"><file name="config.xml" hash="2d9b8ff62b677f80cc388b433c2de0ea"/><file name="system.xml" hash="1be2030b37f504cca10b64e6682e7eb3"/></dir></dir></dir></dir></target><target name="mageetc"><dir><dir name="modules"><file name="Mage_Paystation.xml" hash="dcfb6c0fa8c356597482c51671e8c726"/></dir></dir></target></contents>
|
| 16 |
+
<compatible/>
|
| 17 |
+
<dependencies><required><php><min>5.2.6</min><max>6.0.0</max></php></required></dependencies>
|
| 18 |
+
</package>
|
