· 6 years ago · Feb 25, 2019, 07:44 AM
1<?php
2$num = array();
3$price = array();
4$name = array();
5
6$wsb_seed = time();
7$wsb_storeid = '223215914';
8$wsb_store = 'LovataTest';
9$wsb_order_num = "ORDER-".$order->get('num');
10$wsb_test = 1;
11$wsb_version = '2';
12$wsb_currency_id = "BYR";
13$wsb_total = $order->get('sum');
14$SecretKey = "lovatacorppass";
15//die(var_dump($wsb_seed.$wsb_storeid.$wsb_order_num.$wsb_test.$wsb_currency_id.$wsb_total.$SecretKey));
16$wsb_return_url = $modx->getOption('site_url').'successful-payment.html?access=success';
17$wsb_cancel_return_url = $modx->getOption('site_url').'successful-payment.html?access=false';
18$wsb_notify_url = $modx->getOption('site_url').'successful-payment.html?access=notify';
19//Значение объединенной Ñтроки: 124264917411111111ORDER-123456781BYR2195012345678901234567890
20// Ð´Ð»Ñ Ð²ÐµÑ€Ñии протокола 2 (wsb_version = 2)
21if($wsb_version == 2){
22$wsb_signature = sha1($wsb_seed.$wsb_storeid.$wsb_order_num.$wsb_test.$wsb_currency_id.$wsb_total.$SecretKey);
23}else{
24$wsb_signature = md5($wsb_seed.$wsb_storeid.$wsb_order_num.$wsb_test.$wsb_currency_id.$wsb_total.$SecretKey);
25}
26
27// ÐаÑтройка чанков
28$tplPayment = 'tpl.msPaymentWebPay.form'; // Форма отправки Ð¿Ð¾ÐºÑƒÐ¿Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° оплату
29; // Сообщение при отказе от оплаты
30
31/*-------------------------------------*/
32// ОпределÑем требуемое дейÑтвие
33
34// Передан объект order - Ñто новый заказ, выÑтавлÑем ÑоответÑтвующее дейÑтвие
35if (isset($order) && is_object($order)) {
36 $action = 'payment';
37}
38// Ðет заказ и дейÑÑ‚Ð²Ð¸Ñ - Ñто Ñ„Ð¸Ð³Ð½Ñ ÐºÐ°ÐºÐ°Ñ-то, редиректим на главную
39else if (!isset($_REQUEST['action']) || empty($_REQUEST['action'])) {
40 $modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'),'','','full'));
41}
42// ДейÑтвие еÑть, идем дальше
43else {
44 $action = $_REQUEST['action'];
45}
46
47// Подключение клаÑÑа miniShop Ñо вÑеми методами и таблицами
48if (!isset($modx->miniShop) || !is_object($modx->miniShop)) {
49 $modx->miniShop = $modx->getService('minishop','miniShop', $modx->getOption('core_path').'components/minishop/model/minishop/', $scriptProperties);
50 if (!($modx->miniShop instanceof miniShop)) return '';
51}
52
53$order_id = $modx->getObject("ModOrders",array('num'=>$order->get('num')));
54$order_id->set('comment',$wsb_signature);
55$order_id->save();
56$goods_orders = $modx->getCollection("ModOrderedGoods",array('oid'=>$order_id->id));
57$count = 0;
58foreach($goods_orders as $good_order) {
59 $count ++;
60 array_push($num,$good_order->num);
61 array_push($price,$good_order->price);
62 $name_good = $modx->getObject("modResource",$good_order->gid);
63 array_push($name,$name_good->pagetitle);
64
65 }
66
67for ($i=0;$i<=$count-1;$i++){
68 $wsb_invoice_item_name .= "<input type='hidden' name='wsb_invoice_item_name[".$i."]'value='".$name[$i]."'>";
69 $wsb_invoice_item_quantity .= "<input type='hidden'name='wsb_invoice_item_quantity[".$i."]' value='".$num[$i]."'>";
70 $wsb_invoice_item_price .= "<input type='hidden' name='wsb_invoice_item_price[".$i."]'value='".$price[$i]."'>";
71}
72//die(var_dump($wsb_invoice_item_name,$wsb_invoice_item_quantity,$wsb_invoice_item_price));
73switch ($action) {
74
75 // Отправка клиента на оплату заказа
76 case 'payment':
77 $arr = array(
78 'wsb_storeid' => $wsb_storeid
79 ,'wsb_store' => $wsb_store
80 ,'wsb_order_num' => $wsb_order_num
81 ,'wsb_currency_id' => $wsb_currency_id
82 ,'wsb_version' => $wsb_version
83 ,'wsb_seed' => $wsb_seed
84 ,'wsb_signature' => $wsb_signature
85 ,'wsb_return_url' => $wsb_return_url
86 ,'wsb_cancel_return_url' => $wsb_cancel_return_url
87 ,'wsb_test' => 1
88 ,'wsb_invoice_item_name' => $wsb_invoice_item_name
89 ,'wsb_invoice_item_quantity' => $wsb_invoice_item_quantity
90 ,'wsb_invoice_item_price' => $wsb_invoice_item_price
91 ,'wsb_notify_url' => $wsb_notify_url
92 ,'wsb_email' => $address->get('email')
93 ,'wsb_phone' => $address->get('phone')
94 ,'wsb_total' => $wsb_total
95 );
96 return $modx->getChunk($tplPayment, $arr);
97 break;
98
99 // Уведомление об оплате - проверÑем вÑе и переключаем ÑтатуÑ
100 case 'result':
101 if ($order = $modx->getObject('ModOrders', $_REQUEST['InvId'])) {
102 $inv_id = $order->get('id');
103 $out_summ = $order->get('sum') + $order->getDeliveryPrice();
104 $crc = md5($out_summ.':'.$inv_id.':'.$mrh_pass2.':Shp_item='.$shp_item);
105 if (strtoupper($_REQUEST['SignatureValue']) != strtoupper($crc)) {
106 die('Err: wrong signature.');
107 }
108 else {
109 $status = $modx->getOption('minishop.status_paid');
110 if ($modx->miniShop->changeOrderStatus($inv_id, $status)) {
111 die('OK');
112 }
113 else {
114 die('Err: could not switch status.');
115 }
116 }
117 }
118 else {
119 die('Err: order not found.');
120 }
121 break;
122
123 // УÑÐ¿ÐµÑˆÐ½Ð°Ñ Ð¾Ð¿Ð»Ð°Ñ‚Ð° - загружаем чанк $tplSuccess
124 case 'success':
125 if ($order = $modx->getObject('ModOrders', $_REQUEST['InvId'])) {
126 $out_summ = $_REQUEST["OutSum"];
127 $inv_id = $_REQUEST['InvId'];
128 $crc = md5($out_summ.':'.$inv_id.':'.$mrh_pass1.':Shp_item='.$shp_item);
129 if (strtoupper($_REQUEST['SignatureValue']) == strtoupper($crc)) {
130 return $modx->getChunk($tplSuccess, $order->toArray());
131 }
132 }
133 $modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'),'','','full'));
134 break;
135
136 // Отказ от оплаты - загружаем чанк $tplFailure
137 case 'failure':
138 if ($order = $modx->getObject('ModOrders', $_REQUEST['InvId'])) {
139 return $modx->getChunk($tplFailure, $order->toArray());
140 }
141 $modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'),'','','full'));
142 break;
143}