שילוב 1C-Bitrix עם שירות המשלוחים CDEK

חישוב משלוח שגוי או היעדר אפשרות לבחירת נקודת איסוף גורמים ללקוחות לנטוש את העגלה. אנו משלבים את 1C-Bitrix עם CDEK באמצעות ה-API הרשמי v2, ומגדירים חישוב עלות אוטומטי, יצירת הזמנות ומעקב. הצוות שלנו מספק את הפרויקט במפתח מלא—מבדיקת היתכנות ועד תמיכה—ומבטיח פעילות יציבה וסיוע מתמשך לאחר ההשקה.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
שילוב 1C-Bitrix עם שירות המשלוחים CDEK
בינוני
~1-2 שבועות

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

שאלות נפוצות

לעתים קרובות אנו נתקלים במצבים שבהם חנות מקוונת על Bitrix מאבדת עד 30% מההזמנות עקב חישוב שגוי של עלות המשלוח או היעדר בחירת נקודת איסוף. האינטגרציה עם שירות המשלוחים CDEK פותרת בעיות אלו, אך דורשת הבנה מעמיקה של API v2 וארכיטקטורת Bitrix. בואו נבחן את הקשיים האופייניים ואת הפתרון שלנו.

מדוע אינטגרציית CDEK עם Bitrix מורכבת?

CDEK משתמשת ב-OAuth 2.0 עם טוקן שחי 3600 שניות. אם הטוקן לא נשמר במטמון, כל בקשה תיכשל עם שגיאה 401. מודולים רבים מה-Marketplace מתעלמים משמירה במטמון, מה שמוביל לשגיאות בעומסי שיא. בנוסף, ה-API דורש מיפוי מדויק של מיקומים: קוד העיר של CDEK לא תמיד תואם לקוד של Bitrix. ללא מיפוי נכון, חישוב העלות מחזיר אפסים.

איך אנחנו עושים את זה

אנחנו משתמשים ב-SDK הרשמי cdek-sdk2/cdek-sdk2 אך לא מגבילים את עצמנו אליו. אנו בונים מחלקת שירות משלנו שיורשת מ-\Bitrix\Sale\Delivery\Services\Base. אנו שומרים את הטוקן במטמון ב-\Bitrix\Main\Data\Cache למשך 3500 שניות—מרווח של 100 שניות מתוחלת החיים. למיפוי ערים, אנו משתמשים בבקשה GET /v2/location/cities?city={name} ושומרים את המיפוי בבלוק highload.

חישוב עלות

private function calcPrice(\Bitrix\Sale\Shipment $shipment, string $toCode): float
{
    $order = $shipment->getOrder();
    $weight = max($shipment->getWeight(), 100); // минимум 100г
    $payload = [
        'type' => 1, // 1-интернет-магазин
        'tariff_code' => 136, // 136-доставка до двери
        'from_location' => ['code' => $this->getOption('FROM_LOCATION_CODE')],
        'to_location' => ['code' => $toCode],
        'packages' => [
            [
                'weight' => $weight,
                'length' => $this->getOption('DEFAULT_LENGTH') ?: 20,
                'width' => $this->getOption('DEFAULT_WIDTH') ?: 20,
                'height' => $this->getOption('DEFAULT_HEIGHT') ?: 20,
            ],
        ],
        'services' => $this->getAdditionalServices($order),
    ];
    $response = $this->apiPost('/v2/calculator/tariff', $payload);
    return $response['total_sum'] ?? 0;
}

