Налаштування безготівкової оплати для юридичних осіб на 1С-Бітрікс
Інтернет-магазини, що працюють з B2B-клієнтами, регулярно стикаються з однією ситуацією: юрособа хоче оплатити за банківськими реквізитами, з ПДВ, з договором і закривальними документами. Стандартний модуль sale Бітрікс частково це підтримує (тип оплати «Банківський переказ»), але «з коробки» не вміє генерувати рахунок у PDF, не визначає реквізити за ІПН, не веде облік оплат. Усе це допрацьовується.
Тип оплати «Банківський переказ»
У Бітрікс безготівкова оплата реалізується як платіжна система з обробником Bitrix\Sale\PaySystem\BaseServiceHandler без переходу на зовнішній шлюз:
// .description.php платіжного обробника
$HANDLER_NAME = 'Банківський переказ для юридичних осіб';
$HANDLER_CODE = 'bank_transfer_b2b';
// При замовленні — покупець бачить реквізити, а не форму картки
// Оплата позначається як "очікує оплати" до ручного підтвердження менеджером
Форма для юридичних осіб при оформленні
При виборі «Юридична особа» у формі замовлення — показуємо додаткові поля:
// Додаткові властивості замовлення для юрособи
$arOrderProps = [
'INN' => ['NAME' => 'ІПН', 'TYPE' => 'STRING', 'REQUIRED' => 'Y'],
'KPP' => ['NAME' => 'КПП', 'TYPE' => 'STRING'],
'COMPANY_NAME' => ['NAME' => 'Найменування організації', 'TYPE' => 'STRING', 'REQUIRED' => 'Y'],
'LEGAL_ADDRESS' => ['NAME' => 'Юридична адреса', 'TYPE' => 'STRING'],
'DIRECTOR_NAME' => ['NAME' => 'ПІБ керівника', 'TYPE' => 'STRING'],
'ACCOUNTANT' => ['NAME' => 'ПІБ бухгалтера', 'TYPE' => 'STRING'],
];
Автозаповнення за ІПН
// DADATA API — автозаповнення реквізитів за ІПН
document.getElementById('inn-field').addEventListener('blur', async function() {
const inn = this.value;
if (inn.length < 10) return;
const res = await fetch('https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party', {
method: 'POST',
headers: {
'Authorization': 'Token YOUR_DADATA_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ query: inn }),
});
const data = await res.json();
const company = data.suggestions?.[0]?.data;
if (company) {
document.getElementById('company-name').value = company.name?.short_with_opf || '';
document.getElementById('kpp').value = company.kpp || '';
document.getElementById('legal-address').value = company.address?.value || '';
}
});
Генерація рахунку у PDF
// Генерація рахунку через mPDF або TCPDF
use Mpdf\Mpdf;
class InvoiceGenerator
{
public function generate(\Bitrix\Sale\Order $order): string
{
$mpdf = new Mpdf(['format' => 'A4']);
$mpdf->SetFont('dejavusans'); // підтримка кирилиці
$html = $this->renderTemplate($order, [
'invoice_number' => 'РХ-' . str_pad($order->getId(), 6, '0', STR_PAD_LEFT),
'invoice_date' => date('d.m.Y'),
'seller' => $this->getSellerDetails(),
'buyer' => $this->getBuyerDetails($order),
'items' => $this->getOrderItems($order),
'total' => $order->getPrice(),
'vat_amount' => $this->calculateVat($order),
]);
$mpdf->WriteHTML($html);
$pdfPath = '/upload/invoices/invoice_' . $order->getId() . '.pdf';
$mpdf->Output($_SERVER['DOCUMENT_ROOT'] . $pdfPath, 'F');
return $pdfPath;
}
}
Підтвердження оплати менеджером
Менеджер отримує повідомлення про замовлення з типом «Банківський переказ», після надходження коштів на розрахунковий рахунок вручну позначає оплату:
// Адміністративна сторінка або CRM-інтеграція
// Менеджер натискає «Підтвердити оплату»
$order = \Bitrix\Sale\Order::load($orderId);
foreach ($order->getPaymentCollection() as $payment) {
if (!$payment->isPaid()) {
$payment->setPaid('Y');
$payment->setField('PS_STATUS_MESSAGE', 'Оплату підтверджено менеджером ' . $currentUserName);
$payment->save();
}
}
$order->save();
Для автоматизації — інтеграція з банком через API (Сбер, Тінькофф Бізнес, Точка) дозволяє отримувати повідомлення про надходження і автоматично зіставляти їх із замовленнями за номером рахунку в призначенні платежу.
Терміни
| Завдання | Термін |
|---|---|
| Форма для юрособи + автозаповнення за ІПН | 1 день |
| Генерація рахунку PDF | 1–2 дні |
| Ручне підтвердження оплати в Admin | 0.5 дня |
| Автоматичне зіставлення через банк API | 2–3 дні |







