תארו לעצמכם: כל הזמנה מחנות ה-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 — ומבטלים שגיאות פורמט.
תהליך העבודה
- ביקורת — ניתוח תצורת Bitrix הנוכחית, סכימת הזמנות, דרישות מסמכים.
- עיצוב — הסכמה על מיפוי שדות ותרחישי שגיאה.
- יישום — כתיבת קוד, הגדרת אירועים, בדיקות על סביבת staging.
- בדיקות — הרצת 100+ הזמנות, בדיקת כל התרחישים (תשלום, ביטול, החזרה).
- פריסה — העלאה לסביבת production, ניטור למשך שבועיים, הדרכת צוות.
טעויות נפוצות באינטגרציה עצמית
פורמט תאריך לא נכון (ה-API מקבל רק individual), חוסר בלוגיקת ניסיון חוזר על timeouts (הזמנות אובדות), התעלמות ממגבלות קצב API (30 בקשות לדקה — נדרשת תור). אנו מתחשבים בכל הפרטים הללו, ומבטיחים אינטגרציה יציבה. כדי להתמודד עם מגבלות קצב API, אנו מיישמים מערכת תורים עם backoff אקספוננציאלי. בקשות שנכשלו מנוסות מחדש עד 5 פעמים עם עיכובים הולכים וגדלים, ומבטיחים שאף הזמנה לא תיאבד.
לוח זמנים: אינטגרציה בסיסית מ-3 שבועות, מורחבת עד 8 שבועות. אנו מעריכים את הפרויקט שלכם לפי המפרט הטכני שלכם. צרו קשר כדי לדון בפרטים. קבלו ייעוץ — נעזור לכם לבחור את היקף העבודה האופטימלי.
ייצוא ההזמנות האוטומטי שלנו ל-MoeDelo מבטיח סנכרון צדדים קשורים ואוטומציה של חשבוניות. אנו מספקים אינטגרציית 1C-Bitrix MoeDelo עבור חנויות מקוונות, המאפשרת ייצוא מסמכים חלק ל-MoeDelo.

