• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/paysystem/resthandler.php
  • Класс: BitrixSalePaySystemRestHandler
  • Вызов: RestHandler::initiateCheckoutPay
private function initiateCheckoutPay(Payment $payment, Request $request): ServiceResult
{
	$result = new ServiceResult();

	$settings = $this->getHandlerSettings();

	$actionUri = $settings['CHECKOUT_DATA']['ACTION_URI'] ?? null;
	if (!isset($actionUri))
	{
		$result->addError(new Error(Loc::getMessage('SALE_HANDLERS_REST_HANDLER_ERROR_URI_MISSING')));
		return $result;
	}

	if (!$this->canCheckout($payment, $request))
	{
		$template = $this->getCheckoutFormTemplate($payment);
	}
	else
	{
		$params = $this->getCheckoutPayParams($payment, $request);
		$requestResult = RestHttp::sendRequest($actionUri, $params);
		if (!$requestResult->isSuccess())
		{
			$result->addErrors($requestResult->getErrors());
			return $result;
		}

		$requestData = $requestResult->getData();
		if (empty($requestData['PAYMENT_URL']) || empty($requestData['PAYMENT_ID']))
		{
			if (!empty($requestData['PAYMENT_ERRORS']) && is_array($requestData['PAYMENT_ERRORS']))
			{
				foreach ($requestData['PAYMENT_ERRORS'] as $error)
				{
					$result->addError(new Error($error));
				}

				return $result;
			}

			$result->addError(new Error(Loc::getMessage('SALE_HANDLERS_REST_HANDLER_ERROR_DATA_MISSING')));
			return $result;
		}

		$result->setPsData(['PS_INVOICE_ID' => $requestData['PAYMENT_ID']]);
		$url = $requestData['PAYMENT_URL'];

		$result->setPaymentUrl($url);

		$qrCode = ((new PaySystemBarcodeGenerator())->generate($url));
		if ($qrCode)
		{
			$result->setQr(base64_encode($qrCode));
		}

		$template = $this->getCheckoutPayTemplate($url);
	}

	if ($this->initiateMode === static::STREAM)
	{
		echo $template;
	}
	else
	{
		$result->setTemplate($template);
	}

	return $result;
}