שילוב מחשבון משלוחים עם CDEK והדואר הרוסי

שילוב מחשבון משלוחים עם CDEK והדואר הרוסי

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
שילוב מחשבון משלוחים עם CDEK והדואר הרוסי
בינוני
~2-3 ימים

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

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1467
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1320
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1015
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1276
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1019
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1019

שילוב מחשבון משלוחים עם CDEK והדואר הרוסי

לקוח ממלא עגלה, רואה את עלות המשלוח בקופה—ועוזב. לפי מכון Baymard 48% מהעגלות הנטושות נובעות מעלויות משלוח בלתי צפויות. אנו מתכננים מעריכי עלויות משלוח המציגים את הסכום המדויק עם בחירת שיטה וזמן אספקה לפני הקופה. התוצאה: שיעור ההמרה בקופה משתפר ב-15–25%. לדוגמה, חנות אלקטרוניקה חוותה עלייה של 20% בהמרה, תוך חיסכון ממוצע של 3–5 דולר לכל הזמנה. במאמר זה, אנו מסבירים כיצד אנו בונים מחשבון כזה—מסכימת הנתונים ועד לשילוב עם CDEK והדואר הרוסי.

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

בעיות שמחשבון עלויות המשלוח פותר

עלויות בלתי צפויות. הלקוח רואה את הסכום הסופי לפני הקופה—פחות נטישות. אנו מוסיפים שמירה במטמון כדי להבטיח שהחישוב אורך 200–500 אלפיות השנייה, פי שלושה מהר יותר מקריאה ישירה ל-API.

APIs לא תקינים. חברות השילוח משנות גרסאות, מגבלות יורדות—הארכיטקטורה שלנו עם ממשקים מבודדת תקלות. אם CDEK נופל, הלקוח רואה תעריפים ממסד הנתונים או מהדואר הרוסי.

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

חישוב מהיר יותר באמצעות DB

טבלאות אזורים ותעריפים ב-PostgreSQL מריצות שאילתות ב-10–50 אלפיות השנייה באמצעות שדות JSONB לכללים מותנים. API חיצוני אורך 200–1000 אלפיות השנייה. אנו שומרים את התוצאה במטמון למשך 5 דקות, כך שלבקשות חוזרות (אותה עיר ומשקל), התגובה מיידית. זה מפחית עומס על השרת ומונע בעיות הגבלת קצב.

הימנעות משגיאות בשילוב API

הטעות העיקרית היא התעלמות ממשקל נפחי. חברות שליחויות גובות לפי נפח, לא לפי משקל בפועל. אנו מטמיעים בדיקה: max(weight, length*width*height/5000). הטעות השנייה היא חוסר בגיבוי: אם ה-API של חברת השילוח לא מגיב, אנו מציגים תעריפים ממסד הנתונים אוטומטית באמצעות דפוס circuit breaker. הטעות השלישית היא חישוב איטי ללא שמירה במטמון: אנו שומרים במטמון למשך 5 דקות ומשתמשים ב-debounce בצד הלקוח.

בחירת PostgreSQL לתעריפים

PostgreSQL מאפשר ניהול גמיש של אזורים ותעריפים באמצעות שאילתות SQL עם שדות מערך לאזורים ו-JSONB לכללים נוספים. ביצועים: 10–50 אלפיות השנייה לשאילתה, קריטי לקופה. גיבוי אסינכרוני למסד הנתונים מבטיח שאיננו תלויים בזמינות ה-API של חברת השילוח.

כיצד אנו מפתחים את המחשבון

שלבים

  1. אנליטיקה — קביעת חברות שילוח, אזורי משלוח, כללי משלוח חינם. איסוף משקל ומידות ממוצעים של מוצרים. עלות: תלויה במורכבות הפרויקט.
  2. עיצוב סכמה — יצירת טבלאות DeliveryCalculatorService ו-delivery_zones עם אינדוקס על carrier_id ו-zone_id. עיצוב ה-delivery_rates.
  3. יישום שירות — כתיבת DeliveryProviderInterface עם שמירה במטמון למשך 5 דקות וגיבוי למסד נתונים באמצעות טיפול אסינכרוני בבקשות.
  4. שילוב API — חיבור CDEK והדואר הרוסי דרך ממשק אחיד. כל שירות הוא מחלקה נפרדת המיישמת מפתחות idempotency.
  5. צד לקוח — רכיב React עם השלמה אוטומטית של עיר דרך DaData. Debounce של 600 אלפיות השנייה כדי למנוע עומס על השרת.
  6. בדיקות — בדיקות יחידה לשירות, בדיקות אינטגרציה ל-API, בדיקות עומס לשמירה במטמון.
  7. פריסה — פריסה לשרת, הגדרת שמירה במטמון של Redis אם נדרש.

