• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/controller/action/paysystem/addpaysystemaction.php
  • Класс: BitrixSaleControllerActionPaySystemAddPaySystemAction
  • Вызов: AddPaySystemAction::createPaySystem
private function createPaySystem(array $fields): SaleResult
{
	$result = new SaleResult();

	$name = $fields['NAME'] ?? '';
	if (empty($name))
	{
		$name = $this->getDefaultPaySystemName($fields['ACTION_FILE'], $fields['PS_MODE'] ?? null);
	}

	$actionFile = $fields['ACTION_FILE'];
	$psMode = $fields['PS_MODE'] ?? '';

	$paySystemParams = [
		'NAME' => $name,
		'PSA_NAME' => $name,
		'ACTION_FILE' => $actionFile,
		'PS_MODE' => $psMode,
		'NEW_WINDOW' => $fields['NEW_WINDOW'] ?: 'N',
		'ACTIVE' => $fields['ACTIVE'] ?: 'Y',
		'DESCRIPTION' => $fields['DESCRIPTION'] ?? '',
		'XML_ID' => $fields['XML_ID'] ?? SalePaySystemManager::generateXmlId(),
		'ENTITY_REGISTRY_TYPE' => $fields['ENTITY_REGISTRY_TYPE'] ?? SaleRegistry::REGISTRY_TYPE_ORDER
	];

	if (isset($fields['ENTITY_REGISTRY_TYPE']))
	{
		$paySystemParams['ENTITY_REGISTRY_TYPE'] = $fields['ENTITY_REGISTRY_TYPE'];
	}

	if (isset($fields['LOGOTYPE']))
	{
		$paySystemParams['LOGOTIP'] = self::saveFile($fields['LOGOTYPE']);
	}
	else
	{
		$documentRoot = MainApplication::getDocumentRoot();

		if ($psMode)
		{
			$image = '/bitrix/images/sale/sale_payments/' . $actionFile . '/' . $psMode . '.png';
			if (MainIOFile::isFileExists($documentRoot . $image))
			{
				$paySystemParams['LOGOTIP'] = CFile::MakeFileArray($image);
			}
		}

		if (!isset($paySystemParams['LOGOTIP']))
		{
			$image = '/bitrix/images/sale/sale_payments/' . $actionFile . '.png';
			if (MainIOFile::isFileExists($documentRoot . $image))
			{
				$paySystemParams['LOGOTIP'] = CFile::MakeFileArray($image);
			}
		}

		if (isset($paySystemParams['LOGOTIP']))
		{
			$paySystemParams['LOGOTIP']['MODULE_ID'] = 'sale';
			CFile::SaveForDB($paySystemParams, 'LOGOTIP', 'sale/paysystem/logotip');
		}
	}

	$addResult = SalePaySystemManager::add($paySystemParams);
	if ($addResult->isSuccess())
	{
		$id = $addResult->getId();
		SalePaySystemManager::update(
			$id,
			[
				'PARAMS' => serialize(
					[
						'BX_PAY_SYSTEM_ID' => $id,
					]
				),
				'PAY_SYSTEM_ID' => $id,
			]
		);

		$personTypeId = $fields['PERSON_TYPE_ID'] ?? 0;

		if (isset($fields['SETTINGS']) && is_array($fields['SETTINGS']))
		{
			foreach ($fields['SETTINGS'] as $key => $value)
			{
				SaleBusinessValue::setMapping(
					$key,
					SalePaySystemService::PAY_SYSTEM_PREFIX . $id,
					$personTypeId,
					[
						'PROVIDER_KEY' => $value['TYPE'] ?? '',
						'PROVIDER_VALUE' => $value['VALUE'] ?? '',
					]
				);
			}
		}

		if ($personTypeId > 0)
		{
			static::savePersonTypeId($id, $personTypeId);
		}

		$result->setId($id);
	}
	else
	{
		$result->addErrors($addResult->getErrors());
	}

	return $result;
}