אם חנות ה-Bitrix שלכם מספקת משלוחים לבלארוס דרך SDEK, כבר נתקלתם בהפתעות: תעריפים רוסיים, חישובי BYN שגויים, והיעדר מסמכי TTN-1. הקמנו עשרות אינטגרציות כאלה ואנחנו יודעים היכן המלכודות. SDEK פועלת בבלארוס דרך ישות משפטית בלארוסית—חברת LLC "SDEK-BEL". ה-API זהה v2, אבל התצורה שונה מהותית: קודי מיקום, תעריפים, מטבע ומסמכים משפטיים. בואו נפרק את ההבדלים הטכניים ואת הפתרון המוכן עבור Bitrix. בממוצע, תצורה שגויה של מטפל המשלוחים מובילה לפערי מחירים של 20–30% ועיכובים בעיבוד הזמנות של עד יומיים.
כיצד האינטגרציה של SDEK בלארוס שונה מרוסיה
מבחינה טכנית ה-API זהה: https://api.cdek.ru/v2, אותה OAuth 2.0, אותם endpoints. אבל יש הבדלים מרכזיים שחובה לקחת בחשבון:
| פרמטר | רוסיה | בלארוס |
|---|---|---|
| ישות משפטית | CDEK Russia | LLC "SDEK-BEL" |
| אישורי גישה | חשבון RU | חשבון SDEK-BEL נפרד |
| מטבע | RUB | BYN |
| מסמכים | שטר מטען CDEK | שטר מטען + TTN-1 |
| קודי ערים | רוסיים | קודים בלארוסיים |
כדי לעבוד עם ה-API הבלארוסי, יש לקבל אישורי גישה נפרדים מהחשבון האישי של SDEK-BEL. ללא זאת, כל הבקשות יידחו עם שגיאה 401. שימו לב גם שכאשר מתבצע חילופי מידע עם 1C דרך CommerceML, נעשה שימוש בקטלוגי nomenclature נפרדים עבור בלארוס.
למה מטפל משלוחים יחיד לא יעבוד
אם אתם משתמשים ב-CdekRuHandler אחד עבור כל ההזמנות, עבור כתובות בלארוסיות הוא יחיל תעריפים ומטבע רוסיים. כתוצאה מכך, לקוח ממינסק יראה מחיר ב-RUB, בעוד המחיר בפועל הוא ב-BYN—פער של עד 30%. נתקלנו בפרויקטים שבהם, בגלל מטפל יחיד, לקוחות קיבלו חשבוניות ב-RUB במקום BYN, והחישובים מחדש ארכו מספר ימים. היישום שלנו עם שני מטפלים מונע זאת. המעבר מתבצע אוטומטית על פי המדינה מכתובת המשלוח דרך אירוע OnBeforeCalculate.
כיצד להגדיר את המטפל עבור בלארוס
אתחול לקוח:
class CdekByHandler extends \Bitrix\Sale\Delivery\Services\Base {
private function getApiClient(): CdekApiClient {
// Белорусские credentials из личного кабинета СДЭК-БЕЛ
return new CdekApiClient(
clientId: $this->getOption('CLIENT_ID_BY'),
clientSecret: $this->getOption('CLIENT_SECRET_BY'),
apiUrl: 'https://api.cdek.ru/v2',
testMode: (bool)$this->getOption('TEST_MODE')
);
}
protected function calculateConcrete(
\Bitrix\Sale\Shipment $shipment
): \Bitrix\Sale\Delivery\CalculationResult {
$result = new \Bitrix\Sale\Delivery\CalculationResult();
$client = $this->getApiClient();
$toCode = $this->getByLocationCode($shipment);
if (!$toCode) {
$result->addError(new \Bitrix\Main\Error('Город не найден в базе СДЭК'));
return $result;
}
$tariff = $client->calculateTariff([
'tariff_code' => (int)$this->getOption('TARIFF_CODE_BY', 136),
'from_location' => ['code' => $this->getOption('FROM_LOCATION_CODE_BY')],
'to_location' => ['code' => $toCode],
'packages' => [[
'weight' => max($shipment->getWeight(), 100),
'length' => (int)$this->getOption('DEFAULT_LENGTH', 20),
'width' => (int)$this->getOption('DEFAULT_WIDTH', 20),
'height' => (int)$this->getOption('DEFAULT_HEIGHT', 20),
]],
]);
$result->setDeliveryPrice($tariff['total_sum']);
$result->setPeriodDescription($tariff['period_min'] . '–' . $tariff['period_max'] . ' рабочих дней');
return $result;
}
} כיצד להציג נקודות איסוף של SDEK באתר עבור בלארוס
רשימת נקודות האיסוף נשלפת דרך class CdekByHandler extends \Bitrix\Sale\Delivery\Services\Base { private function getApiClient(): CdekApiClient { // Белорусские credentials из личного кабинета СДЭК-БЕЛ return new CdekApiClient( clientId: $this->getOption('CLIENT_ID_BY'), clientSecret: $this->getOption('CLIENT_SECRET_BY'), apiUrl: 'https://api.cdek.ru/v2', testMode: (bool)$this->getOption('TEST_MODE') ); } protected function calculateConcrete( \Bitrix\Sale\Shipment $shipment ): \Bitrix\Sale\Delivery\CalculationResult { $result = new \Bitrix\Sale\Delivery\CalculationResult(); $client = $this->getApiClient(); $toCode = $this->getByLocationCode($shipment); if (!$toCode) { $result->addError(new \Bitrix\Main\Error('Город не найден в базе СДЭК')); return $result; } $tariff = $client->calculateTariff([ 'tariff_code' => (int)$this->getOption('TARIFF_CODE_BY', 136), 'from_location' => ['code' => $this->getOption('FROM_LOCATION_CODE_BY')], 'to_location' => ['code' => $toCode], 'packages' => [[ 'weight' => max($shipment->getWeight(), 100), 'length' => (int)$this->getOption('DEFAULT_LENGTH', 20), 'width' => (int)$this->getOption('DEFAULT_WIDTH', 20), 'height' => (int)$this->getOption('DEFAULT_HEIGHT', 20), ]], ]); $result->setDeliveryPrice($tariff['total_sum']); $result->setPeriodDescription($tariff['period_min'] . '–' . $tariff['period_max'] . ' рабочих дней'); return $result; } } . SDEK מספקת ווידג'ט JavaScript רשמי לבחירת מפה—הוא עובד כראוי עבור נקודות בלארוסיות. שמרו את הנתונים במטמון למשך 6 שעות כדי לזרז את הטעינה.
public function getBelarusOfficePoints(): array
{
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache(3600 * 6, 'cdek_pvz_by', '/cdek/')) {
return $cache->getVars();
}
$points = $this->getApiClient()->getDeliveryPoints([
'country_codes' => 'BY',
'have_cashless' => true,
]);
$cache->startDataCache();
$cache->endDataCache($points);
return $points;
} מה זה TTN-1 ולמה הוא נחוץ?
עבור הובלה פנים-ארצית בתוך בלארוס, החקיקה דורשת שטר מטען TTN-1. SDEK-BEL יכולה לייצר אותו אוטומטית—בדקו את התנאים בחוזה שלכם. אם אתם צריכים ייצור עצמאי, אנו משלבים יצירת PDF עם נתוני הזמנה ומשלוח. בפועל, התעלמות מ-TTN-1 מובילה לקנסות של עד 20 יחידות בסיס בבדיקות. היישום שלנו הופך את יצירת המסמכים לאוטומטית, וחוסך עד 40% מזמן המנהלים.
מקרה מבחן מהפרקטיקה שלנו
לקוח אחד—חנות אלקטרוניקה עם לקוחות גם בבלארוס וגם ברוסיה—השתמש במטפל יחיד. בעיה: תעריפים רוסיים עבור הזמנות בלארוסיות, בלבול עם BYN. פתרון: שני מטפלים נפרדים GET /v2/deliverypoints?country_codes=BY ו-public function getBelarusOfficePoints(): array { $cache = \Bitrix\Main\Data\Cache::createInstance(); if ($cache->initCache(3600 * 6, 'cdek_pvz_by', '/cdek/')) { return $cache->getVars(); } $points = $this->getApiClient()->getDeliveryPoints([ 'country_codes' => 'BY', 'have_cashless' => true, ]); $cache->startDataCache(); $cache->endDataCache($points); return $points; } , מעבר לפי מדינה דרך CdekRuHandler. תוצאה: תעריפים נכונים ב-BYN, TTN-1 נוצר, מהירות עיבוד ההזמנות הוכפלה, שיעור השגיאות ירד ב-25%. נפח ההזמנות של הלקוח: עד 1500 ליום. תיעוד SDEK API v2.
מה כלול בעבודה
| היקף העבודה | פרטים |
|---|---|
| ביקורת לוגיסטיקה נוכחית | ניתוח מטפלי משלוחים וקודי מיקום |
| הגדרת SDEK-BEL API | רישום אפליקציה, קבלת אישורי גישה |
| פיתוח CdekByHandler | חישוב תעריפים, יצירת הזמנות, מעקב |
| הצגת נקודות איסוף במפה | ווידג'ט SDEK + התאמה אישית |
| אינטגרציית TTN-1 | יצירת מסמכים (אופציונלי) |
| אינטגרציה עם 1C (CommerceML) | סנכרון nomenclature והזמנות |
| שמירת נתוני נקודות איסוף במטמון | אופטימיזציה של טעינת דף העגלה |
| בדיקות והשקה | אימות בסביבת staging, הדרכת מנהלים |
לוח זמנים משוער: אינטגרציה בסיסית (חישוב + הזמנה)—3–4 ימים, עם נקודות איסוף—עד 5 ימים, מחזור מלא עם TTN-1—עד 7 ימי עבודה. התמחור נקבע באופן פרטני על פי הנפח והמורכבות שלכם.
למה להפקיד את האינטגרציה בידינו?
אנחנו עובדים עם Bitrix כבר למעלה מ-10 שנים והשלמנו יותר מ-50 פרויקטי אינטגרציה של SDEK. אלה כוללים גם חנויות מקוונות קטנות וגם קטלוגים גדולים עם אלפי הזמנות ביום. אנו מבטיחים: פעולת API נכונה, תעריפים עדכניים ותמיכה מלאה לאחר השחרור. אנו מספקים אחריות על כל העבודה—תיקון שגיאות חינם תוך 30 יום לאחר המסירה.
דוגמה לשמירת רשימת נקודות האיסוף במטמון:
public function getBelarusOfficePoints(): array
{
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache(3600 * 6, 'cdek_pvz_by', '/cdek/')) {
return $cache->getVars();
}
// ... запрос и кэширование
}רוצים שהמשלוחים יעבדו ללא תקלות? השאירו בקשה לייעוץ—נעריך את הפרויקט שלכם ונציע את הפתרון האופטימלי.

