- Модуль: 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;
}