• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/paysystem/service.php
  • Класс: BitrixSalePaySystemService
  • Вызов: Service::initiatePay
public function initiatePay(Payment $payment, Request $request = null, $mode = BaseServiceHandler::STREAM)
{
	$this->callEventOnBeforeInitiatePay($payment);

	$this->handler->setInitiateMode($mode);
	$initResult = $this->handler->initiatePay($payment, $request);

	$psData = $initResult->getPsData();
	if ($psData)
	{
		$setResult = $payment->setFields($psData);
		if ($setResult->isSuccess())
		{
			$order = $payment->getCollection()->getOrder();
			if ($order)
			{
				$saveResult = $order->save();
				if (!$saveResult->isSuccess())
				{
					$initResult->addErrors($saveResult->getErrors());
				}
			}
		}
		else
		{
			$initResult->addErrors($setResult->getErrors());
		}
	}

	if ($initResult->isSuccess())
	{
		$this->callEventOnInitiatePaySuccess($payment);
	}
	else
	{
		$error = implode("n", $initResult->getErrorMessages());
		Logger::addError(get_class($this->handler).". InitiatePay: ".$error);

		(new PaymentMarker($this, $payment))
			->mark($initResult)
			->save()
		;

		$this->callEventOnInitiatePayError($payment, $initResult);
	}

	return $initResult;
}