• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/cashbox/cashboxyookassa.php
  • Класс: BitrixSaleCashboxCashboxYooKassa
  • Вызов: CashboxYooKassa::buildCheckQuery
public function buildCheckQuery(Check $check): array
{
	$checkParamsResult = $this->checkParams($check);
	if (!$checkParamsResult->isSuccess())
	{
		return [];
	}

	$payment = CheckManager::getPaymentByCheck($check);
	if (!$payment)
	{
		return [];
	}

	$checkData = $check->getDataForCheck();
	$fields = [
		'customer' => [],
		'items' => [],
		'tax_system_code' => $this->getValueFromSettings('TAX', 'SNO'),
	];

	if (isset($checkData['client_email']))
	{
		$fields['customer']['email'] = $checkData['client_email'];
	}

	if (isset($checkData['client_phone']))
	{
		$phoneParser = PhoneNumberParser::getInstance();
		if ($phoneParser)
		{
			$phoneNumber = $phoneParser->parse($checkData['client_phone']);
			if ($phoneNumber->isValid())
			{
				$fields['customer']['phone'] = $phoneNumber->format(PhoneNumberFormat::E164);
			}
		}
	}

	$paymentModeMap = $this->getCheckTypeMap();
	$paymentMode = $paymentModeMap[$check::getType()];
	$paymentObjectMap = $this->getPaymentObjectMap();

	foreach ($checkData['items'] as $item)
	{
		$vat = $this->getValueFromSettings('VAT', $item['vat']);
		$vat = $vat ?? $this->getValueFromSettings('VAT', 'NOT_VAT');

		$measure = $this->getValueFromSettings('MEASURE', $item['measure_code']);
		$measure = $measure ?? $this->getValueFromSettings('MEASURE', 'DEFAULT');

		$receiptItem = [
			'description' => mb_substr($item['name'], 0, self::MAX_NAME_LENGTH),
			'amount' => [
				'value' => (string)SalePriceMaths::roundPrecision($item['price']),
				'currency' => (string)$item['currency'],
			],
			'vat_code' => (int)$vat,
			'quantity' => (string)$item['quantity'],
			'measure' => (string)$measure,
			'payment_subject' => $paymentObjectMap[$item['payment_object']],
			'payment_mode' => $paymentMode,
		];

		if (!empty($item['marking_code']))
		{
			$receiptItem['mark_code_info'] = $this->buildPositionMarkCode($item);
		}

		$fields['items'][] = $receiptItem;
	}

	if ($this->needDataForSecondCheck($payment))
	{
		$fields['send'] = true;
		$fields['type'] = self::CHECK_TYPE_PAYMENT;
		$fields['payment_id'] = $payment->getField('PS_INVOICE_ID');
		$fields['settlements'] = [];

		foreach ($checkData['payments'] as $paymentItem)
		{
			$fields['settlements'][] = [
				'type' => self::SETTLEMENT_TYPE_PREPAYMENT,
				'amount' => [
					'value' => (string)SalePriceMaths::roundPrecision($paymentItem['sum']),
					'currency' => (string)$paymentItem['currency'],
				],
			];
		}
	}

	return $fields;
}