9bbd841bf705997db5b5633f8e1b794d - Version 1.0.0.0

Version Notes

Good!

Download this release

Release Info

Developer PB
Extension 9bbd841bf705997db5b5633f8e1b794d
Version 1.0.0.0
Comparing to
See all releases


Version 1.0.0.0

Payparts_Payment-1.0.0.0/app/code/local/Payparts/Payment/Block/Message.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Payparts notification "form"
4
+ */
5
+ class Payparts_Payment_Block_Message extends Mage_Payment_Block_Form
6
+ {
7
+ /**
8
+ * Set template with message
9
+ */
10
+ protected function _construct()
11
+ {
12
+ parent::_construct();
13
+ $this->setTemplate('payparts/message.phtml');
14
+ }
15
+ }
Payparts_Payment-1.0.0.0/app/code/local/Payparts/Payment/Block/Redirect.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Payparts_Payment_Block_Redirect extends Mage_Core_Block_Template {
4
+
5
+ /**
6
+ * Set template with message
7
+ */
8
+ protected function _construct() {
9
+ $this->setTemplate('payparts/redirect.phtml');
10
+ parent::_construct();
11
+ }
12
+
13
+ /**
14
+ * Return redirect form
15
+ *
16
+ * @return Varien_Data_Form
17
+ */
18
+ public function getForm() {
19
+
20
+
21
+ $paymentMethod = Mage::getModel('payparts/redirect');
22
+
23
+ $html = '<form method="POST" action="' . $paymentMethod->getPaypartsPlaceUrl() . '" id="payparts_redirect" name="payparts_redirect">';
24
+ foreach ($paymentMethod->getRedirectFormFields() as $key => $value) {
25
+ $html .= '<input type="hidden" name="' . $key . '" value="' . $value . '">';
26
+ }
27
+ $html .= '<input type="submit" value="' . $this->__("Click here, if not redirected for 30 seconds.") . '">';
28
+ $html .= '</form>';
29
+
30
+ return $html;
31
+ }
32
+
33
+ }
Payparts_Payment-1.0.0.0/app/code/local/Payparts/Payment/Helper/Data.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Payparts_Payment_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+
6
+ public function refillCart($order)
7
+ {
8
+ $cartRefilled = true;
9
+
10
+ $cart = Mage::getSingleton('checkout/cart');
11
+ $items = $order->getItemsCollection();
12
+ foreach ($items as $item) {
13
+ try {
14
+ $cart->addOrderItem($item);
15
+ } catch (Mage_Core_Exception $e) {
16
+ $cartRefilled = false;
17
+ if (Mage::getSingleton('checkout/session')->getUseNotice(true)) {
18
+ Mage::getSingleton('checkout/session')->addNotice($e->getMessage());
19
+ } else {
20
+ Mage::getSingleton('checkout/session')->addError($e->getMessage());
21
+ }
22
+ $this->_redirect('customer/account/history');
23
+ } catch (Exception $e) {
24
+ $cartRefilled = false;
25
+ Mage::getSingleton('checkout/session')->addException(
26
+ $e,
27
+ Mage::helper('checkout')->__('Cannot add the item to shopping cart.')
28
+ );
29
+ }
30
+ }
31
+ $cart->save();
32
+
33
+ return $cartRefilled;
34
+ }
35
+ }
Payparts_Payment-1.0.0.0/app/code/local/Payparts/Payment/Model/Redirect.php ADDED
@@ -0,0 +1,308 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Payparts_Payment_Model_Redirect extends Mage_Payment_Model_Method_Abstract {
4
+ /**
5
+ * unique internal payment method identifier
6
+ */
7
+ protected $_code = 'payparts_redirect';
8
+ protected $_formBlockType = 'payparts/message';
9
+
10
+ /**
11
+ * Payment Method features
12
+ *
13
+ * @var bool
14
+ */
15
+ protected $_canUseForMultishipping = false;
16
+ protected $_canUseInternal = false;
17
+ protected $_isInitializeNeeded = true;
18
+
19
+ /**
20
+ * Instantiate state and set it to state object
21
+ *
22
+ * @param string $paymentAction
23
+ * @param Varien_Object $stateObject
24
+ */
25
+ public function initialize($paymentAction, $stateObject) {
26
+ $stateObject->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT);
27
+ $stateObject->setStatus('pending_payment');
28
+ $stateObject->setIsNotified(false);
29
+ $stateObject->save();
30
+ }
31
+
32
+ /**
33
+ * Return Order place redirect url
34
+ *
35
+ * @return string
36
+ */
37
+ public function getOrderPlaceRedirectUrl() {
38
+ return Mage::getUrl('payparts/payment/redirect', array('_secure' => false));
39
+ }
40
+
41
+ /**
42
+ * Return Payparts place URL
43
+ *
44
+ * @return string
45
+ */
46
+ public function getPaypartsPlaceUrl() {
47
+ $resultToken = $this->getPayPartsToken();
48
+ if(!$resultToken['status']){
49
+ Mage::throwException(Mage::helper('payparts')->__('PayParts :', $resultToken['message']));
50
+ }
51
+ // die;
52
+ return '//payparts2.privatbank.ua/ipp/v2/payment?token=' . (string)$resultToken['token'];
53
+ }
54
+
55
+ public function deliveryCalculate($amount, $tax_amount, $total_qty){
56
+ return (float)($amount - round($tax_amount, 2)) / (int)$total_qty;
57
+ }
58
+
59
+ public function getSignature($result){
60
+ return base64_encode(
61
+ hex2bin(
62
+ SHA1( $result['store_passwd']
63
+ .$result['store_id']
64
+ .$result['order_id_unique']
65
+ .str_replace('.', '', $result['amount'])
66
+ .$result['currency']
67
+ .$result['partsCount']
68
+ .$result['merchantType']
69
+ .$result['responseUrl']
70
+ .$result['redirectUrl']
71
+ .$result['products_string']
72
+ .$result['store_passwd']
73
+ )
74
+ )
75
+ );
76
+ }
77
+
78
+ private function getTax($order){
79
+ return $order->getTaxAmount()+$order->getShippingAmount();
80
+ }
81
+
82
+ private function preparedData(){
83
+ $result = array();
84
+ $session = Mage::getSingleton('checkout/session');
85
+ $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
86
+
87
+ foreach ($order->getAllVisibleItems() as $itemId => $item)
88
+ {
89
+ $result['orders_sales'][] = array(
90
+ 'name' => $item->getName(),
91
+ 'price' => (string)number_format($item->getPrice(), 2, '.', ''),
92
+ 'count' => (int)$item->getQtyOrdered()
93
+
94
+ );
95
+ }
96
+
97
+ $result['order_id_unique'] = $order->getRealOrderId().'_'.uniqid();
98
+ $result['store_passwd'] = $this->getConfigData('shoppassword');
99
+ $result['store_id'] = $this->getConfigData('shopident');
100
+ $result['amount'] = (string)number_format($order->getGrandTotal(), 2, '.', '');
101
+ $result['merchantType'] = (string)$session->system;
102
+ $result['partsCount'] = (string)$session->parts;
103
+ $result['currency'] = $order->getOrderCurrencyCode();
104
+ $result['responseUrl'] = Mage::getUrl('payparts/payment/return/', array('transaction_id' => $order->getRealOrderId()));
105
+ $result['redirectUrl'] = Mage::getUrl('payparts/payment/fail/');
106
+ $result['products_string'] = "";
107
+
108
+ if($order->getTaxAmount()){
109
+ $result['orders_sales'][] = array(
110
+ 'name' => 'Tax',
111
+ 'price' => (string)number_format($this->getTax($order), 2, '.', ''),
112
+ 'count' => 1
113
+ );
114
+ }
115
+
116
+ for ($i=0; $i<count($result['orders_sales']);$i++)
117
+ {
118
+ $result['products_string'] .= $result['orders_sales'][$i]['name']
119
+ .(string)$result['orders_sales'][$i]['count']
120
+ .str_replace('.', '', $result['orders_sales'][$i]['price']);
121
+ }
122
+
123
+ $requestData = json_encode(
124
+ array(
125
+ "storeId" => $result['store_id'],
126
+ "orderId" => $result['order_id_unique'],
127
+ "amount" => $result['amount'],
128
+ "currency" => $result['currency'],
129
+ "partsCount" => $result['partsCount'],
130
+ "merchantType" => $result['merchantType'],
131
+ "products" => $result['orders_sales'],
132
+ "responseUrl" => $result['responseUrl'],
133
+ "redirectUrl" => $result['redirectUrl'],
134
+ "signature" => $this->getSignature($result)
135
+ )
136
+ );
137
+
138
+ var_dump($requestData);
139
+ return $requestData;
140
+ }
141
+
142
+ private function getPayPartsToken(){
143
+ $result = array('status' => false);
144
+ $ch = curl_init();
145
+ curl_setopt($ch, CURLOPT_URL, 'https://payparts2.privatbank.ua/ipp/v2/payment/create');
146
+ curl_setopt($ch, CURLOPT_POST, 1);
147
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $this->preparedData());
148
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
149
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
150
+ curl_setopt($ch, CURLOPT_TIMEOUT, 20);
151
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array(
152
+ 'Accept: application/json',
153
+ 'Accept-Encoding: UTF-8',
154
+ 'Content-Type: application/json; charset=UTF-8'
155
+ ));
156
+
157
+ $response = json_decode(curl_exec($ch));
158
+ curl_close($ch);
159
+
160
+ if ($response->token){
161
+ $result['status'] = true;
162
+ $result['token'] = $response->token;
163
+ } else{
164
+ $result['message'] = ($response->errorMessage) ? $response->errorMessage : $response->message;
165
+ }
166
+ return $result;
167
+ }
168
+
169
+ /**
170
+ * Return redirect form fields
171
+ * @return array
172
+ */
173
+ public function getRedirectFormFields() {
174
+ $result = array();
175
+ $session = Mage::getSingleton('checkout/session');
176
+ $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
177
+
178
+
179
+ if (!$order->getId()) {
180
+ return $result;
181
+ }
182
+
183
+ $order_id = $order->getRealOrderId();
184
+
185
+ $result['myPayPartsMerchantID'] = $this->getConfigData('login');
186
+ $result['myPayPartsMerchantExpTime'] = $this->getConfigData('validitytime');
187
+ $result['myPayPartsMerchantShopName'] = $this->getConfigData('shopname');
188
+ $result['myPayPartsMerchantSum'] = round($order->getGrandTotal(), 2);
189
+ $result['myPayPartsTotalQtyOrdered'] = (int)$order->getTotalQtyOrdered();
190
+ $result['myPayPartsTaxAmount'] = round($order->getTaxAmount(), 2);
191
+ $result['myPayPartsUnitSum'] = round((int)($result['myPayPartsMerchantSum'] - round($order->getTaxAmount(), 2)) / (int)$order->getTotalQtyOrdered(), 2);
192
+
193
+ $result['myPayPartsMerchantCurrency'] = $order->getOrderCurrencyCode(); //must be UAH
194
+
195
+ if ($result['myPayPartsMerchantCurrency'] != 'UAH') {
196
+ Mage::throwException(Mage::helper('payparts')->__('PayParts ( payparts2.privatbank.ua ) works only with UAH but not with (%s)', $result['myPayPartsMerchantCurrency']));
197
+ }
198
+
199
+
200
+ $result['myPayPartsMerchantOrderId'] = $order_id;
201
+ $result['myPayPartsMerchantOrderDesc'] = Mage::app()->getStore()->getGroup()->getName() . ' №' . $order_id;
202
+ $result['myPayPartsMerchantResultUrl'] = Mage::getUrl('payparts/payment/notify');
203
+ $result['myPayPartsMerchantSuccessUrl'] = Mage::getUrl('payparts/payment/return', array('transaction_id' => $order_id));
204
+ $result['myPayPartsMerchantFailUrl'] = Mage::getUrl('payparts/payment/fail', array('transaction_id' => $order_id));
205
+
206
+
207
+ ksort($result);
208
+ $req_str = '';
209
+ foreach ($result AS $pkey => $pval)
210
+ $req_str.=($pkey . '=' . $pval);
211
+
212
+
213
+ // Add a secret key to the request string if needed.
214
+ if ($this->getConfigData('checkhash')) {
215
+ $req_str .= Mage::helper('core')->decrypt($this->getConfigData('secretkey'));
216
+ }
217
+
218
+ $result['myPayPartsMerchantHash'] = md5($req_str);
219
+
220
+ var_dump($result);
221
+ // die;
222
+ return $result;
223
+ }
224
+
225
+ /**
226
+ * Check incoming request CRC
227
+ *
228
+ * @param array $request
229
+ * @return bool
230
+ */
231
+ public function validateRequest($request) {
232
+
233
+ $order_id = $request['OrderId'];
234
+ $order = Mage::getModel('sales/order')->loadByIncrementId((int) $order_id);
235
+
236
+ if ($order) {
237
+
238
+ // сбор хеша по пост данным для проверки $_REQUEST["MerchantHash"]
239
+ $dataM = array(
240
+ 'MerchantId' => $request["MerchantId"], // номер мерчанта в системе Манекси
241
+ 'PaymentId' => $request["PaymentId"], // номер платежа в системе Манекси
242
+ 'OrderId' => $request["OrderId"], // номер заказа, который был передан Торговцем
243
+ 'Amount' => $request["Amount"], // сумма заказа
244
+ 'Currency' => $request["Currency"], // валюта заказа
245
+ 'Success' => $request["Success"], // успешность проведения платежа
246
+ 'Type' => $request["Type"], // идентификатор способа платежа
247
+ 'TypeName' => $request["TypeName"]//описание выбранного способа оплаты
248
+ );
249
+
250
+ if(!empty($request['TransId']))
251
+ {
252
+ $dataM['TransId'] = $request['TransId'];
253
+ }
254
+
255
+ ksort($dataM); //сортировка данных массива по ключу
256
+ $req_str3 = ''; // первоначальное значение строки данных для подписи
257
+ foreach ($dataM AS $pkey => $pval)
258
+ $req_str3.=($pkey . '=' . $pval);
259
+ if ($this->getConfigData('checkhash')) {
260
+ $req_str3 .= Mage::helper('core')->decrypt($this->getConfigData('secretkey'));
261
+ }
262
+
263
+ $ServerHashM = md5($req_str3);
264
+
265
+ // сборка хеша по пост данным для проверки полей от подмены
266
+ $datas = array();
267
+ $datas["MerchantId"] = $request["MerchantId"]; // номер мерчанта в системе Манекси
268
+ $datas["OrderId"] = $request["OrderId"]; // номер заказа, который был передан Торговцем
269
+ $datas["Amount"] = $request["Amount"] * 100; // сумма заказа
270
+ $datas["Currency"] = $request["Currency"]; // валюта заказа
271
+ $datas["Success"] = $request["Success"]; // успешность проведения платежа
272
+ ksort($datas); //сортировка данных массива по ключу
273
+ $req_str1 = ''; // первоначальное значение строки данных для подписи
274
+ foreach ($datas AS $pkey => $pval)
275
+ $req_str1.=($pkey . '=' . $pval);
276
+ if ($this->getConfigData('checkhash')) {
277
+ $req_str1 .= Mage::helper('core')->decrypt($this->getConfigData('secretkey'));
278
+ }
279
+
280
+
281
+ $ServerHash2 = md5($req_str1);
282
+
283
+ //соборка провеочного хеша для проверки полей от подмены и упешного статуса (Success = 1)
284
+ $datasC = array();
285
+ $datasC["MerchantId"] = $this->getConfigData('login'); // номер мерчанта в системе Манекси
286
+ $datasC["OrderId"] = $order_id; // номер заказа, который был передан Торговцем
287
+ $datasC["Amount"] = $order->getGrandTotal() * 100; // сумма заказа
288
+ $datasC["Currency"] = $order->getOrderCurrencyCode(); // валюта заказа
289
+ $datasC["Success"] = "1"; // успешность проведения платежа
290
+ ksort($datasC); //сортировка данных массива по ключу
291
+ $req_str2 = ''; // первоначальное значение строки данных для подписи
292
+ foreach ($datasC AS $pkey => $pval)
293
+ $req_str2.=($pkey . '=' . $pval);
294
+ if ($this->getConfigData('checkhash')) {
295
+ $req_str2 .= Mage::helper('core')->decrypt($this->getConfigData('secretkey'));
296
+ }
297
+
298
+ $CheckHash = md5($req_str2);
299
+ if (strpos($CheckHash, $ServerHash2) !== false) {
300
+ if (strpos($request["MerchantHash"], $ServerHashM) !== false) {
301
+ return true;
302
+ }
303
+ }
304
+ }
305
+ return false;
306
+ }
307
+
308
+ }
Payparts_Payment-1.0.0.0/app/code/local/Payparts/Payment/controllers/PaymentController.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Payparts_Payment_PaymentController extends Mage_Core_Controller_Front_Action
4
+ {
5
+
6
+ /**
7
+ * Redirect to PayParts
8
+ */
9
+ public function redirectAction()
10
+ {
11
+
12
+ $session = Mage::getSingleton('checkout/session');
13
+ $session->setPaypartsQuoteId($session->getQuoteId());
14
+
15
+ $this->getResponse()->setBody($this->getLayout()->createBlock('payparts/redirect')->toHtml());
16
+ $session->pay_parts_paym_state = false;
17
+ $session->unsQuoteId();
18
+ $session->unsRedirectUrl();
19
+ }
20
+
21
+ /**
22
+ * When a customer cancel payment from PayParts.
23
+ */
24
+ public function failAction()
25
+ {
26
+ $session = Mage::getSingleton('checkout/session');
27
+ $session->setQuoteId($session->getPaypartsQuoteId());
28
+ if ($session->getLastRealOrderId()) {
29
+ $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
30
+ if ($order->getId()) {
31
+ $order->cancel()->save();
32
+ }
33
+
34
+ }
35
+
36
+ $quote = Mage::getModel('sales/quote')->load($session->getPaypartsQuoteId());
37
+ if ($quote->getId()) {
38
+ $quote->setActive(true);
39
+ $quote->save();
40
+ }
41
+ $session->addError(Mage::helper('payparts')->__('Payment failed. Pleas try again later.'));
42
+ if($session->pay_parts_paym_state){
43
+ $session->addError(Mage::helper('payparts')->__('Payment is held successfully.'));
44
+ }
45
+
46
+ $this->_redirect('checkout/cart');
47
+ }
48
+
49
+ /**
50
+ * Customer return processing
51
+ */
52
+ public function returnAction()
53
+ {
54
+ try {
55
+ $session = Mage::getSingleton('checkout/session');
56
+ $postData = Mage::helper('core')->jsonDecode(Mage::app()->getRequest()->getRawBody());
57
+ $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
58
+ if($postData['paymentState'] == 'SUCCESS'){
59
+ $session->pay_parts_paym_state = true;
60
+ Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
61
+ $order->setStatus('payparts_paid');
62
+ $order->setState('payparts_paid');
63
+ $order->save();
64
+ }
65
+ else if($postData['paymentState'] == 'CANCELED'){
66
+ $order->cancel()->save();
67
+ }
68
+ $this->_redirect('checkout/onepage/success');
69
+ return;
70
+ } catch (Mage_Core_Exception $e) {
71
+ $this->_getCheckout()->addError($e->getMessage());
72
+ } catch(Exception $e) {
73
+ Mage::logException($e);
74
+ }
75
+ $this->_redirect('checkout/cart');
76
+ }
77
+
78
+ /**
79
+ * Background notifications
80
+ */
81
+ public function notifyAction()
82
+ {
83
+ $session = Mage::getSingleton('checkout/session');
84
+ $request = Mage::app()->getRequest()->getPost();
85
+ $session->pattern = Mage::app()->getRequest()->getRawBody();
86
+ parse_str(Mage::app()->getRequest()->getRawBody(), $parts_params);
87
+
88
+ if($parts_params['parts']){
89
+ $session->parts = $parts_params['parts'];
90
+ $session->system = $parts_params['system'];
91
+ }
92
+ $paymentMethod = Mage::getModel('payparts/redirect');
93
+ if (!$paymentMethod->validateRequest($request)) {
94
+ return;
95
+ }
96
+
97
+ $order = Mage::getModel('sales/order')->loadByIncrementId($request['OrderId']);
98
+ $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING);
99
+ $order->setStatus('processing');
100
+ $order->setIsNotified(false);
101
+ $order->save();
102
+ echo 'OK ' . $request['OrderId'];
103
+ }
104
+ }
Payparts_Payment-1.0.0.0/app/code/local/Payparts/Payment/etc/config.xml ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Payparts_Payment>
5
+ <version>1.0.0.0</version>
6
+ </Payparts_Payment>
7
+ </modules>
8
+ <global>
9
+ <models>
10
+ <payparts>
11
+ <class>Payparts_Payment_Model</class>
12
+ <resourceModel>payparts_resource</resourceModel>
13
+ </payparts>
14
+ </models>
15
+ <blocks>
16
+ <payparts>
17
+ <class>Payparts_Payment_Block</class>
18
+ </payparts>
19
+ </blocks>
20
+ <helpers>
21
+ <payparts>
22
+ <class>Payparts_Payment_Helper</class>
23
+ </payparts>
24
+ </helpers>
25
+ </global>
26
+ <frontend>
27
+ <routers>
28
+ <payparts>
29
+ <use>standard</use>
30
+ <args>
31
+ <module>Payparts_Payment</module>
32
+ <frontName>payparts</frontName>
33
+ </args>
34
+ </payparts>
35
+ </routers>
36
+ <translate>
37
+ <modules>
38
+ <Payparts_Payment>
39
+ <files>
40
+ <default>Payparts_Payment.csv</default>
41
+ </files>
42
+ </Payparts_Payment>
43
+ </modules>
44
+ </translate>
45
+ </frontend>
46
+ <adminhtml>
47
+ <translate>
48
+ <modules>
49
+ <Payparts_Payment>
50
+ <files>
51
+ <default>Payparts_Payment.csv</default>
52
+ </files>
53
+ </Payparts_Payment>
54
+ </modules>
55
+ </translate>
56
+ </adminhtml>
57
+ <default>
58
+ <payment>
59
+ <payparts_redirect>
60
+ <model>payparts/redirect</model>
61
+ <active>1</active>
62
+ <title>PayParts</title>
63
+ <validitytime>140</validitytime>
64
+ <sort_order>0</sort_order>
65
+ </payparts_redirect>
66
+ </payment>
67
+ </default>
68
+ </config>
Payparts_Payment-1.0.0.0/app/code/local/Payparts/Payment/etc/system.xml ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <sections>
4
+ <payment>
5
+ <groups>
6
+ <payparts_redirect translate="label">
7
+ <label>PayParts (payparts2.privatbank.ua)</label>
8
+ <frontend_type>text</frontend_type>
9
+ <sort_order>1</sort_order>
10
+ <show_in_default>1</show_in_default>
11
+ <show_in_website>1</show_in_website>
12
+ <show_in_store>1</show_in_store>
13
+ <fields>
14
+ <active translate="label">
15
+ <label>Enabled</label>
16
+ <frontend_type>select</frontend_type>
17
+ <source_model>adminhtml/system_config_source_yesno</source_model>
18
+ <sort_order>10</sort_order>
19
+ <show_in_default>1</show_in_default>
20
+ <show_in_website>1</show_in_website>
21
+ <show_in_store>0</show_in_store>
22
+ </active>
23
+ <title translate="label">
24
+ <label>Payment title</label>
25
+ <frontend_type>text</frontend_type>
26
+ <sort_order>20</sort_order>
27
+ <show_in_default>1</show_in_default>
28
+ <show_in_website>1</show_in_website>
29
+ <show_in_store>1</show_in_store>
30
+ </title>
31
+ <ppperiod translate="label">
32
+ <label>PP parts</label>
33
+ <frontend_type>text</frontend_type>
34
+ <sort_order>30</sort_order>
35
+ <show_in_default>1</show_in_default>
36
+ <show_in_website>1</show_in_website>
37
+ <show_in_store>1</show_in_store>
38
+ </ppperiod>
39
+ <iiperiod translate="label">
40
+ <label>II parts</label>
41
+ <frontend_type>text</frontend_type>
42
+ <sort_order>40</sort_order>
43
+ <show_in_default>1</show_in_default>
44
+ <show_in_website>1</show_in_website>
45
+ <show_in_store>1</show_in_store>
46
+ </iiperiod>
47
+ <pbperiod translate="label">
48
+ <label>PB parts</label>
49
+ <frontend_type>text</frontend_type>
50
+ <sort_order>50</sort_order>
51
+ <show_in_default>1</show_in_default>
52
+ <show_in_website>1</show_in_website>
53
+ <show_in_store>1</show_in_store>
54
+ </pbperiod>
55
+ <shopident translate="label">
56
+ <label>Ident shop</label>
57
+ <frontend_type>text</frontend_type>
58
+ <sort_order>60</sort_order>
59
+ <show_in_default>1</show_in_default>
60
+ <show_in_website>1</show_in_website>
61
+ <show_in_store>1</show_in_store>
62
+ </shopident>
63
+ <shoppassword translate="label">
64
+ <label>Shop password</label>
65
+ <frontend_type>text</frontend_type>
66
+ <sort_order>70</sort_order>
67
+ <show_in_default>1</show_in_default>
68
+ <show_in_website>1</show_in_website>
69
+ <show_in_store>1</show_in_store>
70
+ </shoppassword>
71
+ <login translate="label">
72
+ <label>Merchant ID</label>
73
+ <frontend_type>text</frontend_type>
74
+ <sort_order>80</sort_order>
75
+ <show_in_default>1</show_in_default>
76
+ <show_in_website>1</show_in_website>
77
+ <show_in_store>0</show_in_store>
78
+ </login>
79
+ <checkhash translate="label">
80
+ <label>Check hash</label>
81
+ <frontend_type>select</frontend_type>
82
+ <source_model>adminhtml/system_config_source_yesno</source_model>
83
+ <sort_order>90</sort_order>
84
+ <show_in_default>1</show_in_default>
85
+ <show_in_website>1</show_in_website>
86
+ <show_in_store>0</show_in_store>
87
+ </checkhash>
88
+ <validitytime translate="label">
89
+ <label>Validity time</label>
90
+ <frontend_type>text</frontend_type>
91
+ <sort_order>100</sort_order>
92
+ <show_in_default>1</show_in_default>
93
+ <show_in_website>1</show_in_website>
94
+ <show_in_store>0</show_in_store>
95
+ </validitytime>
96
+ <sort_order translate="label">
97
+ <label>Sort Order</label>
98
+ <frontend_type>text</frontend_type>
99
+ <sort_order>110</sort_order>
100
+ <show_in_default>1</show_in_default>
101
+ <show_in_website>1</show_in_website>
102
+ <show_in_store>0</show_in_store>
103
+ </sort_order>
104
+ </fields>
105
+ </payparts_redirect>
106
+ </groups>
107
+ </payment>
108
+ </sections>
109
+ </config>
Payparts_Payment-1.0.0.0/app/design/frontend/base/default/template/payparts/message.phtml ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <ul id="payment_form_<?php echo $this->getMethodCode() ?>" style="display:none" class="form-list">
2
+ <li>
3
+ <?php echo $this->__('PayParts (<a href="//payparts2.privatbank.ua/ipp/" target="_blank">payparts2.privatbank.ua</a>) payment system.') ?>
4
+ </li>
5
+ <li id="payparts-select-block">
6
+ <p>Программа
7
+ <select id="system-sel" name="partsCount" style="width: 187px">
8
+ <option name="Оплата частями" pp-name="PP" value="<?php echo Mage::getStoreConfig('payment/payparts_redirect/ppperiod')+1 ?>" selected>Оплата частями</option>
9
+ <option name="Мгновенная рассрочка" pp-name="II" value="<?php echo Mage::getStoreConfig('payment/payparts_redirect/iiperiod')+1 ?>">Мгновенная рассрочка</option>
10
+ <option name="Деньги в периоде" pp-name="PB" value="<?php echo Mage::getStoreConfig('payment/payparts_redirect/pbperiod')+1 ?>">Деньги в периоде</option>
11
+ </select>
12
+ Срок,мес.  
13
+ <select id="month-sel" name="partsCount" style="width: 40px">
14
+ <option disabled>Срок,мес.</option>
15
+ <option selected value="2">2</option>
16
+ <?for ($i=0;$i < Mage::getStoreConfig('payment/payparts_redirect/ppperiod')+1; $i++){
17
+ if($i > 2){
18
+ echo '<option value='.$i.'>'.$i.'</option>';
19
+ } else
20
+ {
21
+ continue;
22
+ }
23
+ }?>
24
+ </select>
25
+ <button type="button" title="submit" class="button" id="send-period"> Check </button>
26
+ </p>
27
+ <p id="send-parts-error" style="display: none;">Error some</p>
28
+ </li>
29
+ <li id="payparts-success" style="display: none;">
30
+ <p><span id="system-name">Оплата частями</span> на <span id="payparts-period-success"></span> мес.</p>
31
+ </li>
32
+ </ul>
33
+ <script type="text/javascript">
34
+ function send() {
35
+ var paySystem = getPaySelectedAttr();
36
+
37
+ document.getElementById('payparts-period-success').innerHTML = document.getElementById('month-sel').value;
38
+ var url = "<?php echo $this->getUrl('payparts/payment/notify/', array('_secure' => false)); ?>";
39
+ new Ajax.Request( url, {
40
+ method: 'post',
41
+ parameters: 'parts='+document.getElementById('month-sel').value+'&system='+ paySystem['system'],
42
+ onSuccess: successFunc,
43
+ onFailure: failureFunc
44
+ });
45
+
46
+ }
47
+ function successFunc(response){
48
+ console.log(response);
49
+ document.getElementById("payparts-select-block").style.display = "none";
50
+ document.getElementById("payparts-success").style.display = "block";
51
+ document.getElementById("payment-buttons-container").style.display = "block";
52
+ return true;
53
+ }
54
+ function failureFunc(response){
55
+ document.getElementById("send-parts-error").style.display = "block";
56
+ return false;
57
+ }
58
+
59
+ function getPaySelectedAttr(){
60
+ var result = {};
61
+ var e = document.getElementById("system-sel");
62
+ result['value'] = e.options[e.selectedIndex].value;
63
+ result['system'] = e.options[e.selectedIndex].getAttribute('pp-name');
64
+ result['name'] = e.options[e.selectedIndex].getAttribute('name');
65
+ return result;
66
+ }
67
+
68
+ function periodChange(){
69
+ var selectData = getPaySelectedAttr();
70
+ var result = '<option disabled>Срок,мес.</option><option selected value="2">2</option>';
71
+ console.log(selectData);
72
+
73
+ for ($i=0;$i < selectData['value']; $i++){
74
+ if($i > 2){
75
+ result += '<option value='+$i+'>'+$i+'</option>';
76
+ }
77
+ }
78
+ document.getElementById('month-sel').innerHTML = result;
79
+ document.getElementById('system-name').innerHTML = selectData['name'];
80
+
81
+ }
82
+ document.getElementById("send-parts-error").style.display = "none";
83
+ document.getElementById("payment-buttons-container").style.display = "none";
84
+ document.getElementById('send-period').onclick = send;
85
+ document.getElementById('system-sel').onchange = periodChange;
86
+ </script>
Payparts_Payment-1.0.0.0/app/design/frontend/base/default/template/payparts/redirect.phtml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <html>
2
+ <body>
3
+ <?php echo $this->getForm(); ?>
4
+ <script type="text/javascript">document.getElementById("payparts_redirect").submit();</script>
5
+ </body>
6
+ </html>
Payparts_Payment-1.0.0.0/app/etc/modules/Payparts_Payparts_Payment.xml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Payparts_Payment>
5
+ <active>enable</active>
6
+ <codePool>community</codePool>
7
+ <depends>
8
+ <Mage_Sales />
9
+ <Mage_Payment />
10
+ </depends>
11
+ </Payparts_Payment>
12
+ </modules>
13
+ </config>
Payparts_Payment-1.0.0.0/app/locale/ru_RU/Payparts_Payment.csv ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Extension:","Модуль:"
2
+ "Enabled","Включен"
3
+ "Ident shop","Идентификатор магазина"
4
+ "Shop password","Проль магазина"
5
+ "Check hash","Проверять HASH"
6
+ "Secret key","Секретный ключ"
7
+ "Sort order","Порядок сортировки"
8
+ "Payment failed. Pleas try again later.","Оплата не удалась."
9
+ "Payment is held successfully.","Оплата удалась."
10
+ "PayParts (payparts2.privatbank.ua) works only with UAH but not with (%s)","PayParts (payparts2.privatbank.ua) принимает только UAH, текущая валюта %s"
11
+ "PayParts (payparts2.privatbank.ua) payment system.","Платежная система PayParts (payparts2.privatbank.ua). Вы будете перенаправлены на сайт <a href="//payparts2.privatbank.ua/ipp/">payparts2.privatbank.ua</a> после подтверждения покупки."
12
+ "You will be redirected to the PayParts (payparts2.privatbank.ua) website in a few seconds","Вы будете перенаправлены на сайт PayParts (payparts2.privatbank.ua) через несколько секунд."
13
+ "Cannot add the item to shopping cart.","Невозможно добавить товар в корзину."
14
+ "Payment title","Название метода оплаты"
15
+ "Click here, if not redirected for 30 seconds.","Нажмите здесь, если в течении 30 секунд не произошла переадресация"
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>9bbd841bf705997db5b5633f8e1b794d</name>
4
+ <version>1.0.0.0</version>
5
+ <stability>stable</stability>
6
+ <license>OSL</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>This is new payment method.</summary>
10
+ <description>This is new payment method.</description>
11
+ <notes>Good!</notes>
12
+ <authors><author><name>PB</name><user>pbuser</user><email>info@privatbank.ua</email></author></authors>
13
+ <date>2015-11-25</date>
14
+ <time>15:31:57</time>
15
+ <contents><target name="magecommunity"><dir><dir name="app"><dir name="code"><dir name="local"><dir name="Payparts"><dir name="Payment"><dir name="etc"><file name="system.xml" hash=""/><file name="config.xml" hash=""/></dir><dir name="Block"><file name="Message.php" hash=""/><file name="Redirect.php" hash=""/></dir><dir name="controllers"><file name="PaymentController.php" hash=""/></dir><dir name="Helper"><file name="Data.php" hash=""/></dir><dir name="Model"><file name="Redirect.php" hash=""/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir><dir name="app"><dir name="etc"><dir name="modules"><file name="Payparts_PaypartsPayment.xml" hash=""/></dir></dir></dir></dir></target><target name="magedesign"><dir><dir name="app"><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="payparts"><file name="message.phtml" hash=""/><file name="redirect.phtml" hash=""/></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir><dir name="app"><dir name="locale"><dir name="ru_RU"><file name="Payparts_Payment.csv" hash=""/></dir></dir></dir></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies><required><php><min>5.5.9</min><max>7.0.0</max></php></required></dependencies>
18
+ </package>