• Модуль: crmmobile
  • Путь к файлу: ~/bitrix/modules/crmmobile/lib/Controller/Action/Terminal/CreatePaymentAction.php
  • Класс: BitrixCrmMobileControllerActionTerminalCreatePaymentAction
  • Вызов: CreatePaymentAction::run
public function run(
	float $sum,
	string $currency,
	string $phoneNumber = null,
	?array $client = null,
	?string $clientName = null
)
{
	$order = $this->createOrder($currency);
	$this->setTerminalPlatform($order);

	$product = $this->prepareBasketProduct($sum, $currency);
	$basket = $this->createBasket($product);
	$setBasketResult = $order->setBasket($basket);
	if (!$setBasketResult->isSuccess())
	{
		$this->addErrors($setBasketResult->getErrors());
		return null;
	}

	if ($phoneNumber)
	{
		$this->setProperties($order, $phoneNumber);
	}

	$payment = $this->createPayment($order);

	$setContactCompanyResult = null;
	if ($client)
	{
		$setContactCompanyResult = $this->setContactCompany($order, $client);
	}
	elseif ($clientName || $phoneNumber)
	{
		$contactCompanyResult = $this->createContactCompany($phoneNumber, $clientName);
		if ($contactCompanyResult->isSuccess())
		{
			$setContactCompanyResult = $this->setContactCompany(
				$order,
				[
					'entityTypeId' => CCrmOwnerType::Contact,
					'id' => $contactCompanyResult->getId()
				]
			);
		}
		else
		{
			$this->addErrors($contactCompanyResult->getErrors());
			return null;
		}
	}

	if ($setContactCompanyResult && !$setContactCompanyResult->isSuccess())
	{
		$this->addErrors($setContactCompanyResult->getErrors());
		return null;
	}

	$hasMeaningfulFields = $order->hasMeaningfulField();
	$finalActionResult = $order->doFinalAction($hasMeaningfulFields);
	if (!$finalActionResult->isSuccess())
	{
		$this->addErrors($finalActionResult->getErrors());
		return null;
	}

	$result = $order->save();
	if (!$result->isSuccess())
	{
		$this->addErrors($result->getErrors());
		return null;
	}

	return [
		'payment' => (new GetPaymentQuery($payment->getId()))->execute(),
	];
}