Version Notes
- Minor fix for Magento 1.4
Download this release
Release Info
Developer | Magento Core Team |
Extension | Phoenix_Worldpay |
Version | 1.2.2 |
Comparing to | |
See all releases |
Code changes from version 1.2.0 to 1.2.2
- app/code/community/Phoenix/Worldpay/Block/Processing.php +0 -45
- app/code/community/Phoenix/Worldpay/Block/Redirect.php +1 -7
- app/code/community/Phoenix/Worldpay/Model/Config/Backend/Instid.php +20 -18
- app/code/community/Phoenix/Worldpay/controllers/ProcessingController.php +48 -33
- app/code/community/Phoenix/Worldpay/etc/config.xml +1 -1
- package.xml +5 -9
app/code/community/Phoenix/Worldpay/Block/Processing.php
DELETED
@@ -1,45 +0,0 @@
|
|
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 |
-
* @category Phoenix
|
16 |
-
* @package Phoenix_Worldpay
|
17 |
-
* @copyright Copyright (c) 2008 Phoenix Medien GmbH & Co. KG (http://www.phoenix-medien.de)
|
18 |
-
*/
|
19 |
-
|
20 |
-
class Phoenix_Worldpay_Block_Processing extends Mage_Core_Block_Abstract
|
21 |
-
{
|
22 |
-
protected function _toHtml()
|
23 |
-
{
|
24 |
-
$payment = $this->getOrder()->getPayment()->getMethodInstance();
|
25 |
-
|
26 |
-
$form = new Varien_Data_Form();
|
27 |
-
$form->setAction($payment->getUrl())
|
28 |
-
->setId('worldpay_checkout')
|
29 |
-
->setName('worldpay_checkout')
|
30 |
-
->setMethod('POST')
|
31 |
-
->setUseContainer(true);
|
32 |
-
foreach ($payment->getFormFields() as $field=>$value) {
|
33 |
-
$form->addField($field, 'hidden', array('name'=>$field, 'value'=>$value));
|
34 |
-
}
|
35 |
-
$html = '<html><body>';
|
36 |
-
$html.= $this->__('You will be redirected to Worldpay in a few seconds.');
|
37 |
-
$html.= $form->toHtml();
|
38 |
-
$html.= '<script type="text/javascript">document.getElementById("worldpay_checkout").submit();</script>';
|
39 |
-
$html.= '</body></html>';
|
40 |
-
|
41 |
-
return $html;
|
42 |
-
}
|
43 |
-
|
44 |
-
|
45 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Phoenix/Worldpay/Block/Redirect.php
CHANGED
@@ -19,12 +19,6 @@
|
|
19 |
|
20 |
class Phoenix_Worldpay_Block_Redirect extends Mage_Core_Block_Template
|
21 |
{
|
22 |
-
|
23 |
-
protected function _construct()
|
24 |
-
{
|
25 |
-
parent::_construct();
|
26 |
-
}
|
27 |
-
|
28 |
/**
|
29 |
* Return checkout session instance
|
30 |
*
|
@@ -52,7 +46,7 @@ class Phoenix_Worldpay_Block_Redirect extends Mage_Core_Block_Template
|
|
52 |
}
|
53 |
|
54 |
/**
|
55 |
-
* Get
|
56 |
*
|
57 |
* @return array
|
58 |
*/
|
19 |
|
20 |
class Phoenix_Worldpay_Block_Redirect extends Mage_Core_Block_Template
|
21 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
/**
|
23 |
* Return checkout session instance
|
24 |
*
|
46 |
}
|
47 |
|
48 |
/**
|
49 |
+
* Get form data
|
50 |
*
|
51 |
* @return array
|
52 |
*/
|
app/code/community/Phoenix/Worldpay/Model/Config/Backend/Instid.php
CHANGED
@@ -26,24 +26,26 @@ class Phoenix_Worldpay_Model_Config_Backend_Instid extends Mage_Core_Model_Confi
|
|
26 |
*/
|
27 |
protected function _beforeSave()
|
28 |
{
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
|
|
|
|
48 |
}
|
49 |
}
|
26 |
*/
|
27 |
protected function _beforeSave()
|
28 |
{
|
29 |
+
try {
|
30 |
+
if ($this->getValue()) {
|
31 |
+
$client = new Varien_Http_Client();
|
32 |
+
$client->setUri((string)Mage::getConfig()->getNode('phoenix/worldpay/verify_url'))
|
33 |
+
->setConfig(array('timeout'=>10,))
|
34 |
+
->setHeaders('accept-encoding', '')
|
35 |
+
->setParameterPost('inst_id', $this->getValue())
|
36 |
+
->setMethod(Zend_Http_Client::POST);
|
37 |
+
$response = $client->request();
|
38 |
+
// $responseBody = $response->getBody();
|
39 |
+
// if (empty($responseBody) || $responseBody != 'VERIFIED') {
|
40 |
+
// verification failed. throw error message (not implemented yet).
|
41 |
+
// }
|
42 |
|
43 |
+
// okay, inst_id verified. continue saving.
|
44 |
+
}
|
45 |
+
} catch (Exception $e) {
|
46 |
+
// verification system unavailable. no further action.
|
47 |
+
}
|
48 |
+
|
49 |
+
return parent::_beforeSave();
|
50 |
}
|
51 |
}
|
app/code/community/Phoenix/Worldpay/controllers/ProcessingController.php
CHANGED
@@ -71,7 +71,7 @@ class Phoenix_Worldpay_ProcessingController extends Mage_Core_Controller_Front_A
|
|
71 |
*/
|
72 |
public function responseAction()
|
73 |
{
|
74 |
-
|
75 |
$request = $this->_checkReturnedPost();
|
76 |
if ($request['transStatus'] == 'Y') {
|
77 |
$this->_processSale($request);
|
@@ -80,14 +80,14 @@ class Phoenix_Worldpay_ProcessingController extends Mage_Core_Controller_Front_A
|
|
80 |
} else {
|
81 |
Mage::throwException('Transaction was not successfull.');
|
82 |
}
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
}
|
92 |
|
93 |
/**
|
@@ -98,7 +98,10 @@ class Phoenix_Worldpay_ProcessingController extends Mage_Core_Controller_Front_A
|
|
98 |
try {
|
99 |
$session = $this->_getCheckout();
|
100 |
$quoteId = $session->getWorldpayQuoteId();
|
101 |
-
$
|
|
|
|
|
|
|
102 |
$this->_redirect('checkout/onepage/success');
|
103 |
return;
|
104 |
} catch (Mage_Core_Exception $e) {
|
@@ -126,29 +129,41 @@ class Phoenix_Worldpay_ProcessingController extends Mage_Core_Controller_Front_A
|
|
126 |
*/
|
127 |
protected function _checkReturnedPost()
|
128 |
{
|
129 |
-
|
130 |
if (!$this->getRequest()->isPost())
|
131 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
|
133 |
-
|
134 |
$request = $this->getRequest()->getPost();
|
135 |
if (empty($request))
|
136 |
-
|
137 |
|
138 |
-
|
139 |
if (empty($request['MC_orderid']) || strlen($request['MC_orderid']) > 50)
|
140 |
-
|
141 |
|
142 |
-
|
143 |
$this->_order = Mage::getModel('sales/order')->loadByIncrementId($request['MC_orderid']);
|
144 |
if (!$this->_order->getId())
|
145 |
-
|
146 |
|
147 |
$this->_paymentInst = $this->_order->getPayment()->getMethodInstance();
|
148 |
|
149 |
-
|
150 |
if ($this->_paymentInst->getConfigData('transaction_password') != $request['callbackPW'])
|
151 |
-
|
152 |
|
153 |
|
154 |
return $request;
|
@@ -161,20 +176,20 @@ class Phoenix_Worldpay_ProcessingController extends Mage_Core_Controller_Front_A
|
|
161 |
{
|
162 |
// check transaction amount and currency
|
163 |
if ($this->_paymentInst->getConfigData('use_store_currency')) {
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
if ($price != $request['authAmount'])
|
173 |
-
|
174 |
|
175 |
-
|
176 |
if ($currency != $request['authCurrency'])
|
177 |
-
|
178 |
|
179 |
// save transaction ID and AVS info
|
180 |
$this->_order->getPayment()->setLastTransId($request['transId']);
|
@@ -187,10 +202,10 @@ class Phoenix_Worldpay_ProcessingController extends Mage_Core_Controller_Front_A
|
|
187 |
$invoice->register()->capture();
|
188 |
$this->_order->addRelatedObject($invoice);
|
189 |
}
|
190 |
-
$this->_order->
|
191 |
break;
|
192 |
case 'E':
|
193 |
-
$this->_order->setState(Mage_Sales_Model_Order::STATE_PROCESSING,
|
194 |
break;
|
195 |
}
|
196 |
|
71 |
*/
|
72 |
public function responseAction()
|
73 |
{
|
74 |
+
try {
|
75 |
$request = $this->_checkReturnedPost();
|
76 |
if ($request['transStatus'] == 'Y') {
|
77 |
$this->_processSale($request);
|
80 |
} else {
|
81 |
Mage::throwException('Transaction was not successfull.');
|
82 |
}
|
83 |
+
} catch (Mage_Core_Exception $e) {
|
84 |
+
$this->getResponse()->setBody(
|
85 |
+
$this->getLayout()
|
86 |
+
->createBlock($this->_failureBlockType)
|
87 |
+
->setOrder($this->_order)
|
88 |
+
->toHtml()
|
89 |
+
);
|
90 |
+
}
|
91 |
}
|
92 |
|
93 |
/**
|
98 |
try {
|
99 |
$session = $this->_getCheckout();
|
100 |
$quoteId = $session->getWorldpayQuoteId();
|
101 |
+
$session->unsWorldpayRealOrderId();
|
102 |
+
$session->setQuoteId($quoteId);
|
103 |
+
$session->setLastSuccessQuoteId($quoteId);
|
104 |
+
$session->getQuote()->setIsActive(false)->save();
|
105 |
$this->_redirect('checkout/onepage/success');
|
106 |
return;
|
107 |
} catch (Mage_Core_Exception $e) {
|
129 |
*/
|
130 |
protected function _checkReturnedPost()
|
131 |
{
|
132 |
+
// check request type
|
133 |
if (!$this->getRequest()->isPost())
|
134 |
+
Mage::throwException('Wrong request type.');
|
135 |
+
|
136 |
+
// validate request ip coming from WorldPay/RBS subnet
|
137 |
+
$helper = Mage::helper('core/http');
|
138 |
+
if (method_exists($helper, 'getRemoteAddr')) {
|
139 |
+
$remoteAddr = $helper->getRemoteAddr();
|
140 |
+
} else {
|
141 |
+
$request = $this->getRequest()->getServer();
|
142 |
+
$remoteAddr = $request['REMOTE_ADDR'];
|
143 |
+
}
|
144 |
+
if (substr($remoteAddr,0,11) != '155.136.16.') {
|
145 |
+
Mage::throwException('IP can\'t be validated as WorldPay-IP.');
|
146 |
+
}
|
147 |
|
148 |
+
// get request variables
|
149 |
$request = $this->getRequest()->getPost();
|
150 |
if (empty($request))
|
151 |
+
Mage::throwException('Request doesn\'t contain POST elements.');
|
152 |
|
153 |
+
// check order id
|
154 |
if (empty($request['MC_orderid']) || strlen($request['MC_orderid']) > 50)
|
155 |
+
Mage::throwException('Missing or invalid order ID');
|
156 |
|
157 |
+
// load order for further validation
|
158 |
$this->_order = Mage::getModel('sales/order')->loadByIncrementId($request['MC_orderid']);
|
159 |
if (!$this->_order->getId())
|
160 |
+
Mage::throwException('Order not found');
|
161 |
|
162 |
$this->_paymentInst = $this->_order->getPayment()->getMethodInstance();
|
163 |
|
164 |
+
// check transaction password
|
165 |
if ($this->_paymentInst->getConfigData('transaction_password') != $request['callbackPW'])
|
166 |
+
Mage::throwException('Transaction password wrong');
|
167 |
|
168 |
|
169 |
return $request;
|
176 |
{
|
177 |
// check transaction amount and currency
|
178 |
if ($this->_paymentInst->getConfigData('use_store_currency')) {
|
179 |
+
$price = number_format($this->_order->getGrandTotal(),2,'.','');
|
180 |
+
$currency = $this->_order->getOrderCurrencyCode();
|
181 |
+
} else {
|
182 |
+
$price = number_format($this->_order->getBaseGrandTotal(),2,'.','');
|
183 |
+
$currency = $this->_order->getBaseCurrencyCode();
|
184 |
+
}
|
185 |
+
|
186 |
+
// check transaction amount
|
187 |
if ($price != $request['authAmount'])
|
188 |
+
Mage::throwException('Transaction currency doesn\'t match.');
|
189 |
|
190 |
+
// check transaction currency
|
191 |
if ($currency != $request['authCurrency'])
|
192 |
+
Mage::throwException('Transaction currency doesn\'t match.');
|
193 |
|
194 |
// save transaction ID and AVS info
|
195 |
$this->_order->getPayment()->setLastTransId($request['transId']);
|
202 |
$invoice->register()->capture();
|
203 |
$this->_order->addRelatedObject($invoice);
|
204 |
}
|
205 |
+
$this->_order->addStatusToHistory($this->_paymentInst->getConfigData('order_status'), Mage::helper('worldpay')->__('authorize: Customer returned successfully'));
|
206 |
break;
|
207 |
case 'E':
|
208 |
+
$this->_order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, $this->_paymentInst->getConfigData('order_status'), Mage::helper('worldpay')->__('preauthorize: Customer returned successfully'));
|
209 |
break;
|
210 |
}
|
211 |
|
app/code/community/Phoenix/Worldpay/etc/config.xml
CHANGED
@@ -21,7 +21,7 @@
|
|
21 |
<config>
|
22 |
<modules>
|
23 |
<Phoenix_Worldpay>
|
24 |
-
<version>1.2.
|
25 |
</Phoenix_Worldpay>
|
26 |
</modules>
|
27 |
<global>
|
21 |
<config>
|
22 |
<modules>
|
23 |
<Phoenix_Worldpay>
|
24 |
+
<version>1.2.2</version>
|
25 |
</Phoenix_Worldpay>
|
26 |
</modules>
|
27 |
<global>
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Phoenix_Worldpay</name>
|
4 |
-
<version>1.2.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
|
7 |
<channel>community</channel>
|
@@ -19,15 +19,11 @@ Notice: This extension is still beta. We recommend to test all transactions in y
|
|
19 |
The extension is developed and maintained by the German Magento Silver Partner Phoenix Medien (http://www.phoenix-medien.de).
|
20 |
|
21 |
The development was sponsored by liaison dangereuse (http://www.liaison-dangereuse.de).</description>
|
22 |
-
<notes>-
|
23 |
-
- Rework of the complete controller
|
24 |
-
- Cancel now reloads shopping cart correctly
|
25 |
-
- Fixes session issue during callback
|
26 |
-
- AVS Status is now visible in the backend</notes>
|
27 |
<authors><author><name>Phoenix Medien</name><user>auto-converted</user><email>info@phoenix-medien.de</email></author></authors>
|
28 |
-
<date>2010-
|
29 |
-
<time>
|
30 |
-
<contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="worldpay"><dir name="pdf"><file name="info.phtml" hash="3a92c60f5c05a3e51df366cee651edd6"/></dir><file name="info.phtml" hash="d70ad71aa960ce0c6d4ec8609dadf7e3"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="worldpay.xml" hash="ac4191773623ae2ad6170f363866ed43"/></dir><dir name="template"><dir name="worldpay"><file name="blank.phtml" hash="8b7d8aa0521878b2dd796acfd4d655b6"/><file name="cancel.phtml" hash="350348b8fecb9b7c2b1045d1a8edd9c7"/><file name="failure.phtml" hash="77b202de38902c9e6458218bdce07de8"/><file name="form.phtml" hash="8c7184cbaffc115349de415d12273528"/><file name="info.phtml" hash="d33c7ffde885e4953a975201562cba8e"/><file name="redirect.phtml" hash="84d38770a43262c890094c132dc2bd5c"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="de_DE"><file name="Phoenix_Worldpay.csv" hash="8a41fe546b9f6fb3d18c0ccf727ea082"/></dir><dir name="en_US"><file name="Phoenix_Worldpay.csv" hash="d5ff38bb74afd4e7715cfa54134fd57d"/></dir></target><target name="mageetc"><dir name="modules"><file name="Phoenix_Worldpay.xml" hash="52b9dc5cd0d94ab43d8691438f090617"/></dir></target><target name="magecommunity"><dir name="Phoenix"><dir name="Worldpay"><dir name="Block"><file name="Cancel.php" hash="b0f213ee8e45d0b8b48a6fad48f05017"/><file name="Failure.php" hash="5add6ed9890109ba624b7a16bc0504f5"/><file name="Form.php" hash="d279b2d502e875e155101007eef7ebc5"/><file name="Info.php" hash="24bc51b1b86cd3a020982b09e8695c22"/><file name="
|
31 |
<compatible/>
|
32 |
<dependencies/>
|
33 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Phoenix_Worldpay</name>
|
4 |
+
<version>1.2.2</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
|
7 |
<channel>community</channel>
|
19 |
The extension is developed and maintained by the German Magento Silver Partner Phoenix Medien (http://www.phoenix-medien.de).
|
20 |
|
21 |
The development was sponsored by liaison dangereuse (http://www.liaison-dangereuse.de).</description>
|
22 |
+
<notes>- Minor fix for Magento 1.4</notes>
|
|
|
|
|
|
|
|
|
23 |
<authors><author><name>Phoenix Medien</name><user>auto-converted</user><email>info@phoenix-medien.de</email></author></authors>
|
24 |
+
<date>2010-04-06</date>
|
25 |
+
<time>13:22:02</time>
|
26 |
+
<contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="worldpay"><dir name="pdf"><file name="info.phtml" hash="3a92c60f5c05a3e51df366cee651edd6"/></dir><file name="info.phtml" hash="d70ad71aa960ce0c6d4ec8609dadf7e3"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="worldpay.xml" hash="ac4191773623ae2ad6170f363866ed43"/></dir><dir name="template"><dir name="worldpay"><file name="blank.phtml" hash="8b7d8aa0521878b2dd796acfd4d655b6"/><file name="cancel.phtml" hash="350348b8fecb9b7c2b1045d1a8edd9c7"/><file name="failure.phtml" hash="77b202de38902c9e6458218bdce07de8"/><file name="form.phtml" hash="8c7184cbaffc115349de415d12273528"/><file name="info.phtml" hash="d33c7ffde885e4953a975201562cba8e"/><file name="redirect.phtml" hash="84d38770a43262c890094c132dc2bd5c"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="de_DE"><file name="Phoenix_Worldpay.csv" hash="8a41fe546b9f6fb3d18c0ccf727ea082"/></dir><dir name="en_US"><file name="Phoenix_Worldpay.csv" hash="d5ff38bb74afd4e7715cfa54134fd57d"/></dir></target><target name="mageetc"><dir name="modules"><file name="Phoenix_Worldpay.xml" hash="52b9dc5cd0d94ab43d8691438f090617"/></dir></target><target name="magecommunity"><dir name="Phoenix"><dir name="Worldpay"><dir name="Block"><file name="Cancel.php" hash="b0f213ee8e45d0b8b48a6fad48f05017"/><file name="Failure.php" hash="5add6ed9890109ba624b7a16bc0504f5"/><file name="Form.php" hash="d279b2d502e875e155101007eef7ebc5"/><file name="Info.php" hash="24bc51b1b86cd3a020982b09e8695c22"/><file name="Redirect.php" hash="ee8eb2b8cdabaf9ae0dea66fd7362777"/><file name="Success.php" hash="0c072e272d53a0b24e5157201cd65877"/></dir><dir name="controllers"><file name="ProcessingController.php" hash="a3e931feef3d7a76cf2c6fa8d330708d"/></dir><dir name="etc"><file name="config.xml" hash="d75be225c9a212c0c92751d84ff185c6"/><file name="system.xml" hash="5361e90063e729e4c01ae95a074d0fc4"/></dir><dir name="Helper"><file name="Data.php" hash="354473f472247a9dae11a1fac0cef407"/></dir><dir name="Model"><dir name="Config"><dir name="Backend"><file name="Instid.php" hash="07147ceac69c3c19593b4a24873f15cc"/></dir></dir><dir name="Source"><file name="RequestType.php" hash="795d51b4c3f04bb00cf6cca5a3180cd7"/><file name="TransactionMode.php" hash="da4cadb5df1213edc34f22b67235d374"/></dir><file name="Cc.php" hash="cf6b3bff52b5aedd85ff94cc59a0fc8e"/><file name="Config.php" hash="9098369b245a824396354e1b64cd47ab"/></dir></dir></dir></target></contents>
|
27 |
<compatible/>
|
28 |
<dependencies/>
|
29 |
</package>
|