שילוב משלוחי CDEK מקצה לקצה עבור האתר שלך
אנו מספקים שירות שילוב CDEK באתר שלך במפתח מלא. שילוב ה-CDEK באתר שלנו מבטיח פעולה חלקה. אנו מספקים חישוב עלויות משלוח עם כל התעריפים (136–139), הצגת נקודות איסוף על מפה, יצירת הזמנות בבקשה אחת, וסנכרון סטטוסים בזמן אמת באמצעות webhook. הגרסה הבסיסית מוכנה תוך 5–7 ימי עסקים. צור קשר — נבחן את הפרויקט שלך.
בפועל, שילוב עם API של CDEK גורם לעיתים קרובות לבעיות: חישוב שגוי עקב קודי ערים (במאגר יש >100,000 ערים) או אובדן הזמנות עקב כשלי בקשות. אנו פותרים זאת באמצעות שמירת מדריכים במטמון, ניסיונות חוזרים אוטומטיים (retry עם השהיה אקספוננציאלית), ורישום לוגים מפורט. כתוצאה מכך, שיעור הכשלים יורד ל-0.1% — מאושר על ידי לקוחותינו עם למעלה מ-15 פרויקטי שילוב משלוחים. שילוב טיפוסי מחזיר את עצמו תוך חודשיים, וחוסך מעל $500 בחודש בעיבוד ידני. השילוב שלנו מקצר את זמן עיבוד ההזמנות ב-95% (מ-15 דקות ל-45 שניות) ומפחית שגיאות הזנת נתונים לפחות מ-0.1%. אנו מבטיחים 99.9% זמינות אספקת webhook.
מה שילוב CDEK מספק
| רכיב | תוצאה |
|---|---|
| חישוב עלות משלוח | תעריפים עדכניים בהתחשב במשקל, ממדים וסוג משלוח (דלת/PVZ) |
| נקודות איסוף על מפה | מפה אינטראקטיבית עם סינון לפי עיר, משקל, זמינות מזומן |
| יצירת הזמנה | יצירת הזמנה אוטומטית ב-CDEK בעת תשלום באתר שלך |
| מעקב אחר חבילה | סטטוסים בזמן אמת באמצעות webhook (CREATED, ACCEPTED, READY, DELIVERED) |
| תיעוד והדרכה | תיאור API, דוגמאות קוד, הוראות למפעילים |
אוטומציית משלוחים מפחיתה מאמץ ידני ושגיאות.
מה כלול בחבילת השילוב
- תיעוד: תיאור API מפורט, מדריך שילוב ודוגמאות קוד.
- אישורי API: גישה מלאה ל-API של CDEK עם אסימוני OAuth 2.0.
- הדרכה: הוראות למפעילים והדרכה לטיפול בהזמנות ונקודות איסוף.
- תמיכה: חודש תמיכה חינם לאחר השילוב, כולל הגדרת ניטור ופתרון תקלות.
- זמינות מובטחת: 99.9% אחריות לאספקת webhook עם ניסיונות חוזרים אוטומטיים.
כיצד לשלב CDEK ב-5 שלבים
- קבל אישורי API: הירשם ב-CDEK, השג client_id ו-client_secret.
- הטמע אימות: הגדר שמירת אסימון OAuth 2.0 במטמון (כפי שמוצג בדוגמת הקוד).
- הוסף חישוב עלויות: שלב את נקודת הקצה של המחשבון כדי להציג תעריפים בדף התשלום שלך.
- הצג נקודות איסוף: השתמש בנקודת הקצה deliverypoints כדי להציג PVZs זמינים על מפה.
- צור הזמנות וטפל ב-webhooks: הטמע יצירת הזמנות וסנכרון סטטוסים באמצעות webhook.
כיצד אנו מבטיחים סנכרון סטטוסים אמין?
אנו משתמשים בהתראות webhook של CDEK. לאחר יצירת הזמנה, CDEK שולח בקשת POST לכתובת ה-URL שלך בכל שינוי סטטוס. זה מהיר וזול יותר מאשר בדיקה תקופתית. פשוט החזר HTTP 200 — אחרת CDEK ינסה שוב עד 3 פעמים. אנו גם מוסיפים ניטור: אם לא מתקבלת התראה תוך 5 דקות, אנו שולחים התראת אזהרה.
אילו נתונים נדרשים לחישוב עלויות?
לחישוב, פשוט העבר את קודי הערים של השולח והמקבל, משקל וממדים של החבילה, וסוג משלוח (דלת/PVZ). ה-API מחזיר רשימת תעריפים עם זמני משלוח מינימליים ומקסימליים. אנו מסננים אוטומטית תעריפים עם שגיאות (למשל, קוד עיר CDEK לא נמצא) ומחזירים רק אפשרויות תקפות. תעריפי CDEK כוללים את כל הסוגים העיקריים.
השוואה בין עיבוד הזמנות ידני ואוטומטי
| קריטריון | עיבוד ידני | השילוב שלנו |
|---|---|---|
| זמן לכל הזמנה | 15–20 דקות | 2–3 שניות |
| שגיאות הזנת נתונים | עד 5% | <0.1% |
| עדכוני סטטוס | בדיקה ידנית תקופתית | webhook אוטומטי |
| עלות תמיכה | גבוהה (שכר מפעיל) | מינימלית (הגדרה חד-פעמית) |
טכנולוגיות וכלים
- אימות CDEK API v2: אישורי לקוח OAuth 2.0, אסימון חי 3600 שניות, נשמר במטמון ב-Redis.
- חישוב עלויות: שיטה
/v2/calculator/tarifflist. - PVZ: שיטה
/v2/deliverypointsעם סינון לפי עיר, משקל וסוג. - הזמנות: שיטה
/v2/ordersעם סט מלא של שדות. - Webhook: רישום פעם אחת, טיפול בסטטוסים מרכזיים.
אנו משתמשים ב-CDEK API v2 לכל הפעולות. דוגמה לאימות ושמירת אסימון במטמון:
class CdekAuthService {
private const TOKEN_URL = 'https://api.cdek.ru/v2/oauth/token';
private const CACHE_KEY = 'cdek_access_token';
public function getToken(): string {
return Cache::remember(self::CACHE_KEY, 3500, function () {
$response = Http::asForm()->post(self::TOKEN_URL, [
'grant_type' => 'client_credentials',
'client_id' => config('services.cdek.client_id'),
'client_secret' => config('services.cdek.client_secret'),
]);
if ($response->failed()) {
throw new CdekAuthException('Failed to obtain CDEK token: ' . $response->body());
}
return $response->json('access_token');
});
}
}דוגמה לחישוב עלויות:
class CdekCalculatorService {
public function calculateTariffList(
string $fromCityCode,
string $toCityCode,
array $packages,
int $deliveryType = 1
): array {
$response = Http::withToken($this->auth->getToken())
->post('https://api.cdek.ru/v2/calculator/tarifflist', [
'type' => $deliveryType,
'from_location' => ['code' => (int)$fromCityCode],
'to_location' => ['code' => (int)$toCityCode],
'packages' => $packages,
]);
if ($response->failed()) {
throw new CdekApiException($response->body());
}
return collect($response->json('tariff_codes'))
->filter(fn($t) => empty($t['errors']))
->map(fn($t) => [
'code' => $t['tariff_code'],
'name' => $t['tariff_name'],
'cost' => $t['delivery_sum'],
'min_days' => $t['period_min'],
'max_days' => $t['period_max'],
])
->values()
->toArray();
}
}דוגמה לקבלת נקודות איסוף:
public function getPickupPoints( string $cityCode, float $weightKg, bool $cashAllowed = false ): array {
$response = Http::withToken($this->auth->getToken())
->get('https://api.cdek.ru/v2/deliverypoints', [
'city_code' => $cityCode,
'weight_max' => (int)($weightKg),
'have_cash' => $cashAllowed ? 'true' : null,
'type' => 'PVZ',
'is_handout' => 'true',
]);
return collect($response->json())
->map(fn($p) => [
'code' => $p['code'],
'name' => $p['name'],
'address' => $p['location']['address'],
'lat' => $p['location']['latitude'],
'lng' => $p['location']['longitude'],
'work_time' => $p['work_time'],
'cash_allowed'=> $p['have_cash'],
])
->toArray();
}דוגמה ליצירת הזמנה:
public function createOrder(Order $order): string {
$payload = [
'tariff_code' => $order->cdek_tariff_code,
'from_location' => [
'code' => config('services.cdek.warehouse_city_code'),
'address' => config('services.cdek.warehouse_address'),
],
'to_location' => [
'code' => $order->cdek_city_code,
'address' => $order->delivery_address,
],
'recipient' => [
'name' => $order->recipient_name,
'phones' => [['number' => $order->recipient_phone]],
'email' => $order->recipient_email,
],
'packages' => [[
'number' => 'p' . $order->id,
'weight' => (int)($order->total_weight_kg * 1000),
'length' => $order->package_length,
'width' => $order->package_width,
'height' => $order->package_height,
'comment' => 'Заказ #' . $order->id,
'items' => $order->items->map(fn($item) => [
'name' => $item->product->name,
'ware_key'=> (string)$item->product_id,
'payment' => ['value' => 0],
'cost' => $item->price,
'amount' => $item->quantity,
'weight' => (int)($item->product->weight_g),
])->toArray(),
]],
];
if ($order->pickup_point_code) {
$payload['delivery_point'] = $order->pickup_point_code;
}
$response = Http::withToken($this->auth->getToken())
->post('https://api.cdek.ru/v2/orders', $payload);
$orderId = $response->json('entity.uuid');
if (!$orderId) {
throw new CdekOrderException(
'Failed to create CDEK order: ' . json_encode($response->json('requests.0.errors'))
);
}
return $orderId;
}דוגמה לטיפול ב-webhook:
public function handleWebhook(Request $request): Response
{
$data = $request->json()->all();
if ($data['type'] !== 'ORDER_STATUS') {
return response('ok', 200);
}
$cdekOrderUuid = $data['attributes']['uuid'];
$statusCode = $data['attributes']['status']['code'];
$order = Order::where('cdek_uuid', $cdekOrderUuid)->first();
if ($order) {
$order->update([
'cdek_status' => $statusCode,
'cdek_status_at' => now(),
]);
if (in_array($statusCode, ['READY_FOR_PICKUP', 'DELIVERED'])) {
dispatch(new NotifyCustomerDeliveryStatus($order, $statusCode));
}
}
return response('ok', 200);
} שלבי העבודה
| שלב | מה אנו עושים | תוצאה |
|---|---|---|
| אנליזה | לומדים את האתר שלך, דרישות, בוחרים תעריפים ושיטות שילוב אופטימליות | מפרט טכני |
| עיצוב | מעצבים ארכיטקטורה: שירותים, מטמון, טיפול בשגיאות | תיעוד |
| יישום | כותבים קוד שילוב: אימות, חישוב, PVZ, הזמנות, webhook | קוד עובד בטכנולוגיה שלך |
| בדיקות | בודקים בסביבת הבדיקה של CDEK, מדמים את כל התרחישים, מתקנים באגים | דוח בדיקות |
| השקה | מעבר לאישורי ייצור, הגדרת ניטור | שילוב בייצור |
לוח זמנים משוער
שילוב בסיסי (חישוב עלות משלוח + נקודות איסוף על מפה + יצירת הזמנות) — 5–7 ימי עסקים. הוספת מעקב חבילות באמצעות webhook, סנכרון סטטוסים והדפסת תוויות — עוד 3–4 ימים. בדיקות בסביבת הבדיקה של CDEK הן חובה. העלות מחושבת באופן אישי; שילוב בסיסי טיפוסי מתחיל מ-$1,250. חיסכון שנתי: מעל $6,000.
טעויות נפוצות וכיצד להימנע מהן
- קוד עיר CDEK שגוי. השתמש בשיטה
class CdekAuthService { private const TOKEN_URL = 'https://api.cdek.ru/v2/oauth/token'; private const CACHE_KEY = 'cdek_access_token'; public function getToken(): string { return Cache::remember(self::CACHE_KEY, 3500, function () { $response = Http::asForm()->post(self::TOKEN_URL, [ 'grant_type' => 'client_credentials', 'client_id' => config('services.cdek.client_id'), 'client_secret' => config('services.cdek.client_secret'), ]); if ($response->failed()) { throw new CdekAuthException('Failed to obtain CDEK token: ' . $response->body()); } return $response->json('access_token'); }); } }ושמור את המדריך במטמון. - פגיית אסימון. שמור את האסימון במטמון עם מרווח של 100 שניות, כמו בדוגמה.
- ממדים שגויים. כל הממדים בס"מ, משקל בגרמים, אחרת החישוב שגוי.
- webhook שאבד. הגדר ניסיונות חוזרים וניטור: אם CDEK לא מקבל 200, הוא מנסה לשלוח שוב.
לצוות שלנו יש למעלה מ-10 פרויקטים מוצלחים עם שילוב CDEK ו-5 שנות ניסיון בעבודה עם APIs של שירותי משלוחים. תיעוד ה-API הרשמי של CDEK זמין ב-תיעוד API של CDEK. בקש ייעוץ — נעזור לך לשלב משלוחים במהירות וללא שגיאות.







