1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
handler.php
См. документацию.
1<?php
2
3namespace Sale\Handlers\PaySystem;
4
5
6use Bitrix\Main\Request;
7use Bitrix\Sale\Order;
8use Bitrix\Sale\PaySystem;
9use Bitrix\Sale\Payment;
10use Bitrix\Sale\PriceMaths;
11use Bitrix\Sale\Internals\UserBudgetPool;
12use Bitrix\Main\Entity\EntityError;
13use Bitrix\Main\Localization\Loc;
14
15Loc::loadMessages(__FILE__);
16
17class InnerHandler extends PaySystem\BaseServiceHandler implements PaySystem\IRefund
18{
25 public function initiatePay(Payment $payment, Request $request = null)
26 {
27 $result = new PaySystem\ServiceResult();
28
30 $paymentCollection = $payment->getCollection();
31
33 {
35 $order = $paymentCollection->getOrder();
36 if ($order)
37 {
38 $res = $payment->setPaid('Y');
39 if ($res->isSuccess())
40 {
41 $res = $order->save();
42 if (!$res->isSuccess())
43 {
44 $result->addErrors($res->getErrors());
45 }
46 }
47 else
48 {
49 $result->addErrors($res->getErrors());
50 }
51 }
52 }
53
54 return $result;
55 }
56
60 public function getCurrencyList()
61 {
62 return array();
63 }
64
70 public function refund(Payment $payment, $refundableSum)
71 {
72 $result = new PaySystem\ServiceResult();
73
75 $paymentCollection = $payment->getCollection();
76
78 $order = $paymentCollection->getOrder();
79
80 if ($this->isUserBudgetLock($order))
81 {
82 $result->addError(new EntityError(Loc::getMessage('ORDER_PSH_INNER_ERROR_USER_BUDGET_LOCK')));
83 return $result;
84 }
85
87 $result->setOperationType(PaySystem\ServiceResult::MONEY_LEAVING);
88
89 return $result;
90 }
91
96 public function creditNoDemand(Payment $payment)
97 {
98 $result = new PaySystem\ServiceResult();
99
101 $collection = $payment->getCollection();
102
104 $order = $collection->getOrder();
105
106 if ($this->isUserBudgetLock($order))
107 {
108 $result->addError(new EntityError(Loc::getMessage('ORDER_PSH_INNER_ERROR_USER_BUDGET_LOCK')));
109 return $result;
110 }
111
112 $paymentSum = PriceMaths::roundPrecision($payment->getSum());
113 $userBudget = PriceMaths::roundPrecision(UserBudgetPool::getUserBudgetByOrder($order));
114
115 if($userBudget >= $paymentSum)
117 else
118 $result->addError(new EntityError(Loc::getMessage('ORDER_PSH_INNER_ERROR_INSUFFICIENT_MONEY')));
119
120 return $result;
121 }
122
127 public function debitNoDemand(Payment $payment)
128 {
129 return $this->refund($payment, $payment->getSum());
130 }
131
136 private function isUserBudgetLock(Order $order)
137 {
138 if ($userAccount = \CSaleUserAccount::GetByUserId($order->getUserId(), $order->getCurrency()))
139 return $userAccount['LOCKED'] == 'Y';
140
141 return false;
142 }
143}
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
static getUserBudgetByOrder(Sale\Order $order)
Определения userbudgetpool.php:286
static addPoolItem(Sale\Order $order, $value, $type, Sale\Payment $payment=null)
Определения userbudgetpool.php:176
initiatePay(Payment $payment, Request $request=null)
creditNoDemand(Payment $payment)
Определения baseservicehandler.php:308
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
refund(Payment $payment, $refundableSum)
Order
Определения order.php:6
$payment
Определения payment.php:14
$order
Определения payment.php:8
$paymentCollection
Определения payment.php:11