אינטגרציה של חישוב עלות משלוח באמצעות API
לקוח מוסיף מוצר לעגלה, עובר לתשלום — ועלות המשלוח מתבררת כגבוהה באופן בלתי צפוי. הוא נוטש את העגלה. נשמע מוכר? אנחנו פותרים זאת על ידי חישוב אוטומטי של עלות המשלוח באמצעות API, תוך הצגת תעריפים אמיתיים בשלב הבחירה. הניסיון שלנו: שנים של מומחיות ו-15+ אינטגרציות מוצלחות עבור חנויות איקומרס בכל הגדלים.
דמיינו: הלקוח כבר בחר מוצר, מילא את הפרטים, אבל בשלב בחירת המשלוח הוא רואה הודעה "חשב משלוח בנפרד." זה גורם לו לעזוב. הפתרון שלנו מציג עלות וזמן משלוח מדויקים מספקים מרובים ישירות בעגלה, בזמן אמת. אנו משלבים APIs של CDEK, Boxberry, דואר רוסיה ושירותים אחרים, מאחדים את התשובות שלהם, ומטמונים תוצאות לטעינה מהירה. עם בקשות אסינכרוניות מקבילות, המשתמש ממתין לא יותר מ-2–3 שניות. זה מפחית את נטישת העגלה ב-20–30%.
בעיות שאנחנו פותרים
יישום חישוב משלוח באמצעות API אינו רק "קריאה לנקודת קצה של ספק." הנה אתגרים אופייניים:
- שאילתות N+1: אם תשאל כל ספק ברצף, זמן ההמתנה יכול לעלות על 10 שניות. אנו משתמשים בבקשות אסינכרוניות מקבילות, ומצמצמים את העיכוב לזמן התגובה של הספק האיטי ביותר.
- פסקי זמן ושגיאות: APIs עשויים להיות לא זמינים. אנו מגדירים פסק זמן של 2 שניות לכל בקשה. אם ספק שותק, האפשרות שלו פשוט לא מוצגת.
- פורמטים לא אחידים: לכל שירות יש מבנה תגובה משלו. אנו ממירים אותם לאובייקט
DeliveryOptionיחיד, נוח גם לקצה האחורי וגם לקצה הקדמי. - טמפון: חזרה על אותה בקשה לא אמורה להעמיס על APIs חיצוניים. אנו מטמנים את התוצאה למשך 15 דקות, ומאיצים את החזרה לדף התשלום.
איך פועלת שאילתת API מקבילה
בליבה נמצא רכיב DeliveryCalculator שמקבל רשימת ספקים ומריץ חישובים במקביל. לעבודה אסינכרונית אנו משתמשים ב-Guzzle Pool או ReactPHP. הנה דוגמת יישום:
class DeliveryCalculator {
private array $providers;
public function calculate(Cart $cart, Address $destination): Collection
{
$requests = collect($this->providers)->map(function ($provider) use ($cart, $destination) {
return $provider->calculateAsync($cart, $destination); // возвращает Promise
});
return collect(async_all($requests)) // параллельное выполнение
->flatten()
->sortBy('price')
->filter(fn($option) => $option->isAvailable());
}
}כל ספק מחזיר אובייקט class DeliveryCalculator { private array $providers; public function calculate(Cart $cart, Address $destination): Collection { $requests = collect($this->providers)->map(function ($provider) use ($cart, $destination) { return $provider->calculateAsync($cart, $destination); // возвращает Promise }); return collect(async_all($requests)) // параллельное выполнение ->flatten() ->sortBy('price') ->filter(fn($option) => $option->isAvailable()); } } עם מבנה אחיד:
class DeliveryOption {
public string $providerId; // 'cdek', 'boxberry', 'pochta'
public string $serviceCode; // 'cdek_express', 'cdek_pvz'
public string $name; // 'СДЭК: Экспресс'
public string $type; // 'courier' | 'pvz' | 'postamat'
public int $price; // в копейках
public ?int $priceWithDiscount;
public int $minDays;
public int $maxDays;
public ?string $pvzCode; // если нужно выбрать точку
public array $meta; // доп. данные провайдера
} למה חשוב לטמן תוצאות חישוב
טמפון מפחית עומס על APIs של ספקים ומאיץ בקשות חוזרות. אנו משתמשים במפתח DeliveryOption עם TTL של 10–15 דקות. כאשר תוכן העגלה או הכתובת משתנים, המטמון נפסל:
$cacheKey = "delivery:{$cart->hash()}:{$destination->hash()}";
return Cache::remember($cacheKey, 900, fn() => $this->fetchFromProviders($cart, $destination)); מה כוללת העבודה
| שלב | תוכן | זמן (ימי עבודה) |
|---|---|---|
| ביקורת | ניתוח העגלה הנוכחית והספקים הזמינים | 0.5 |
| חיבור API | אינטגרציה של 2–3 ספקים (CDEK, Boxberry, דואר רוסיה) | 2–3 |
| בקשות מקבילות | יישום שאילתות אסינכרוניות, פסקי זמן, טיפול בשגיאות | 1–2 |
| טמפון | הגדרת מטמון ופסילה על אירועי עגלה | 0.5 |
| ממשק משתמש | הצגת אפשרויות עם בחירת נקודת איסוף על מפה, זמן משלוח | 1–2 |
| בדיקות | אימות עם הזמנות אמיתיות, בדיקות ביצועים | 1 |
סה"כ: מ-3 ימי עסקים לאינטגרציה בסיסית.
השוואת גישות
| קריטריון | הזנה ידנית | חישוב API (הפתרון שלנו) |
|---|---|---|
| דיוק תעריף | נמוך (מיושן) | גבוה (זמן אמת) |
| מספר ספקים | לא יותר מ-1–2 | 5 או יותר |
| טיפול במידות | לא | אוטומטי (מכרטיס המוצר) |
| שגיאות | הסתברות גבוהה | ממוזער (פסקי זמן, טמפון) |
| המרה | נמוכה | גבוהה ב-20–30% |
טעויות אינטגרציה אופייניות
- אי טיפול במידות מוצר. אם מידות חסרות, אנו משתמשים בערכי ברירת מחדל — אחרת הספק עלול לדחות או לגבות יותר.
- התעלמות מלוח השנה היצרני. זמן משלוח של "1–2 ימים" ללא התחשבות בחגים מטעה את הלקוח. אנו מתחברים לימי עסקים.
- אי בדיקה עם עגלות אמיתיות. לעתים קרובות שגיאה מופיעה רק עם מספר גדול של פריטים או כתובות לא סטנדרטיות.
לפי תיעוד CDEK, פסק הזמן לבקשה לא יעלה על 5 שניות.
מה תקבל לאחר האינטגרציה
- חישוב עלות עובד עבור 2–3 ספקים
- בקשות מקבילות עם פסקי זמן
- טמפון עם פסילה אוטומטית
- הצגת אפשרויות באתר עם בחירת נקודת איסוף וזמני משלוח
- קוד ותיעוד גישה
- אחריות ל-30 יום על האינטגרציה לאחר המסירה
צור קשר כדי להעריך את הפרויקט שלך. נספק הערכה מפורטת של לוח זמנים ועלות, ונייעץ בבחירת ספק. בקש ייעוץ על אינטגרציית חישוב משלוח — נעזור למצוא את הפתרון האופטימלי.