סכמת נתונים

CREATE TABLE delivery_zones ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255), country CHAR(2) DEFAULT 'RU', regions TEXT[], -- коды регионов ФИАС cities TEXT[], -- коды городов КЛАДР carrier_id INT REFERENCES carriers(id) ); CREATE TABLE delivery_rates ( id BIGSERIAL PRIMARY KEY, carrier_id INT REFERENCES carriers(id), zone_id BIGINT REFERENCES delivery_zones(id), method VARCHAR(50), -- 'courier', 'pickup', 'post' weight_from_g INT DEFAULT 0, weight_to_g INT, price NUMERIC(10,2) NOT NULL, days_min SMALLINT, days_max SMALLINT, free_from NUMERIC(12,2), -- бесплатно при сумме от X is_active BOOLEAN DEFAULT TRUE ); 

שילוב CDEK

class CdekDeliveryProvider implements DeliveryProviderInterface { private string $baseUrl = 'https://api.cdek.ru/v2'; public function calculate(DeliveryRequest $request, int $weightG): array { $token = $this->getToken(); $response = Http::withToken($token) ->post("{$this->baseUrl}/calculator/tarifflist", [ 'type' => 1, 'currency' => 1, 'lang' => 'rus', 'from_location' => ['code' => config('cdek.from_city_code')], 'to_location' => ['address' => $request->destination->address], 'packages' => [[ 'weight' => $weightG, 'length' => 30, 'width' => 20, 'height' => 10, ]], ]); if (!$response->successful()) return []; return collect($response->json('tariff_codes', [])) ->map(fn($t) => new DeliveryOption( carrierId: 'cdek', method: $this->mapTariffToMethod($t['tariff_code']), name: 'СДЭК — ' . $t['tariff_name'], price: $t['delivery_sum'], daysMin: $t['period_min'], daysMax: $t['period_max'], )) ->toArray(); } } 

הדואר הרוסי מחובר באופן דומה דרך המחלקה DeliveryCalculatorService.

רכיב צד לקוח

const DeliveryCalculator: React.FC<{ cartItems: CartItem[] }> = ({ cartItems }) => { const [city, setCity] = useState(''); const [options, setOptions] = useState<DeliveryOption[]>([]); const [loading, setLoading] = useState(false); const calculate = useDebouncedCallback(async (cityValue: string) => { if (cityValue.length < 3) return; setLoading(true); try { const res = await api.post('/delivery/calculate', { destination: cityValue, items: cartItems.map(i => ({ product_id: i.id, quantity: i.qty })), }); setOptions(res.data.options); } finally { setLoading(false); } }, 600); return ( <div> <input placeholder="Введите город доставки" value={city} onChange={e => { setCity(e.target.value); calculate(e.target.value); }} className="border rounded px-3 py-2 w-full" /> {loading && <p className="text-sm text-gray-400 mt-2">Считаем стоимость...</p>} {options.length > 0 && ( <ul className="mt-3 space-y-2"> {options.map(opt => ( <li key={opt.id} className="flex justify-between items-center border rounded px-3 py-2"> <div> <p className="font-medium">{opt.name}</p> <p className="text-sm text-gray-500">{opt.daysMin}–{opt.daysMax} дней</p> </div> <span className="font-semibold"> {opt.isFree ? 'Бесплатно' : formatPrice(opt.price)} </span> </li> ))} </ul> )} </div> ); }; 

השוואת חברות שילוח

פרמטר CDEK הדואר הרוסי
סוגי משלוח שליח, תא חבילות, נקודת איסוף תא חבילות, משרד, שליח
זמן אספקה ממוצע 1–5 ימים 3–14 ימים
דיוק חישוב גבוה (API v2) בינוני (דורש מיקוד)
תמיכה במשקל נפחי כן כן (דרך נפח)