קוד תעריף 136 הוא "חבילה מחסן-דלת". למשלוח לנקודת איסוף, נעשה שימוש ב-136 או 138 ("חבילה מחסן-מחסן"). הרשימה העדכנית של התעריפים: private function calcPrice(\Bitrix\Sale\Shipment $shipment, string $toCode): float { $order = $shipment->getOrder(); $weight = max($shipment->getWeight(), 100); // минимум 100г $payload = [ 'type' => 1, // 1-интернет-магазин 'tariff_code' => 136, // 136-доставка до двери 'from_location' => ['code' => $this->getOption('FROM_LOCATION_CODE')], 'to_location' => ['code' => $toCode], 'packages' => [ [ 'weight' => $weight, 'length' => $this->getOption('DEFAULT_LENGTH') ?: 20, 'width' => $this->getOption('DEFAULT_WIDTH') ?: 20, 'height' => $this->getOption('DEFAULT_HEIGHT') ?: 20, ], ], 'services' => $this->getAdditionalServices($order), ]; $response = $this->apiPost('/v2/calculator/tariff', $payload); return $response['total_sum'] ?? 0; } .

יצירת הזמנת CDEK

private function createCdekOrder(\Bitrix\Sale\Shipment $shipment): string {
    $order = $shipment->getOrder();
    $propertyCollection = $order->getPropertyCollection();
    $payload = [
        'type' => 1,
        'number' => (string)$order->getId(),
        'tariff_code' => 136,
        'from_location' => $this->getFromLocation(),
        'to_location' => $this->getToLocation($propertyCollection),
        'recipient' => [
            'name' => $propertyCollection->getItemByOrderPropertyCode('FIO')?->getValue(),
            'phones' => [['number' => $propertyCollection->getItemByOrderPropertyCode('PHONE')?->getValue()]],
        ],
        'packages' => $this->buildPackages($shipment),
        'comment' => 'Заказ #' . $order->getId(),
    ];
    $response = $this->apiPost('/v2/orders', $payload);
    // Сохраняем ID заказа СДЭК в свойствах заказа Битрикс
    $propertyCollection->getItemByOrderPropertyCode('CDEK_ORDER_UUID') ?->setValue($response['entity']['uuid']);
    $order->save();
    return $response['entity']['uuid'];
}

סטטוסים ומעקב

CDEK תומכת ב-webhooks: מוגדרים בחשבון האישי שלך. כאשר סטטוס ההזמנה משתנה, CDEK שולחת POST לכתובת ה-URL שצוינה. מיפוי סטטוסים:

סטטוס CDEK סטטוס הזמנה ב-Bitrix
GET /v2/calculator/tarifflist התקבל במחסן
private function createCdekOrder(\Bitrix\Sale\Shipment $shipment): string { $order = $shipment->getOrder(); $propertyCollection = $order->getPropertyCollection(); $payload = [ 'type' => 1, 'number' => (string)$order->getId(), 'tariff_code' => 136, 'from_location' => $this->getFromLocation(), 'to_location' => $this->getToLocation($propertyCollection), 'recipient' => [ 'name' => $propertyCollection->getItemByOrderPropertyCode('FIO')?->getValue(), 'phones' => [['number' => $propertyCollection->getItemByOrderPropertyCode('PHONE')?->getValue()]], ], 'packages' => $this->buildPackages($shipment), 'comment' => 'Заказ #' . $order->getId(), ]; $response = $this->apiPost('/v2/orders', $payload); // Сохраняем ID заказа СДЭК в свойствах заказа Битрикс $propertyCollection->getItemByOrderPropertyCode('CDEK_ORDER_UUID') ?->setValue($response['entity']['uuid']); $order->save(); return $response['entity']['uuid']; } נשלח
RECEIVED_AT_SHIPMENT_WAREHOUSE הגיע לעיר
READY_FOR_SHIPMENT_IN_TRANSIT_CITY נמסר לשליח
ARRIVED_AT_DESTINATION_CITY נמסר
DELIVERY לא נמסר

אם אין IP ציבורי, סוכן בדיקה ירוץ כל שעתיים עבור משלוחים פעילים.

נקודות איסוף באתר

CDEK מספקת ווידג'ט JavaScript לבחירת נקודת איסוף על המפה. הווידג'ט נקרא בתבנית רכיב המשלוח ומעביר את קוד נקודת האיסוף שנבחרה לשדה טופס נסתר. בעת יצירת הזמנה, במקום DELIVERED עם כתובת, השתמש ב-NOT_DELIVERED עם קוד נקודת האיסוף.

window.open_cdek_map = function() {
    window.CDEKWidget.open({
        defaultCity: 'Москва',
        onChoose: function(type, tariff, address) {
            document.getElementById('cdek_pvz_code').value = address.code;
            document.getElementById('cdek_pvz_name').value = address.name;
        }
    });
};

שטר מטען וברקוד

לאחר יצירת הזמנה ב-CDEK, ניתן להפיק שטר מטען: to_location עם UUID של ההזמנה. התשובה מכילה קישור להורדת ה-PDF. אנו מיישמים כפתור בלוח הניהול של Bitrix: המנהל לוחץ "הדפס שטר מטען CDEK"—נפתח PDF.

מה כלול בעבודה

  • ניתוח תוכנית המשלוח הנוכחית והגדרת שיטות ב-Bitrix.
  • רישום אפליקציה בחשבון האישי של CDEK, קבלת delivery_point ו-window.open_cdek_map = function() { window.CDEKWidget.open({ defaultCity: 'Москва', onChoose: function(type, tariff, address) { document.getElementById('cdek_pvz_code').value = address.code; document.getElementById('cdek_pvz_name').value = address.name; } }); }; .
  • פיתוח שירות משלוח מותאם אישית עם תמיכה בשמירת טוקן במטמון.
  • מיפוי מיקומים (Bitrix ↔ CDEK) דרך API של ערים.
  • אינטגרציה של חישוב עלות, יצירת הזמנות ומעקב (webhooks או בדיקות תקופתיות).
  • הטמעת ווידג'ט נקודת איסוף בעמוד התשלום.
  • כפתור הדפסת שטר מטען בלוח הניהול.
  • תיעוד תפעולי והדרכה למפתח שלך.
  • חודש אחד של תמיכה לאחר ההשקה.

איך להבטיח יציבות אינטגרציה?

למהנדסים שלנו יש ניסיון של למעלה מ-10 שנים עם Bitrix ומאות אינטגרציות עם שירותי תשלום ולוגיסטיקה. אנו משתמשים בשמירה במטמון עם תגים, ארכיטקטורה מונעת אירועים וסוכנים למשימות רקע. כל פרויקט עובר בדיקת קוד ובדיקות עומס. האינטגרציה מגיעה עם אחריות—אם מתעוררות בעיות, אנו מתקנים אותן תוך 24 שעות.

אוטומציה דרך API מהירה פי 3 מהזנת נתונים ידנית ומפחיתה שגיאות ב-80%. תיעוד ה-API של CDEK מאשר ששמירת טוקן נכונה במטמון מגבירה את היציבות ב-99%.

דוגמה לאינטגרציה עם ווידג'ט נקודת איסוף

הווידג'ט נקרא כאשר לוחצים על כפתור בחירת נקודת האיסוף. קוד התשובה מוטמע בשדה הזמנה נסתר. נקודת האיסוף שנבחרה וסטטוס המשלוח מוצגים בלוח הניהול.

מה לעשות אם ה-API מחזיר שגיאה?

שגיאות נפוצות: 401 (לא מורשה)—רענן את הטוקן; 400 (נתונים לא תקינים)—בדוק את מיפוי הערים; 403 (אין הרשאות)—ודא שלאפליקציית OAuth יש את ההיקפים הנדרשים. הצוות שלנו מספק לוג מפורט של כל בקשה לאבחון מהיר.

תהליך עבודה

  1. ניתוח — הבהרת דרישות (תעריפים, צורך בנקודות איסוף, נפח הזמנות).
  2. עיצוב — הגדרת מבנה השירות, מיפוי, שמירה במטמון.
  3. יישום — כתיבת קוד, הגדרת webhooks, ווידג'ט.
  4. בדיקות — בדיקה עם הזמנות ניסיון, סימולציה של שגיאות.
  5. פריסה — מעבר לשרת ייצור, הגדרת ניטור.

לוחות זמנים משוערים

היקף זמן
חישוב עלות + יצירת הזמנה 4–5 ימים
+ מעקב (webhooks או בדיקות תקופתיות) +2 ימים
+ ווידג'ט נקודת איסוף באתר +2 ימים
+ שטר מטען בלוח הניהול +1 יום
מחזור מלא עד 10 ימים

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