אינטגרציית Bitrix ל-MoeDelo: אוטומציית החלפת הזמנות

העברת הזמנות ידנית מ-Bitrix ל-MoeDelo אורכת שעות ומובילה לשגיאות במסמכים. אנו הופכים את התהליך לאוטומטי על ידי הגדרת סנכרון של הזמנות, צדדים שכנגד ותשלומים. הצוות שלנו מספק אינטגרציה מלאה, החל מבדיקת מערכות ועד תמיכה שוטפת, כך שאתם עובדים ללא שגרה ועם הנהלת חשבונות אמינה.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
אינטגרציית Bitrix ל-MoeDelo: אוטומציית החלפת הזמנות
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

תארו לעצמכם: כל הזמנה מחנות ה-Bitrix שלכם צריכה להיכנס ידנית ל-MoeDelo — כמכירה, יצירת צד קשור, הוצאת חשבונית. זה לוקח 10–15 דקות לכל הזמנה. עם 50 הזמנות ביום, מדובר בעד 12 שעות של עבודה שגרתית בחודש. שגיאות בפרטים, מע"מ לא נכון, תשלומים שאבדו — תוצאות אופייניות. אנו הופכים תהליך זה לאוטומטי במלואו, מקצרים את זמן העיבוד ב-80% וממזערים שגיאות. עבור חנות עם 200 הזמנות בחודש, זה חוסך כ-$300–$500 בחודש בעבודת יד. הניסיון שלנו באינטגרציות MoeDelo כולל מעל 15 פרויקטים, ומבטיח סנכרון יציב 24/7. נבחן את הפרויקט שלכם — פשוט צרו קשר.

אילו בעיות אנו פותרים

הזנת צד קשור ידנית

כל לקוח חדש דורש יצירת כרטיס ב-MoeDelo: ח"פ, שם, כתובת. עם הזמנות חוזרות, כפילויות נוצרות בקלות. האלגוריתם שלנו מחפש אוטומטית צד קשור לפי אימייל או ח"פ ויוצר אחד רק אם לא נמצא.

שגיאות בחישוב מע"מ

שיעורי המע"מ משתנים: 0%, 10%, 20%. העברה ידנית מובילה לטעויות, הגורמות לפערים מול רשויות המס. האינטגרציה לוקחת את השיעור ממאפייני המוצר ב-Bitrix — ומבטלת שגיאות אנוש.

תשלומים שאבדו

הזמנה ששולמה לא תמיד משתקפת ב-MoeDelo כקבלה. אנו מתחברים לאירוע OnSalePaymentPaid — התשלום נרשם אוטומטית כתשלום נכנס. זה חשוב במיוחד עבור 54-FZ וסגירת משמרת.

איך לשלב את Bitrix עם MoeDelo?

אנו משתמשים ב-API הציבורי של MoeDelo עם אימות מבוסס טוקן. בצד Bitrix, אנו כותבים קליינט PHP (8.1+), משתמשים ב-infoblocks 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 ללא פרטים), אנו יוצרים צד קשור מסוג 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) ?? []; } } :

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'),
    ]);
}

אוטומציה באמצעות אירועים

אירוע Bitrix פעולה ב-MoeDelo
הזמנה נוצרה (סטטוס "חדשה") יצירת צד קשור + מסמך מכירה
ההזמנה שולמה רישום תשלום נכנס
ההזמנה בוטלה יצירת מסמך החזרה
הזמנה "ממתינה לתשלום" הוצאת חשבונית (עבור B2B)

למה אוטומציה עדיפה על הזנה ידנית?

אוטומציה עולה על הזנה ידנית: כל הזמנה מעובדת תוך 5 שניות במקום 10–15 דקות — מהירה פי 180. שגיאות בהזנה ידנית מגיעות ל-5%, בעוד שאוטומציה מניבה פחות מ-0.1% — פי 50 פחות שגיאות. כפילויות צדדים קשורים מבוטלות, מסמכים תמיד עומדים בדרישות רשויות המס. האינטגרציה מחזירה את ההשקעה תוך 2–3 חודשים על ידי הפחתת עבודת יד — חיסכון אמיתי.

פרמטר הזנה ידנית האינטגרציה שלנו
זמן לכל הזמנה 10–15 דקות 3–5 שניות
שגיאות עד 5% < 0.1%
כפילויות צדדים קשורים נפוצות מבוטלות
פעילות 24/7 לא כן

מה כלול

אנו מספקים חבילה מלאה:

  • קליינט PHP ל-API של MoeDelo
  • חיפוש ויצירת צדדים קשורים (יחידים וחברות)
  • יצירת מסמכי מכירה וחשבוניות
  • רישום תשלומים והחזרות
  • טבלת סנכרון, טיפול בשגיאות ולוגיקת ניסיון חוזר
  • תיעוד אינטגרציה והדרכת צוות
  • 3 חודשי תמיכה באחריות

מה מסונכרן אוטומטית?

מעבר להזמנות, אנו מסנכרנים צדדים קשורים (עם זיהוי כפילויות), פריטי מוצר (אופציונלי), דוחות התאמה (לפי בקשה), החזרות והתאמות. כל הנתונים עוברים ולידציה לפני שליחה ל-MoeDelo — ומבטלים שגיאות פורמט.

תהליך העבודה

  1. ביקורת — ניתוח תצורת Bitrix הנוכחית, סכימת הזמנות, דרישות מסמכים.
  2. עיצוב — הסכמה על מיפוי שדות ותרחישי שגיאה.
  3. יישום — כתיבת קוד, הגדרת אירועים, בדיקות על סביבת staging.
  4. בדיקות — הרצת 100+ הזמנות, בדיקת כל התרחישים (תשלום, ביטול, החזרה).
  5. פריסה — העלאה לסביבת production, ניטור למשך שבועיים, הדרכת צוות.

טעויות נפוצות באינטגרציה עצמית

פורמט תאריך לא נכון (ה-API מקבל רק individual), חוסר בלוגיקת ניסיון חוזר על timeouts (הזמנות אובדות), התעלמות ממגבלות קצב API (30 בקשות לדקה — נדרשת תור). אנו מתחשבים בכל הפרטים הללו, ומבטיחים אינטגרציה יציבה. כדי להתמודד עם מגבלות קצב API, אנו מיישמים מערכת תורים עם backoff אקספוננציאלי. בקשות שנכשלו מנוסות מחדש עד 5 פעמים עם עיכובים הולכים וגדלים, ומבטיחים שאף הזמנה לא תיאבד.

לוח זמנים: אינטגרציה בסיסית מ-3 שבועות, מורחבת עד 8 שבועות. אנו מעריכים את הפרויקט שלכם לפי המפרט הטכני שלכם. צרו קשר כדי לדון בפרטים. קבלו ייעוץ — נעזור לכם לבחור את היקף העבודה האופטימלי.

ייצוא ההזמנות האוטומטי שלנו ל-MoeDelo מבטיח סנכרון צדדים קשורים ואוטומציה של חשבוניות. אנו מספקים אינטגרציית 1C-Bitrix MoeDelo עבור חנויות מקוונות, המאפשרת ייצוא מסמכים חלק ל-MoeDelo.