Інтеграція Бітрікс з МоєДіло: автоматичний обмін замовленнями

Ручне перенесення замовлень з Бітрікс у МоєДіло забирає години та призводить до помилок у документах. Ми автоматизуємо цей обмін, налаштовуючи синхронізацію замовлень, контрагентів і платежів. Наша команда реалізує інтеграцію під ключ — від аудиту до підтримки, щоб ви працювали без рутини та з надійним обліком.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Інтеграція Бітрікс з МоєДіло: автоматичний обмін замовленнями
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1532
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1045
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    820
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    915
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    853
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1208

Уявіть: кожне замовлення з інтернет-магазину на Бітрікс потрібно вручну ввести в МоєДіло — як реалізацію, створити контрагента, виставити рахунок. На це йде 10–15 хвилин на замовлення. При 50 замовленнях на день — до 12 годин рутини на місяць. Помилки в реквізитах, невірний ПДВ, забуті платежі — типові наслідки. Ми автоматизуємо цей процес під ключ, скорочуючи час обробки на 80% і зводячи помилки до мінімуму. Наш досвід інтеграцій з МоєДіло — понад 15 проектів, гарантуємо стабільну синхронізацію 24/7. Оцінимо ваш проект — напишіть нам.

Які проблеми вирішуємо

Ручне введення контрагентів

Кожен новий клієнт — створення картки в МоєДіло: ІПН, назва, адреса. При повторних замовленнях легко створити дублікат. Наш алгоритм автоматично шукає контрагента за email або ІПН і створює тільки при відсутності.

Помилки в розрахунку ПДВ

Ставки ПДВ різняться: 0%, 10%, 20%. При ручному перенесенні легко помилитися, що веде до розбіжностей з податковою. Інтеграція бере ставку з властивостей товару в Бітрікс — виключаючи людський фактор.

Втрата платежів

Оплачене замовлення не завжди відображається в МоєДіло як надходження. Ми вішаємо обробник на подію OnSalePaymentPaid — оплата автоматично фіксується як вхідний платіж. Це особливо важливо для 54-ФЗ та закриття змін.

Як інтегрувати Бітрікс з МоєДіло?

Ми використовуємо публічний API МоєДіло з авторизацією по токену. На стороні Бітрікс пишемо PHP-клієнт на 8.1+, використовуємо інфоблоки v2.0 та ORM. Кожне замовлення проходить ланцюжок: контрагент → документ реалізації → рахунок (опціонально) → платіж. Для повернень створюємо документ повернення.

Ось приклад створення контрагента (фрагмент коду):

class MoeDeloClient {
    private string $apiKey;
    private string $baseUrl = 'https://api.moedelo.org';

    public function request(string $method, string $endpoint, array $body = [], array $query = []): array {
        $url = $this->baseUrl . $endpoint;
        if ($query) {
            $url .= '?' . http_build_query($query);
        }

        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => $method,
            CURLOPT_HTTPHEADER => [
                'Content-Type: application/json',
                "X-DM-Auth-Token: {$this->apiKey}",
            ],
            CURLOPT_POSTFIELDS => in_array($method, ['POST', 'PUT', 'PATCH']) ? json_encode($body) : null,
        ]);

        $json = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode >= 400) {
            throw new \RuntimeException("МоєДіло API {$httpCode}: {$json}");
        }

        return json_decode($json, true) ?? [];
    }
}

Контрагенти

При фізособі (B2C-замовлення без реквізитів) створюємо контрагента з типом individual:

public function findOrCreateContragent(\Bitrix\Sale\Order $order): int
{
    $props = $order->getPropertyCollection();
    $email = $props->getUserEmail();
    $name = $props->getBuyerName();
    $phone = $props->getPhone();
    $inn = $props->getItemByOrderPropertyCode('INN')?->getValue();

    // Пошук за email
    $search = $this->client->request('GET', '/api/v1/counteragents', [], ['search' => $email]);
    foreach ($search['data'] ?? [] as $ca) {
        if ($ca['email'] === $email) {
            return $ca['id'];
        }
    }

    // Створення
    $isLegal = !empty($inn);
    $payload = $isLegal ? [
        'type' => 'legal_entity',
        'name' => $props->getItemByOrderPropertyCode('COMPANY')->getValue(),
        'inn' => $inn,
        'kpp' => $props->getItemByOrderPropertyCode('KPP')?->getValue() ?? '',
        'email' => $email,
        'phone' => $phone,
    ] : [
        'type' => 'individual',
        'fullname' => $name,
        'email' => $email,
        'phone' => $phone,
    ];

    $result = $this->client->request('POST', '/api/v1/counteragents', $payload);
    return $result['id'];
}

Документ реалізації (рахунок-фактура / накладна)

