1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
manager.php
См. документацию.
1<?php
2
3namespace Bitrix\Sale\PaySystem;
4
5use Bitrix\Main\Application;
6use Bitrix\Main\ArgumentException;
7use Bitrix\Main\ArgumentNullException;
8use Bitrix\Main\ArgumentOutOfRangeException;
9use Bitrix\Main\Config\Option;
10use Bitrix\Main\Event;
11use Bitrix\Main\EventResult;
12use Bitrix\Main\IO\Directory;
13use Bitrix\Main\IO\File;
14use Bitrix\Main\IO\Path;
15use Bitrix\Main\Localization\Loc;
16use Bitrix\Main\Request;
17use Bitrix\Sale\Basket;
18use Bitrix\Sale\BusinessValue;
19use Bitrix\Sale\Internals\PaySystemActionTable;
20use Bitrix\Sale\Internals\PaySystemRestHandlersTable;
21use Bitrix\Sale\Internals\ServiceRestrictionTable;
22use Bitrix\Sale\Internals\BusinessValueTable;
23use Bitrix\Sale\Order;
24use Bitrix\Sale\Payment;
25use Bitrix\Sale\Registry;
26use Bitrix\Sale\Services\Base\Restriction;
27use Bitrix\Sale\Services\PaySystem\Restrictions;
28
29Loc::loadMessages(__FILE__);
30
35final class Manager
36{
39
40 const EVENT_ON_GET_HANDLER_DESC = 'OnSaleGetHandlerDescription';
41 const EVENT_ON_PAYSYSTEM_UPDATE = 'OnSalePaySystemUpdate';
42
43 const CACHE_ID = "BITRIX_SALE_INNER_PS_ID";
44 const TTL = 31536000;
48 private static $handlerDirectories = array(
49 'CUSTOM' => '',
50 'LOCAL' => '/local/php_interface/include/sale_payment/',
51 'SYSTEM' => '/bitrix/modules/sale/handlers/paysystem/',
52
58 'SYSTEM_OLD' => '/bitrix/modules/sale/payment/'
59 );
60
66 public static function getHandlerDirectories()
67 {
68 $handlerDirectories = self::$handlerDirectories;
69 $handlerDirectories['CUSTOM'] = Option::get("sale", "path2user_ps_files", BX_PERSONAL_ROOT."/php_interface/include/sale_payment/");
70
71 if (IsModuleInstalled('intranet'))
72 {
73 unset($handlerDirectories['SYSTEM_OLD']);
74 }
75
76 return $handlerDirectories;
77 }
78
84 public static function getList(array $params = array())
85 {
86 return PaySystemActionTable::getList($params);
87 }
88
93 public static function getById($id)
94 {
95 if ((int)$id <= 0)
96 return false;
97
98 $params = array(
99 'select' => array('*'),
100 'filter' => array('ID' => $id)
101 );
102
104 return $dbRes->fetch();
105 }
106
111 public static function getByCode($code)
112 {
113 $params = array(
114 'select' => array('*'),
115 'filter' => array('CODE' => $code)
116 );
117
119 return $dbRes->fetch();
120 }
121
128 public static function update($primary, array $data): \Bitrix\Main\ORM\Data\UpdateResult
129 {
130 $oldFields = PaySystemActionTable::getByPrimary($primary)->fetch();
131 if ($oldFields)
132 {
133 $newFields = array_merge($oldFields, $data);
134 $data['PS_CLIENT_TYPE'] = (new Service($newFields))->getClientTypeFromHandler();
135 }
136
137 $updateResult = PaySystemActionTable::update($primary, $data);
138 if ($oldFields && $updateResult->isSuccess())
139 {
140 $oldFields = array_intersect_key($oldFields, $data);
141 $eventParams = [
142 'PAY_SYSTEM_ID' => $primary,
143 'OLD_FIELDS' => $oldFields,
144 'NEW_FIELDS' => $data,
145 ];
146 $event = new Event('sale', self::EVENT_ON_PAYSYSTEM_UPDATE, $eventParams);
147 $event->send();
148 }
149
150 return $updateResult;
151 }
152
158 public static function add(array $data): \Bitrix\Main\ORM\Data\AddResult
159 {
160 $data['PS_CLIENT_TYPE'] = (new Service($data))->getClientTypeFromHandler();
161
162 return PaySystemActionTable::add($data);
163 }
164
168 public static function generateXmlId()
169 {
170 return uniqid('bx_');
171 }
172
182 public static function searchByRequest(Request $request)
183 {
184 $documentRoot = Application::getDocumentRoot();
185
187 'select' => ['*'],
188 'filter' => [
189 'ACTIVE' => 'Y',
190 ],
191 ]);
192
193 while ($item = $items->fetch())
194 {
195 $name = $item['ACTION_FILE'];
196
197 foreach (self::getHandlerDirectories() as $type => $path)
198 {
199 $className = '';
200 if (File::isFileExists($documentRoot.$path.$name.'/handler.php'))
201 {
202 [$className] = self::includeHandler($item['ACTION_FILE']);
203 }
204
205 if (class_exists($className) && is_callable(array($className, 'isMyResponse')))
206 {
207 if ($className::isMyResponse($request, $item['ID']))
208 {
209 return $item;
210 }
211 }
212 }
213 }
214
215 return false;
216 }
217
222 public static function getFolderFromClassName($className)
223 {
224 $pos = mb_strrpos($className, '\\');
225 if ($pos !== false)
226 $className = mb_substr($className, $pos + 1);
227
228 $folder = str_replace('Handler', '', $className);
229 $folder = self::sanitize($folder);
230 $folder = mb_strtolower($folder);
231
232 return $folder;
233 }
234
239 public static function sanitize($name)
240 {
241 return preg_replace("/[^a-z0-9._]/i", "", $name);
242 }
243
249 public static function getIdsByPayment($paymentId, $registryType = Registry::REGISTRY_TYPE_ORDER): array
250 {
251 if (empty($paymentId))
252 {
253 return [0, 0];
254 }
255
256 $params = [
257 'select' => ['ID', 'ORDER_ID'],
258 ];
259
260 if (intval($paymentId).'|' == $paymentId.'|')
261 {
262 $params['filter']['=ID'] = $paymentId;
263 }
264 else
265 {
266 $params['filter']['=ACCOUNT_NUMBER'] = $paymentId;
267 }
268
269 $registry = Registry::getInstance($registryType);
270
272 $paymentClassName = $registry->getPaymentClassName();
273 $result = $paymentClassName::getList($params);
274 $data = $result->fetch() ?: [];
275
276 return [(int)$data['ORDER_ID'], (int)$data['ID']];
277 }
278
283 public static function getConsumersList()
284 {
285 $result = array();
286
288
289 while ($item = $items->fetch())
290 {
291 $data = self::getHandlerDescription($item['ACTION_FILE'], $item['PS_MODE']);
292 $data['NAME'] = $item['NAME'];
293 $data['GROUP'] = 'PAYSYSTEM';
294 $data['PROVIDERS'] = [
295 'VALUE', 'COMPANY', 'ORDER', 'USER', 'PROPERTY',
296 'PAYMENT', 'BANK_DETAIL', 'MC_BANK_DETAIL',
297 'REQUISITE', 'MC_REQUISITE', 'CRM_COMPANY',
298 'CRM_MYCOMPANY', 'CRM_CONTACT'
299 ];
300
301 $result['PAYSYSTEM_'.$item['ID']] = $data;
302 }
303
304 return $result;
305 }
306
311 public static function getPsType($paySystemId)
312 {
313 $params = array(
314 'select' => array('IS_CASH'),
315 'filter' => array('ID' => $paySystemId)
316 );
317
319 $data = $dbRes->fetch();
320
321 return $data['IS_CASH'];
322 }
323
335 public static function getListWithRestrictionsByOrder(Order $order, float $sum = null, int $mode = Restrictions\Manager::MODE_CLIENT): array
336 {
338 $orderClone = $order->createClone();
339
340 $orderPrice = $orderClone->getPrice();
341 $paymentSum = $orderPrice;
342 if ($sum && $sum >= 0 && $sum <= $orderPrice)
343 {
344 $paymentSum = $sum;
345 }
346
347 $paymentCollection = $orderClone->getPaymentCollection();
348 $payment = $paymentCollection->createItem();
349 $payment->setFields([
350 'SUM' => $paymentSum,
351 ]);
352
354 }
355
363 public static function getListWithRestrictions(Payment $payment, $mode = Restrictions\Manager::MODE_CLIENT)
364 {
365 $result = array();
366
367 $filter = [
368 '=ACTIVE' => 'Y',
369 '=ENTITY_REGISTRY_TYPE' => $payment::getRegistryType(),
370 ];
371
372 $bindingPaySystemIds = [];
373 if ($mode == Restrictions\Manager::MODE_CLIENT)
374 {
376 if ($bindingPaySystemIds)
377 {
378 $filter['=ID'] = $bindingPaySystemIds;
379 }
380 }
381
383 'filter' => $filter,
384 'order' => [
385 'SORT' => 'ASC',
386 'NAME' => 'ASC',
387 ],
388 ]);
389
390 while ($paySystem = $dbRes->fetch())
391 {
392 if ($bindingPaySystemIds)
393 {
394 $result[$paySystem['ID']] = $paySystem;
395 }
396 elseif ($mode == Restrictions\Manager::MODE_MANAGER)
397 {
398 $checkServiceResult = Restrictions\Manager::checkService($paySystem['ID'], $payment, $mode);
399 if ($checkServiceResult != Restrictions\Manager::SEVERITY_STRICT)
400 {
401 if ($checkServiceResult == Restrictions\Manager::SEVERITY_SOFT)
402 {
403 $paySystem['RESTRICTED'] = $checkServiceResult;
404 }
405 $result[$paySystem['ID']] = $paySystem;
406 }
407 }
408 elseif ($mode == Restrictions\Manager::MODE_CLIENT)
409 {
410 if (Restrictions\Manager::checkService($paySystem['ID'], $payment, $mode) === Restrictions\Manager::SEVERITY_NONE)
411 {
412 $result[$paySystem['ID']] = $paySystem;
413 }
414 }
415 }
416
417 return $result;
418 }
419
426 public static function getHandlerList()
427 {
428 $documentRoot = Application::getDocumentRoot();
429 $result = array(
430 'SYSTEM' => array(),
431 'USER' => array()
432 );
433
434 foreach (self::getHandlerDirectories() as $type => $dir)
435 {
436 if (!Directory::isDirectoryExists($documentRoot.$dir))
437 {
438 continue;
439 }
440
441 $directory = new Directory($documentRoot.$dir);
442 foreach ($directory->getChildren() as $handler)
443 {
444 if (!$handler->isDirectory())
445 {
446 continue;
447 }
448
449 $isDescriptionExist = false;
451 foreach ($handler->getChildren() as $item)
452 {
453 if ($item->isFile())
454 {
455 $data = array();
456 $psTitle = '';
457 $isAvailable = null;
458
459 if (mb_strpos($item->getName(), '.description') !== false)
460 {
461 $handlerName = $handler->getName();
462
463 include $item->getPath();
464
465 if (array_key_exists('NAME', $data))
466 {
467 $psTitle = $data['NAME'].' ('.$handlerName.')';
468 if (isset($data['IS_AVAILABLE']))
469 {
470 $isAvailable = $data['IS_AVAILABLE'];
471 }
472 }
473 else
474 {
475 if ($psTitle == '')
476 {
477 $psTitle = $handlerName;
478 }
479 else
480 {
481 $psTitle .= ' ('.$handlerName.')';
482 }
483
484 $handlerName = str_replace(Path::normalize($documentRoot), '', $handler->getPath());
485 }
486 $group = (mb_strpos($type, 'SYSTEM') !== false) ? 'SYSTEM' : 'USER';
487
488 if (!isset($result[$group][$handlerName]))
489 {
490 if ($isAvailable !== null
491 && $isAvailable === static::HANDLER_AVAILABLE_FALSE
492 )
493 {
494 continue(2);
495 }
496
497 $result[$group][$handlerName] = $psTitle;
498 }
499 $isDescriptionExist = true;
500 continue;
501 }
502 }
503 }
504
505 if (!$isDescriptionExist)
506 {
507 $group = (mb_strpos($type, 'SYSTEM') !== false) ? 'SYSTEM' : 'USER';
508 $handlerName = str_replace($documentRoot, '', $handler->getPath());
509 $result[$group][$handlerName] = $handler->getName();
510 }
511 }
512 }
513
514 $result['USER'] = array_merge(static::getRestHandlers(), $result['USER']);
515
516 return $result;
517 }
518
523 public static function getClassNameFromPath($path)
524 {
525 $pos = mb_strrpos($path, '/');
526
527 if ($pos == mb_strlen($path))
528 {
529 $path = mb_substr($path, 0, $pos - 1);
530 $pos = mb_strrpos($path, '/');
531 }
532
533 if ($pos !== false)
534 $path = mb_substr($path, $pos + 1);
535
536 return "Sale\\Handlers\\PaySystem\\".$path.'Handler';
537 }
538
546 public static function getHandlerDescription($handler, $psMode = null)
547 {
548 $service = new Service(array('ACTION_FILE' => $handler, 'PS_MODE' => $psMode));
549 $data = $service->getHandlerDescription();
550
551 $eventParams = array('handler' => $handler);
552 $event = new Event('sale', self::EVENT_ON_GET_HANDLER_DESC, $eventParams);
553 $event->send();
554 foreach ($event->getResults() as $eventResult)
555 {
556 if ($eventResult->getType() !== EventResult::ERROR)
557 {
558 $codes = $eventResult->getParameters();
559 if ($codes && is_array($codes))
560 {
561 if (!isset($data['CODES']) || !is_array($data['CODES']))
562 {
563 $data['CODES'] = [];
564 }
565
566 $data['CODES'] = array_merge($data['CODES'], $codes);
567 }
568 }
569 }
570
571 if (isset($data['CODES']) && is_array($data['CODES']))
572 {
573 uasort(
574 $data['CODES'],
575 function ($a, $b)
576 {
577 $sortA = $a['SORT'] ?? 0;
578 $sortB = $b['SORT'] ?? 0;
579
580 return ($sortA < $sortB) ? -1 : 1;
581 }
582 );
583 }
584
585 return $data;
586 }
587
594 public static function getPathToHandlerFolder($folder): ?string
595 {
596 if (!$folder)
597 {
598 return null;
599 }
600
601 $documentRoot = Application::getDocumentRoot();
602 $dirs = self::getHandlerDirectories();
603
604 if (mb_strpos($folder, DIRECTORY_SEPARATOR) !== false)
605 {
606 $folderWithoutHandlerName = array_slice(explode(DIRECTORY_SEPARATOR, $folder), 1, -1);
607 $folderWithoutHandlerName = implode(DIRECTORY_SEPARATOR, $folderWithoutHandlerName);
608
609 $handlersDirectory = new Directory($folderWithoutHandlerName);
610 $handlersDirectoryPhysicalPath = DIRECTORY_SEPARATOR.$handlersDirectory->getPhysicalPath().DIRECTORY_SEPARATOR;
611
612 foreach ($dirs as $dir)
613 {
614 if ($documentRoot.$dir !== $documentRoot.$handlersDirectoryPhysicalPath)
615 {
616 continue;
617 }
618
619 return Directory::isDirectoryExists($documentRoot.$folder) ? $folder : null;
620 }
621 }
622 else
623 {
624 foreach ($dirs as $dir)
625 {
626 $path = $dir.$folder;
627 if (!Directory::isDirectoryExists($documentRoot.$path))
628 {
629 continue;
630 }
631
632 return $path;
633 }
634 }
635
636 return null;
637 }
638
642 public static function getInnerPaySystemId() : int
643 {
644 $id = 0;
645 $cacheManager = Application::getInstance()->getManagedCache();
646
647 if ($cacheManager->read(self::TTL, self::CACHE_ID))
648 {
649 $id = $cacheManager->get(self::CACHE_ID);
650 }
651
652 if ($id <= 0)
653 {
654 $data = PaySystemActionTable::getRow(
655 [
656 'select' => ['ID'],
657 'filter' => ['=ACTION_FILE' => 'inner']
658 ]
659 );
660 if ($data === null)
661 {
662 $id = self::createInnerPaySystem();
663 }
664 else
665 {
666 $id = $data['ID'];
667 }
668
669 $cacheManager->set(self::CACHE_ID, $id);
670 }
671
672 return (int)$id;
673 }
674
679 private static function createInnerPaySystem()
680 {
681 $paySystemSettings = array(
682 'NAME' => Loc::getMessage('SALE_PS_MANAGER_INNER_NAME'),
683 'PSA_NAME' => Loc::getMessage('SALE_PS_MANAGER_INNER_NAME'),
684 'ACTION_FILE' => 'inner',
685 'ACTIVE' => 'Y',
686 'ENTITY_REGISTRY_TYPE' => Registry::REGISTRY_TYPE_ORDER,
687 'NEW_WINDOW' => 'N'
688 );
689
690 $imagePath = Application::getDocumentRoot().'/bitrix/images/sale/sale_payments/inner.png';
691 if (File::isFileExists($imagePath))
692 {
693 $paySystemSettings['LOGOTIP'] = \CFile::MakeFileArray($imagePath);
694 $paySystemSettings['LOGOTIP']['MODULE_ID'] = "sale";
695 \CFile::SaveForDB($paySystemSettings, 'LOGOTIP', 'sale/paysystem/logotip');
696 }
697
698 $result = PaySystemActionTable::add($paySystemSettings);
699
700 if ($result->isSuccess())
701 return $result->getId();
702
703 return 0;
704 }
705
710 public static function isExist($id)
711 {
712 return (bool)self::getById($id);
713 }
714
719 public static function getObjectById($id)
720 {
721 if ((int)$id <= 0)
722 return null;
723
724 $data = Manager::getById($id);
725
726 if (is_array($data) && $data)
727 return new Service($data);
728
729 return null;
730 }
731
739 public static function getTariff($folder, $paySystemId = 0)
740 {
741 $documentRoot = Application::getDocumentRoot();
742 $result = array();
743
744 $path = self::getPathToHandlerFolder($folder);
745 if ($path !== null)
746 {
747 if (File::isFileExists($documentRoot.$path.'/handler.php'))
748 {
749 $actionFile = self::getFolderFromClassName(self::getClassNameFromPath($path));
750 [$className] = self::includeHandler($actionFile);
751 if (class_exists($className) && is_subclass_of($className, IPayable::class))
752 {
753 $result = $className::getStructure($paySystemId);
754 }
755 }
756 }
757 else
758 {
759 $result = \CSalePaySystemsHelper::getPaySystemTarif($folder, $paySystemId);
760 }
761
762 return $result;
763 }
764
768 public static function getBusValueGroups()
769 {
770 return [
771 'CONNECT_SETTINGS_ALFABANK' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_ALFABANK'), 'SORT' => 100],
772 'CONNECT_SETTINGS_AUTHORIZE' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_AUTHORIZE'), 'SORT' => 100],
773 'CONNECT_SETTINGS_YANDEX' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_YANDEX'), 'SORT' => 100],
774 'CONNECT_SETTINGS_YANDEX_INVOICE' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_YANDEX_INVOICE'), 'SORT' => 100],
775 'CONNECT_SETTINGS_WEBMONEY' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_WEBMONEY'), 'SORT' => 100],
776 'CONNECT_SETTINGS_ASSIST' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_ASSIST'), 'SORT' => 100],
777 'CONNECT_SETTINGS_ROBOXCHANGE' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_ROBOXCHANGE'), 'SORT' => 100],
778 'CONNECT_SETTINGS_QIWI' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_QIWI'), 'SORT' => 100],
779 'CONNECT_SETTINGS_PAYPAL' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_PAYPAL'), 'SORT' => 100],
780 'CONNECT_SETTINGS_PAYMASTER' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_PAYMASTER'), 'SORT' => 100],
781 'CONNECT_SETTINGS_LIQPAY' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_LIQPAY'), 'SORT' => 100],
782 'CONNECT_SETTINGS_BILL' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_BILL'), 'SORT' => 100],
783 'CONNECT_SETTINGS_BILLDE' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_BILLDE'), 'SORT' => 100],
784 'CONNECT_SETTINGS_BILLEN' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_BILLEN'), 'SORT' => 100],
785 'CONNECT_SETTINGS_BILLUA' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_BILLUA'), 'SORT' => 100],
786 'CONNECT_SETTINGS_BILLLA' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_BILLLA'), 'SORT' => 100],
787 'CONNECT_SETTINGS_SBERBANK' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_SBERBANK'), 'SORT' => 100],
788 'GENERAL_SETTINGS' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_GENERAL_SETTINGS'), 'SORT' => 100],
789 'COLUMN_SETTINGS' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_COLUMN'), 'SORT' => 100],
790 'VISUAL_SETTINGS' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_VISUAL'), 'SORT' => 100],
791 'PAYMENT' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_PAYMENT'), 'SORT' => 200],
792 'PAYSYSTEM' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_PAYSYSTEM'), 'SORT' => 500],
793 'PS_OTHER' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_PS_OTHER'), 'SORT' => 10000],
794 'CONNECT_SETTINGS_UAPAY' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_UAPAY'), 'SORT' => 100],
795 'CONNECT_SETTINGS_ADYEN' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_ADYEN'), 'SORT' => 100],
796 'CONNECT_SETTINGS_APPLE_PAY' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_APPLE_PAY'), 'SORT' => 200],
797 'CONNECT_SETTINGS_SKB' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_SINARA'), 'SORT' => 100],
798 'CONNECT_SETTINGS_BEPAID' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_BEPAID'), 'SORT' => 100],
799 'CONNECT_SETTINGS_WOOPPAY' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_WOOPPAY'), 'SORT' => 100],
800 'CONNECT_SETTINGS_PLATON' => ['NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_PLATON'), 'SORT' => 100],
801 'CONNECT_SETTINGS_TBB' => [
802 'NAME' => Loc::getMessage('SALE_PS_MANAGER_GROUP_CONNECT_SETTINGS_TBB'),
803 'SORT' => 100,
804 ],
805 ];
806 }
807
815 public static function delete($primary)
816 {
817 if (empty($primary))
818 {
819 throw new ArgumentException('Parameter $primary can\'t be empty');
820 }
821
822 $paySystemInfo = PaySystemActionTable::getRowById($primary);
823 if ($paySystemInfo['LOGOTIP'])
824 {
825 \CFile::Delete($paySystemInfo['LOGOTIP']);
826 }
827
828 self::deleteRestrictions($primary);
829
831 if ($service)
832 {
833 self::deleteBusinessValues($service);
834 }
835
836 $deleteResult = PaySystemActionTable::delete($primary);
837 if ($deleteResult->isSuccess())
838 {
839 if ($service && $service->isSupportPrintCheck())
840 {
841 $onDeletePaySystemResult = Cashbox\EventHandler::onDeletePaySystem($service);
842 if (!$onDeletePaySystemResult->isSuccess())
843 {
844 $deleteResult->addErrors($onDeletePaySystemResult->getErrors());
845 }
846 }
847 }
848
849 return $deleteResult;
850 }
851
858 private static function deleteRestrictions(int $paySystemId): void
859 {
860 $restrictionList = Restrictions\Manager::getRestrictionsList($paySystemId);
861 if ($restrictionList)
862 {
864
865 foreach ($restrictionList as $restriction)
866 {
868 $className = $restriction['CLASS_NAME'];
869 if (is_subclass_of($className, Restriction::class))
870 {
871 $className::delete($restriction['ID'], $paySystemId);
872 }
873 }
874 }
875 }
876
884 private static function deleteBusinessValues(Service $service): void
885 {
886 BusinessValue::delete(Service::PAY_SYSTEM_PREFIX . $service->getField('ID'));
887
888 $paySystemCount = PaySystemActionTable::getList([
889 'select' => ['ID'],
890 'filter' => [
891 'ACTION_FILE' => $service->getField('ACTION_FILE'),
892 ],
893 'count_total' => true,
894 ])->getCount();
895 if ($paySystemCount === 1)
896 {
897 $handlerDescription = $service->getHandlerDescription();
898 $handlerDescriptionCodes = array_keys($handlerDescription['CODES'] ?? []);
899 foreach ($handlerDescriptionCodes as $code)
900 {
901 BusinessValueTable::deleteByCodeKey($code);
902 }
903 }
904 }
905
911 public static function getPersonTypeIdList($paySystemId)
912 {
913 $data = array();
914
915 $dbRestriction = ServiceRestrictionTable::getList(array(
916 'filter' => array(
917 'SERVICE_ID' => $paySystemId,
918 'SERVICE_TYPE' => Restrictions\Manager::SERVICE_TYPE_PAYMENT,
919 '=CLASS_NAME' => '\\'.Restrictions\PersonType::class
920 )
921 ));
922
923 while ($restriction = $dbRestriction->fetch())
924 $data = array_merge($data, $restriction['PARAMS']['PERSON_TYPE_ID']);
925
926 return $data;
927 }
928
941 public static function getPaymentObjectByData(array $data)
942 {
943 $context = Application::getInstance()->getContext();
944
946
948 $orderClass = $registry->getOrderClassName();
949
951 $order = $orderClass::create($context->getSite());
952 $order->setPersonTypeId($data['PERSON_TYPE_ID']);
953
955 $basketClass = $registry->getBasketClassName();
956
957 $basket = $basketClass::create($context->getSite());
958 $order->setBasket($basket);
959
960 $collection = $order->getPaymentCollection();
961 if ($collection)
962 {
963 return $collection->createItem();
964 }
965
966 return null;
967 }
968
972 public static function getDataRefundablePage()
973 {
974 $paySystemList = array();
975 $dbRes = static::getList();
976 while ($data = $dbRes->fetch())
977 {
978 $service = new Service($data);
979 if ($service->isRefundable())
980 $paySystemList[$data['ACTION_FILE']][] = $data;
981 }
982
983 $result = array();
984 foreach ($paySystemList as $handler => $data)
985 {
986 /* @var ServiceHandler $classHandler */
987 $classHandler = static::getClassNameFromPath($handler);
988
989 if (is_subclass_of($classHandler, '\Bitrix\Sale\PaySystem\ServiceHandler'))
990 {
991 $settings = $classHandler::findMyDataRefundablePage($data);
992 if ($settings)
993 $result = array_merge($settings, $result);
994 }
995 }
996
997 return $result;
998 }
999
1003 private static function getRestHandlers()
1004 {
1005 $result = array();
1006
1007 $dbRes = PaySystemRestHandlersTable::getList();
1008 while ($item = $dbRes->fetch())
1009 {
1010 $result[$item['CODE']] = $item['NAME'].' ('.$item['CODE'].')';
1011 }
1012
1013 return $result;
1014 }
1015
1020 public static function isRestHandler($handler)
1021 {
1022 static $result = [];
1023
1024 if (isset($result[$handler]))
1025 {
1026 return $result[$handler];
1027 }
1028
1029 $handlerData = PaySystemRestHandlersTable::getList([
1030 'filter' => ['=CODE' => $handler],
1031 'limit' => 1,
1032 ])->fetch();
1033 $result[$handler] = (bool)$handlerData;
1034
1035 return $result[$handler] ?? false;
1036 }
1037
1045 public static function includeHandler($actionFile): array
1046 {
1047 $className = '';
1048 $handlerType = '';
1049
1050 if ($name = self::getFolderFromClassName($actionFile))
1051 {
1052 $documentRoot = Application::getDocumentRoot();
1053 foreach (self::getHandlerDirectories() as $type => $path)
1054 {
1055 if (File::isFileExists($documentRoot.$path.$name.'/handler.php'))
1056 {
1057 $className = self::getClassNameFromPath($actionFile);
1058 if (!class_exists($className))
1059 require_once($documentRoot.$path.$name.'/handler.php');
1060
1061 if (class_exists($className))
1062 {
1063 $handlerType = $type;
1064 break;
1065 }
1066
1067 $className = '';
1068 }
1069 }
1070 }
1071
1072 if ($className === '')
1073 {
1074 if (self::isRestHandler($actionFile))
1075 {
1076 $className = '\Bitrix\Sale\PaySystem\RestHandler';
1077 if (!class_exists($actionFile))
1078 {
1079 class_alias($className, $actionFile);
1080 }
1081 }
1082 else
1083 {
1084 $className = '\Bitrix\Sale\PaySystem\CompatibilityHandler';
1085 }
1086 }
1087
1088 return [
1089 $className,
1090 $handlerType,
1091 ];
1092 }
1093
1094 public static function getHandlerName(string $handler, string $psMode = ''): string
1095 {
1096 $handlerDescription = Manager::getHandlerDescription($handler, $psMode);
1097
1098 if (!$handlerDescription)
1099 {
1100 return '';
1101 }
1102
1103 if (isset($handlerDescription['HANDLER_MODE_LIST'][$psMode]))
1104 {
1105 return $handlerDescription['HANDLER_MODE_LIST'][$psMode];
1106 }
1107 elseif (isset($handlerDescription['NAME']))
1108 {
1109 return $handlerDescription['NAME'];
1110 }
1111
1112 return '';
1113 }
1114}
$path
Определения access_edit.php:21
$sum
Определения checkout.php:6
$type
Определения options.php:106
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
Определения request.php:10
static delete($consumerKey, $personTypeId=null)
Определения businessvalue.php:298
static getListWithRestrictions(CollectableEntity $entity)
Определения manager.php:41
static getObjectById($id)
Определения manager.php:165
static getList(array $parameters=[])
Определения manager.php:135
static onDeletePaySystem(Sale\PaySystem\Service $service)
Определения eventhandler.php:37
static getClassNameFromPath($path)
Определения manager.php:523
const EVENT_ON_GET_HANDLER_DESC
Определения manager.php:40
static getList(array $params=array())
Определения manager.php:84
static getTariff($folder, $paySystemId=0)
Определения manager.php:739
static getInnerPaySystemId()
Определения manager.php:642
const CACHE_ID
Определения manager.php:43
static isExist($id)
Определения manager.php:710
static sanitize($name)
Определения manager.php:239
static getPsType($paySystemId)
Определения manager.php:311
static getById($id)
Определения manager.php:93
static getBusValueGroups()
Определения manager.php:768
static searchByRequest(Request $request)
Определения manager.php:182
static getDataRefundablePage()
Определения manager.php:972
const EVENT_ON_PAYSYSTEM_UPDATE
Определения manager.php:41
const TTL
Определения manager.php:44
const HANDLER_AVAILABLE_FALSE
Определения manager.php:38
static getHandlerName(string $handler, string $psMode='')
Определения manager.php:1094
static getPersonTypeIdList($paySystemId)
Определения manager.php:911
static getFolderFromClassName($className)
Определения manager.php:222
static add(array $data)
Определения manager.php:158
static isRestHandler($handler)
Определения manager.php:1020
static generateXmlId()
Определения manager.php:168
const HANDLER_AVAILABLE_TRUE
Определения manager.php:37
static getListWithRestrictions(Payment $payment, $mode=Restrictions\Manager::MODE_CLIENT)
Определения manager.php:363
static getConsumersList()
Определения manager.php:283
static getHandlerDirectories()
Определения manager.php:66
static getByCode($code)
Определения manager.php:111
static includeHandler($actionFile)
Определения manager.php:1045
static getObjectById($id)
Определения manager.php:719
static getHandlerDescription($handler, $psMode=null)
Определения manager.php:546
static getPathToHandlerFolder($folder)
Определения manager.php:594
static update($primary, array $data)
Определения manager.php:128
static getAvailablePaySystemIdsByPaymentId(int $paymentId)
Определения payment.php:19
static getInstance($type)
Определения registry.php:183
const REGISTRY_TYPE_ORDER
Определения registry.php:16
static checkService($serviceId, Entity $entity, $mode=self::MODE_CLIENT)
Определения restrictionmanager.php:119
static getRestrictionsList($serviceId)
Определения restrictionmanager.php:158
static getPaySystemTarif($actionFile, $psId, $persId=0)
Определения pay_system_helper.php:40
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$isAvailable
Определения .description.php:12
$filter
Определения iblock_catalog_list.php:54
$context
Определения csv_new_setup.php:223
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
foreach(['Bitrix\\Main'=> '/lib', 'Psr\\Container'=> '/vendor/psr/container/src', 'Psr\\Log'=> '/vendor/psr/log/src', 'Psr\\Http\\Message'=> '/vendor/psr/http-message/src', 'Psr\\Http\\Client'=> '/vendor/psr/http-client/src', 'Http\\Promise'=> '/vendor/php-http/promise/src', 'PHPMailer\\PHPMailer'=> '/vendor/phpmailer/phpmailer/src', 'GeoIp2'=> '/vendor/geoip2/geoip2/src', 'MaxMind\\Db'=> '/vendor/maxmind-db/reader/src/MaxMind/Db', 'PhpParser'=> '/vendor/nikic/php-parser/lib/PhpParser', 'Recurr'=> '/vendor/simshaun/recurr/src/Recurr',] as $namespace=> $namespacePath) $documentRoot
Определения autoload.php:27
IsModuleInstalled($module_id)
Определения tools.php:5301
$name
Определения menu_edit.php:35
Определения aliases.php:105
Определения buffer.php:3
$payment
Определения payment.php:14
$order
Определения payment.php:8
$paymentCollection
Определения payment.php:11
$service
Определения payment.php:18
$psTitle
Определения .description.php:3
$settings
Определения product_settings.php:43
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$dir
Определения quickway.php:303
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$items
Определения template.php:224
else $a
Определения template.php:137
$dbRes
Определения yandex_detail.php:168