Server IP : 85.193.89.191 / Your IP : 3.144.255.107 Web Server : Apache System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64 User : bitrix ( 600) PHP Version : 8.1.27 Disable Function : NONE MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/bitrix/www/bitrix/modules/sale/admin/ |
Upload File : |
<?php /** @global CMain $APPLICATION */ use Bitrix\Main\Application; use Bitrix\Main\IO; use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; use Bitrix\Sale\BusinessValue; use Bitrix\Sale\PaySystem\Domain\Verification; use Bitrix\Sale\Services\Base\RestrictionManager; use Bitrix\Sale\Services\PaySystem\Restrictions\Manager; const NO_KEEP_STATISTIC = true; const NO_AGENT_STATISTIC = true; const NO_AGENT_CHECK = true; const NOT_CHECK_PERMISSIONS = true; require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); $instance = Application::getInstance(); $context = $instance->getContext(); $request = $context->getRequest(); $lang = ($request->get('lang') !== null) ? trim($request->get('lang')) : "ru"; $context->setLanguage($lang); Loc::loadMessages(__FILE__); $arResult = array("ERROR" => ""); if (!\Bitrix\Main\Loader::includeModule('sale')) { $arResult["ERROR"] = "Error! Can't include module \"Sale\""; } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/lib/delivery/inputs.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/lib/cashbox/inputs/file.php"); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if($arResult["ERROR"] == '' && $saleModulePermissions >= "W" && check_bitrix_sessid()) { $action = trim((string)$request->get('action')); switch ($action) { case "get_restriction_params_html": Manager::getClassesList(); $className = trim((string)$request->get('className')); $params = $request->get('params'); if (!is_array($params)) { $params = []; } $paySystemId = (int)$request->get('paySystemId'); $sort = (int)($request->get('sort') ?? 100); if (!($className && class_exists($className) && is_subclass_of($className, '\Bitrix\Sale\Services\Base\Restriction'))) { throw new \Bitrix\Main\ArgumentNullException("className"); } /** @var \Bitrix\Sale\Services\Base\Restriction $className */ $paramsStructure = $className::getParamsStructure($paySystemId); $params = $className::prepareParamsValues($params, $paySystemId); $paramsField = "<table>"; if ($className == '\\'.\Bitrix\Sale\Services\PaySystem\Restrictions\Price::class) $paramsField .= '<tr><td colspan=\'2\' style=\'padding-bottom:5px\'><b>'.Loc::getMessage('SALE_PS_PRICE_INFO').'</b></td></tr>'; foreach ($paramsStructure as $name => $param) { $paramsField .= "<tr>". "<td>".($param["LABEL"] <> '' ? $param["LABEL"].": " : "")."</td>". "<td>".\Bitrix\Sale\Internals\Input\Manager::getEditHtml("RESTRICTION[".$name."]", $param, ($params[$name] ?? null))."</td>". "</tr>"; } $paramsField .= '<tr>' . '<td>'.Loc::getMessage("SALE_PS_SORT").': </td>' . '<td><input type="text" name="SORT" value="'.$sort.'"></td>' . '</tr>' ; $arResult["RESTRICTION_HTML"] = $paramsField."</table>"; break; case "save_restriction": Manager::getClassesList(); $className = trim((string)$request->get('className')); $params = $request->get('params'); if (!is_array($params)) { $params = []; } $sort = (int)($request->get('sort') ?? 100); $paySystemId = (int)$request->get('paySystemId'); $restrictionId = (int)$request->get('restrictionId'); if (!($className && class_exists($className) && is_subclass_of($className, '\Bitrix\Sale\Services\Base\Restriction'))) { throw new \Bitrix\Main\ArgumentNullException("className"); } if (!$paySystemId) { throw new \Bitrix\Main\ArgumentNullException('paySystemId'); } /** @var \Bitrix\Sale\Services\Base\Restriction $className */ foreach ($className::getParamsStructure() as $key => $rParams) { $errors = \Bitrix\Sale\Internals\Input\Manager::getError($rParams, $params[$key]); if (!empty($errors)) { $arResult["ERROR"] .= Loc::getMessage('SALE_PS_ERROR_FIELD').': "'.$rParams["LABEL"].'" '.implode("\n", $errors)."\n"; } } if ($arResult["ERROR"] == '') { $fields = array( "SERVICE_ID" => $paySystemId, "SERVICE_TYPE" => RestrictionManager::SERVICE_TYPE_PAYMENT, "SORT" => $sort, "PARAMS" => $params ); /** @var \Bitrix\Sale\Result $res */ $res = $className::save($fields, $restrictionId); if ($res->isSuccess()) { $validateResult = $className::validateRestriction($fields); $arResult["ERROR"] .= implode(".", $validateResult->getErrorMessages()); } else { $arResult["ERROR"] .= implode(".", $res->getErrorMessages()); } $arResult["HTML"] = getRestrictionHtml($paySystemId); } break; case "delete_restriction": Manager::getClassesList(); $restrictionId = (int)$request->get('restrictionId'); $paySystemId = (int)$request->get('paySystemId'); if(!$restrictionId) throw new \Bitrix\Main\ArgumentNullException('restrictionId'); $dbRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getById($restrictionId); if($fields = $dbRes->fetch()) { /** @var \Bitrix\Sale\Result $res */ $res = $fields["CLASS_NAME"]::delete($restrictionId, $paySystemId); if(!$res->isSuccess()) $arResult["ERROR"] .= implode(".", $res->getErrorMessages()); } else { $arResult["ERROR"] .= "Can't find restriction with id: ".$restrictionId; } $arResult["HTML"] = getRestrictionHtml($paySystemId); break; case 'getHandlerDescription': require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/helpers/admin/businessvalue.php'); $handler = $request->get('handler'); $paySystemId = (int)$request->get('paySystemId'); $psMode = $request->get('PS_MODE'); $map = CSalePaySystemAction::getOldToNewHandlersMap(); if (isset($map[$handler])) $handler = $map[$handler]; $path = \Bitrix\Sale\PaySystem\Manager::getPathToHandlerFolder($handler); [$className] = \Bitrix\Sale\PaySystem\Manager::includeHandler($handler); if (class_exists($className)) { $arResult['CLASS_NAME'] = $className; $modeList = $className::getHandlerModeList(); $isOrderHandler = mb_strpos($handler, 'orderdocument') === 0; if ($modeList || $isOrderHandler) { if ($modeList) { if ($psMode === null) { $modeListIds = array_keys($modeList); $psMode = array_shift($modeListIds); unset($modeListIds); } $arResult["PAYMENT_MODE"] = Bitrix\Sale\Internals\Input\Enum::getEditHtml( 'PS_MODE', array( 'OPTIONS' => $modeList, 'ID' => 'PS_MODE', 'ONCHANGE' => "BX.Sale.PaySystem.getHandlerOptions(BX('ACTION_FILE'))", ), $psMode ); } if ($isOrderHandler && Loader::includeModule('crm')) { $arResult["PAYMENT_MODE_TITLE"] = Loc::getMessage('SALE_PS_PS_MODE_DOCUMENT_TITLE'); $componentPath = \CComponentEngine::makeComponentPath('bitrix:documentgenerator.templates'); $componentPath = getLocalPath('components'.$componentPath.'/slider.php'); $uri = new \Bitrix\Main\Web\Uri($componentPath); $params = [ 'PROVIDER' => \Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Order::class, 'MODULE' => 'crm' ]; $arResult['ORDER_DOC_ADD_LINK'] = $uri->addParams($params)->getLocator(); } else { $arResult["PAYMENT_MODE_TITLE"] = Loc::getMessage('SALE_PS_PS_MODE_TITLE'); } } } $data = \Bitrix\Sale\PaySystem\Manager::getHandlerDescription($handler, $psMode); if ($paySystemId <= 0) { $consumerKey = 'PAYSYSTEM_NEW'; BusinessValue::addConsumer($consumerKey, $data); } else { $consumerKey = 'PAYSYSTEM_'.$paySystemId; BusinessValue::changeConsumer($consumerKey, $data); } $businessValueControl = new \Bitrix\Sale\Helpers\Admin\BusinessValueControl('PAYSYSTEM'); $tariff = \Bitrix\Sale\PaySystem\Manager::getTariff($handler); if (!$tariff) $tariff = CSalePaySystemsHelper::getPaySystemTarif($handler, 0, 0); $tariffBlock = ''; if($tariff) { $tariffBlock = '<tr class="heading"><td align="center" colspan="2">'.Loc::getMessage('SALE_PS_TARIFF').'</td></tr>'; $arMultiControlQuery = array(); foreach ($tariff as $fieldId => $arField) { if(!empty($arMultiControlQuery) && (!isset($arField['MCS_ID'])|| !array_key_exists($arField['MCS_ID'], $arMultiControlQuery)) ) { $tariffBlock .= CSaleHelper::getAdminMultilineControl($arMultiControlQuery); $arMultiControlQuery = array(); } $controlHtml = CSaleHelper::getAdminHtml($fieldId, $arField, 'TARIF', 'pay_sys_form'); if($arField["TYPE"] == 'MULTI_CONTROL_STRING') { $arMultiControlQuery[$arField['MCS_ID']]['CONFIG'] = $arField; continue; } elseif(isset($arField['MCS_ID'])) { $arMultiControlQuery[$arField['MCS_ID']]['ITEMS'][] = $controlHtml; continue; } $tariffBlock .= CSaleHelper::wrapAdminHtml($controlHtml, $arField); } if(!empty($arMultiControlQuery)) $tariffBlock .= CSaleHelper::getAdminMultilineControl($arMultiControlQuery); } $arResult["TARIF"] = $tariffBlock; if (IO\File::isFileExists($_SERVER['DOCUMENT_ROOT'].$path.'/.description.php')) { require $_SERVER['DOCUMENT_ROOT'].$path.'/.description.php'; if (isset($psDescription)) // for compatibility { $arResult["DESCRIPTION"] = $psDescription; } elseif (isset($description)) { if (is_array($description)) $arResult["DESCRIPTION"] = (array_key_exists('MAIN', $description)) ? $description['MAIN'] : implode("\n", $description); else $arResult["DESCRIPTION"] = $description; } if ($paySystemId <= 0) { if (isset($data)) $arResult["NAME"] = $arResult["PSA_NAME"] = $data['NAME']; elseif (isset($psTitle)) $arResult["NAME"] = $arResult["PSA_NAME"] = $psTitle; $arResult['SORT'] = 100; if ($psMode) { $fullPath = $handler.'/'.$psMode; if (IO\File::isFileExists($_SERVER['DOCUMENT_ROOT'].'/bitrix/images/sale/sale_payments/'.$fullPath.'.png')) { $arResult['LOGOTIP']['NAME'] = $fullPath.'.png'; $arResult['LOGOTIP']['PATH'] = '/bitrix/images/sale/sale_payments/'.$fullPath.'.png'; } } if (!isset($arResult['LOGOTIP']) && IO\File::isFileExists($_SERVER['DOCUMENT_ROOT'].'/bitrix/images/sale/sale_payments/'.$handler.'.png')) { $arResult['LOGOTIP']['NAME'] = $handler.'.png'; $arResult['LOGOTIP']['PATH'] = '/bitrix/images/sale/sale_payments/'.$handler.'.png'; } } } $entityName = $handler; if ($psMode) { $entityName .= $psMode; } $arResult["DOMAIN_VERIFICATION"]["NEED_VERIFICATION"] = Verification\Manager::needVerification($entityName); if ($arResult["DOMAIN_VERIFICATION"]["NEED_VERIFICATION"]) { $domainVerificationFormUrl = \CComponentEngine::makeComponentPath('bitrix:sale.domain.verification.form'); $domainVerificationFormUrl = getLocalPath('components'.$domainVerificationFormUrl.'/slider.php'); $domainVerificationFormUrl = new \Bitrix\Main\Web\Uri($domainVerificationFormUrl); $domainVerificationFormUrl->addParams([ 'analyticsLabel' => 'paySystemDomainVerification', 'entity' => $entityName, 'manager' => Verification\Manager::class, ]); $arResult["DOMAIN_VERIFICATION"]["FORM_LINK"] = $domainVerificationFormUrl; } $arResult = array_merge($arResult, getPaySystemRobokassaSettingsJsData($className)); ob_start(); $businessValueControl->renderMap(array('CONSUMER_KEY' => $consumerKey)); $arResult["BUS_VAL"] = ob_get_contents(); ob_end_clean(); break; case 'checkHttps': $params = array( 'waitResponse' => 10 ); $http = new \Bitrix\Main\Web\HttpClient(); $response = @$http->get('https://'.$_SERVER['HTTP_HOST'].'/bitrix/tools/sale_ps_result.php'); if ($response === false || $http->getStatus() != 200) { $arResult['CHECK_STATUS'] = 'ERROR'; $arResult['CHECK_MESSAGE'] = join('\n', $http->getError()); } else { $arResult['CHECK_STATUS'] = 'OK'; $arResult['CHECK_MESSAGE'] = Loc::getMessage('SALE_PS_SSL_CHECK_MESSAGE'); } break; case 'getPaySystemSettings': $handler = $request->get('handler'); $path = \Bitrix\Sale\PaySystem\Manager::getPathToHandlerFolder($handler); [$className] = \Bitrix\Sale\PaySystem\Manager::includeHandler($handler); if (class_exists($className)) { $arResult = getPaySystemRobokassaSettingsJsData($className); } break; default: $arResult["ERROR"] = "Error! Wrong action!"; break; } } else { if ($request->get('mode') == 'settings') getRestrictionHtml($request->get('ID')); elseif($arResult["ERROR"] == '') $arResult["ERROR"] = "Error! Access denied"; } if($arResult["ERROR"] <> '') $arResult["RESULT"] = "ERROR"; else $arResult["RESULT"] = "OK"; $APPLICATION->RestartBuffer(); header('Content-Type: application/json; charset=UTF-8'); try { $body = \Bitrix\Main\Web\Json::encode($arResult); } catch (\Bitrix\Main\ArgumentException $e) { $body = json_encode([ 'RESULT' => 'ERROR', 'ERROR' => $e->getMessage(), ]); } \CMain::FinalActions($body); function getRestrictionHtml($paySystemId) { if(intval($paySystemId) <= 0) throw new \Bitrix\Main\ArgumentNullException("paySystemId"); $_REQUEST['table_id'] = 'table_delivery_restrictions'; $_REQUEST['admin_history'] = 'Y'; $_GET['ID'] = $paySystemId; ob_start(); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/admin/pay_system_restrictions_list.php"); $restrictionsHtml = ob_get_contents(); ob_end_clean(); return $restrictionsHtml; } function getPaySystemRobokassaSettingsJsData(string $className): array { $handler = \Bitrix\Sale\PaySystem\Manager::getFolderFromClassName($className); $service = new \Bitrix\Sale\PaySystem\Service([ 'ACTION_FILE' => $handler, ]); $arResult = [ 'PAY_SYSTEM_ROBOKASSA_SETTINGS' => [ 'NEED_SETTINGS' => strcasecmp($className, \Sale\Handlers\PaySystem\RoboxchangeHandler::class) === 0, ], ]; if ($arResult['PAY_SYSTEM_ROBOKASSA_SETTINGS']['NEED_SETTINGS']) { $shopSettings = new \Bitrix\Sale\PaySystem\Robokassa\ShopSettings(); $arResult['PAY_SYSTEM_ROBOKASSA_SETTINGS']['IS_ONLY_COMMON_SETTINGS_EXISTS'] = $shopSettings->isOnlyCommonSettingsExists(); $arResult['PAY_SYSTEM_ROBOKASSA_SETTINGS']['IS_SETTINGS_EXISTS'] = $shopSettings->isAnySettingsExists(); $arResult['PAY_SYSTEM_ROBOKASSA_SETTINGS']['HANDLER_NAME'] = $service->getHandlerDescription()['NAME'] ?? ''; $settingsFormUrl = \CComponentEngine::makeComponentPath('bitrix:sale.paysystem.settings.robokassa'); $settingsFormUrl = getLocalPath('components' . $settingsFormUrl . '/slider.php'); $settingsFormUrl = new \Bitrix\Main\Web\Uri($settingsFormUrl); $settingsFormUrl->addParams([ 'analyticsLabel' => 'paySystemSettings', ]); $arResult['PAY_SYSTEM_ROBOKASSA_SETTINGS']['FORM_LINK'] = $settingsFormUrl; ob_start(); global $APPLICATION; $APPLICATION->IncludeComponent( 'bitrix:sale.paysystem.registration.robokassa', '.default' ); $arResult['PAY_SYSTEM_ROBOKASSA_SETTINGS']['REGISTER_LINK'] = ob_get_clean(); } return $arResult; }