כיצד להימנע מטעויות נפוצות

ההשמטה השכיחה ביותר היא התעלמות ממשקל נפחי—חברות שליחויות גובות לעיתים קרובות לפי נפח ולא לפי משקל בפועל. אנו אוכפים CREATE TABLE delivery_zones ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255), country CHAR(2) DEFAULT 'RU', regions TEXT[], -- коды регионов ФИАС cities TEXT[], -- коды городов КЛАДР carrier_id INT REFERENCES carriers(id) ); CREATE TABLE delivery_rates ( id BIGSERIAL PRIMARY KEY, carrier_id INT REFERENCES carriers(id), zone_id BIGINT REFERENCES delivery_zones(id), method VARCHAR(50), -- 'courier', 'pickup', 'post' weight_from_g INT DEFAULT 0, weight_to_g INT, price NUMERIC(10,2) NOT NULL, days_min SMALLINT, days_max SMALLINT, free_from NUMERIC(12,2), -- бесплатно при сумме от X is_active BOOLEAN DEFAULT TRUE ); . מלכודת נוספת היא חוסר בגיבוי: אם ה-API של חברת השילוח נופל, אנו שולפים תעריפים ממסד הנתונים אוטומטית דרך class CdekDeliveryProvider implements DeliveryProviderInterface { private string $baseUrl = 'https://api.cdek.ru/v2'; public function calculate(DeliveryRequest $request, int $weightG): array { $token = $this->getToken(); $response = Http::withToken($token) ->post("{$this->baseUrl}/calculator/tarifflist", [ 'type' => 1, 'currency' => 1, 'lang' => 'rus', 'from_location' => ['code' => config('cdek.from_city_code')], 'to_location' => ['address' => $request->destination->address], 'packages' => [[ 'weight' => $weightG, 'length' => 30, 'width' => 20, 'height' => 10, ]], ]); if (!$response->successful()) return []; return collect($response->json('tariff_codes', [])) ->map(fn($t) => new DeliveryOption( carrierId: 'cdek', method: $this->mapTariffToMethod($t['tariff_code']), name: 'СДЭК — ' . $t['tariff_name'], price: $t['delivery_sum'], daysMin: $t['period_min'], daysMax: $t['period_max'], )) ->toArray(); } } באמצעות דפוס circuit breaker. לבסוף, חישובים איטיים ללא שמירה במטמון מובילים לחוויית משתמש ירודה; אנו שומרים תוצאות במטמון למשך 5 דקות ומבצעים debounce לבקשות צד הלקוח.

מה כלול וציר זמן

היקף העבודה:

  • סכמת נתונים (טבלאות אזורים ותעריפים).
  • DeliveryCalculatorService עם תמיכה בשמירה במטמון וגיבוי אסינכרוני.
  • שילוב עם שתי חברות שילוח: CDEK והדואר הרוסי.
  • רכיב צד לקוח ב-React/Next.js עם השלמה אוטומטית של עיר דרך DaData.
  • נקודת קצה API עם שמירה במטמון למשך 5 דקות.
  • תיעוד להגדרת תעריפים והוספת חברות שילוח חדשות.
  • תמיכה לאחר השקה — אחריות לחודש אחד.

ציר זמן משוער לפי שלב:

שלב משך
אנליטיקה 0.5–1 יום
עיצוב סכמה 0.5 יום
יישום שירות 1–1.5 ימים
שילוב API 1–2 ימים
צד לקוח 1–2 ימים
בדיקות 0.5–1 יום
פריסה 0.5 יום

זמן כולל: בין 3 ל-5 ימי עבודה, תלוי במספר חברות השילוח ובמורכבות התעריפים.

לצוות שלנו ניסיון של 5+ שנים בפתרונות משלוחים למסחר אלקטרוני, עם השלמת 50+ פרויקטים. עלות היישום נקבעת באופן אישי, עם חיסכון משמעותי לכל הזמנה ועלייה בערך ההזמנה הממוצע. הזמינו פיתוח של מעריך עלויות משלוח כך שהלקוחות שלכם יראו את העלות המדויקת לפני הקופה—חיסכון של עד 4–6 דולר לכל הזמנה בהחזרות שנמנעות. צרו קשר להערכת פרויקט.