public function createSaleDocument(\Bitrix\Sale\Order $order, int $contragentId): int {
    $items = [];
    foreach ($order->getBasket() as $basketItem) {
        // ПДВ з властивостей товару
        $vatRate = $this->resolveVatRate($basketItem->getProductId());
        $vatValue = round($basketItem->getPrice() * $basketItem->getQuantity() * ($vatRate / (100 + $vatRate)), 2);
        $items[] = [
            'name' => $basketItem->getField('NAME'),
            'quantity' => $basketItem->getQuantity(),
            'unit' => 'шт.',
            'price' => $basketItem->getPrice(),
            'total' => round($basketItem->getPrice() * $basketItem->getQuantity(), 2),
            'vat_rate' => $vatRate, // 0, 10, 20
            'vat_value' => $vatValue,
        ];
    }
    // Знижка на рівні замовлення
    $discount = $order->getField('PRICE_DELIVERY') > 0 ? [
        'name' => 'Доставка',
        'amount' => $order->getField('PRICE_DELIVERY'),
    ] : null;
    $doc = $this->client->request('POST', '/api/v1/documents/sale', [
        'date' => date('Y-m-d'),
        'number' => $order->getField('ACCOUNT_NUMBER'),
        'counteragent_id' => $contragentId,
        'items' => $items,
        'shipping' => $discount,
        'comment' => 'Замовлення з сайту #' . $order->getField('ACCOUNT_NUMBER'),
    ]);
    return $doc['id'];
}

Рахунок на оплату

Для B2B-замовлень після створення документа реалізації формуємо рахунок:

public function createInvoice(int $documentId, \Bitrix\Sale\Order $order): string {
    $invoice = $this->client->request('POST', '/api/v1/invoices', [
        'document_id' => $documentId,
        'due_date' => date('Y-m-d', strtotime('+5 days')),
    ]);

    // Отримуємо PDF рахунку та прикріплюємо до замовлення в Бітрікс
    $pdfUrl = $invoice['pdf_url'] ?? '';
    if ($pdfUrl) {
        $this->attachInvoicePdfToOrder($order->getId(), $pdfUrl);
    }

    return $invoice['number'] ?? '';
}

Вхідні платежі

AddEventHandler('sale', 'OnSalePaymentPaid', function(\Bitrix\Sale\Payment $payment) {
    $order = $payment->getOrder();
    $docId = MoeDeloSyncTable::getDocumentId($order->getId());
    if (!$docId) return;
    (new MoeDeloSyncService())->registerPayment($docId, $payment);
});

public function registerPayment(int $docId, \Bitrix\Sale\Payment $payment): void {
    $this->client->request('POST', '/api/v1/payments/income', [
        'date' => date('Y-m-d'),
        'amount' => $payment->getSum(),
        'document_id' => $docId,
        'type' => $payment->getPaySystem()->getField('CODE') === 'cash' ? 'cash' : 'bank',
        'comment' => 'Оплата замовлення #' . $payment->getOrder()->getField('ACCOUNT_NUMBER'),
    ]);
}

Автоматизація через події

Подія Бітрікс Дія в МоєДіло
Замовлення створено (статус «Новий») Створити контрагента + документ реалізації
Замовлення оплачено Зафіксувати вхідний платіж
Замовлення скасовано Створити документ повернення
Замовлення «Очікує оплату» Виставити рахунок (для B2B)

Чому автоматизація краща за ручне введення?

Автоматизація краща за ручне введення: кожне замовлення обробляється за 5 секунд замість 10-15 хвилин — у 180 разів швидше. Помилки при ручному введенні досягають 5%, а при автоматизації — менше 0.1%. Виключено дублі контрагентів, документи завжди відповідають вимогам ФНС. Інтеграція окупається за 2–3 місяці за рахунок скорочення ручної праці — ви отримуєте реальну економію.

Параметр Ручне введення Наша інтеграція
Час на замовлення 10–15 хвилин 3–5 секунд
Помилки до 5% < 0.1%
Дублі контрагентів часті виключені
Робота 24/7 ні так

Що входить в роботу

Ми готуємо повний пакет:

  • PHP-клієнт МоєДіло API
  • Пошук та створення контрагентів (фізособи та юрособи)
  • Створення документів реалізації та рахунків
  • Реєстрація платежів та повернень
  • Таблиця синхронізації, обробка помилок та повторні спроби
  • Документація з інтеграції та навчання вашого персоналу
  • 3 місяці гарантійної підтримки

Що синхронізується автоматично?

Окрім замовлень, ми синхронізуємо контрагентів (з пошуком дублів), номенклатуру товарів (опціонально), акти звірки (за запитом), повернення та коригування. Всі дані проходять валідацію перед відправкою в МоєДіло — це виключає помилки формату.

Процес роботи

  1. Аудит — аналізуємо поточну конфігурацію Бітрікс, схему замовлень, вимоги до документів.
  2. Проектування — погоджуємо маппінг полів, сценарії помилок.
  3. Реалізація — пишемо код, налаштовуємо події, тестуємо на тестовому полігоні.
  4. Тестування — прогоняємо 100+ замовлень, перевіряємо всі сценарії (оплата, скасування, повернення).
  5. Деплой — викочуємо на бій, моніторимо 2 тижні, навчаємо співробітників.

Типові помилки при самостійній інтеграції

Невірний формат дати (API приймає лише YYYY-MM-DD), відсутність повторних спроб при тайм-аутах (замовлення губляться), ігнорування лімітів API (30 запитів на хвилину — потрібна черга). Ми враховуємо всі ці нюанси, тому інтеграція працює стабільно.

Терміни: базова інтеграція — від 3 тижнів, розширена — до 8 тижнів. Оцінюємо проект за вашим ТЗ. Зв'яжіться з нами, щоб обговорити деталі. Отримайте консультацію — допоможемо обрати оптимальний обсяг робіт.