דְרוֹפְּשִׁיפִּינְג עומד בפני בעיה: מחירי הרכישה משתנים, ועדכון ידני של מחירי הקמעונאות מוביל לשגיאות ולאובדן מרווח. לפי הנתונים שלנו, עדכון ידני לחנות עם 500 מוצרים אורך 8 שעות בשבוע וגורם ל-5–10% פריטים שגויים — אובדן הכנסות ישיר. אוטומציה של סנכרון מחירים פותרת את זה: יישמנו פתרונות ל-50+ חנויות מקוונות, קיצרנו את זמן העדכון פי 10 וביטלנו שגיאות לחלוטין. כפי שצוין בויקיפדיה, דְרוֹפְּשִׁיפִּינְג דורש אוטומציה כדי להתרחב. מחירי הספק משתנים בלוח זמנים (רשימת מחירים חדשה שבועית) או בזמן אמת (מוצרים הנסחרים בבורסה, תלות במטבע, תמחור דינמי). ללא אוטומציה, החנות מפסידה מרווח כשמחירי הרכישה עולים או מפסידה למתחרים כשהם יורדים. הניסיון שלנו עוזר להימנע מבעיות אלה: במשך השנים חידדנו תוכנית סנכרון אמינה שמעדכנת מחירים פי 10 מהר יותר מהזנה ידנית ומבטלת לחלוטין שגיאות אנוש.
למה סנכרון אוטומטי חשוב
עדכון ידני של אלפי מוצרים הוא דרך לשגיאות ולאובדן רווח. דמיינו: הספק מוריד את מחיר הרכישה ב-30% ואתם לא יודעים — המתחרים כבר מוכרים cheaper ואתם מפסידים מכירות. או להיפך, עלייה חדה של 40% אוכלת את המרווח שלכם אם לא מעלים את הקמעונאות בזמן. אוטומציה מבטיחה שמחיר הקמעונאות תמיד משקף את מחיר הרכישה הנוכחי עם המרווח הרצוי. כתוצאה מכך, המרווח נשמר והלקוחות רואים מחירים נכונים. אנו מטפלים באינטגרציה עם כל סוג של ספק.
מקורות מחיר: השוואת גישות
| מקור | תדירות עדכון | מורכבות | אמינות |
|---|---|---|---|
| REST API | זמן אמת | בינונית | גבוהה |
| FTP/CSV רשימת מחירים | פעם ביום | נמוכה | גבוהה |
| Webhook מהספק | מיידי | בינונית | גבוהה |
| גירוד אתר | מתוזמן | גבוהה | נמוכה (דורש תחזוקה) |
סוגי כללי מרווח
| סוג כלל | יישום | דוגמה |
|---|---|---|
| אחוז | אחוז קבוע אוניברסלי | 25% על כל המוצרים |
| סכום קבוע | הוספת קבוע | +$1–1 למחיר הרכישה |
| טבלה מדורגת | לפלחי מחיר שונים | עד 1000: 40%, 1000–5000: 25%, מעל: 15% |
שגיאות אופייניות בסנכרון ידני
אפילו מנהלים מנוסים עושים טעויות:
- שגיאות הזנה: ספרות מוחלפות, אפסים מיותרים, מטבע שגוי.
- עדכונים שהוחמצו: שכחו לעדכן מחיר של מוצר פופולרי — המכירות נעצרות.
- חוסר עקביות: עובדים שונים מיישמים מרווח שונה על אותו מוצר.
- אין היסטוריה: אי אפשר לעקוב מתי ולמה מחיר השתנה.
אוטומציה מבטלת שגיאות אלה, וכל היסטוריית השינויים נשמרת בטבלה ייעודית — תמיד יודעים מי עדכן את המחיר ומתי.
איך אנו מיישמים סנכרון
שלבי העבודה: ניתוח המצב הנוכחי → עיצוב ארכיטקטורה → יישום ב-Laravel (PHP 8.3+) → בדיקה על נתונים אמיתיים → פריסה עם ניטור. אנו עושים הכל במפתח אחד.
- ניתוח — לימוד מקורות מחיר ודרישות מרווח.
- עיצוב — בחירת ארכיטקטורה וכללי מרווח.
- יישום — כתיבת קוד, אינטגרציה עם הספק.
- בדיקה — הרצה על נתונים היסטוריים, בדיקת הגנת חריגות.
- השקה — פריסה והגדרת ניטור.
אחסון היסטוריית מחירים
Schema::create('dropship_price_log', function (Blueprint $table) { $table->id(); $table->foreignId('dropship_product_id')->constrained(); $table->decimal('prev_supplier_price', 10, 2); $table->decimal('new_supplier_price', 10, 2); $table->decimal('prev_retail_price', 10, 2)->nullable(); $table->decimal('new_retail_price', 10, 2)->nullable(); $table->decimal('margin_percent', 5, 2)->nullable(); $table->string('source')->default('sync'); $table->timestamp('recorded_at'); $table->index(['dropship_product_id', 'recorded_at']); }); מחשבון מחיר קמעונאי
מחיר הקמעונאות מחושב ממחיר הרכישה באמצעות כללי מרווח. הכללים יכולים להיות גלובליים, ברמת הספק, ברמת הקטגוריה או מוצר ספציפי.
class PriceCalculator { public function calculate(DropshipProduct $dp): float { $supplierPrice = $dp->supplier_price; $marginRule = $this->resolveMarginRule($dp); return match($marginRule->type) { 'percent' => round($supplierPrice * (1 + $marginRule->value / 100), 2), 'fixed' => round($supplierPrice + $marginRule->value, 2), 'markup_table' => $this->applyMarkupTable($supplierPrice, $marginRule->table), }; } private function resolveMarginRule(DropshipProduct $dp): MarginRule { // Приоритет: товар > категория > поставщик > глобальные настройки return $dp->margin_rule ?? $dp->product?->category?->margin_rule ?? $dp->supplier->margin_rule ?? MarginRule::getDefault(); } /** * Ступенчатая наценка: дорогие товары — меньший % * [до 1000 → +40%, 1000–5000 → +25%, 5000+ → +15%] */ private function applyMarkupTable(float $price, array $table): float { foreach ($table as $tier) { if ($price <= $tier['max_price']) { return round($price * (1 + $tier['percent'] / 100), 2); } } // Последний уровень без ограничения максимума $last = end($table); return round($price * (1 + $last['percent'] / 100), 2); } } עבודת סנכרון מחירים
class SyncSupplierPricesJob implements ShouldQueue { public $tries = 3; public $backoff = [60, 300, 900]; public function handle( SupplierConnectorFactory $factory, PriceCalculator $calculator, ): void { $connector = $factory->make($this->supplier); $priceList = $connector->getPriceList(); // массив [sku => price] $updatedCount = 0; foreach ($priceList as $sku => $newSupplierPrice) { $dp = DropshipProduct::where([ 'supplier_id' => $this->supplier->id, 'supplier_sku' => $sku, ])->first(); if (!$dp) continue; // Пропускаем, если цена не изменилась if (abs($dp->supplier_price - $newSupplierPrice) < 0.01) continue; $prevSupplierPrice = $dp->supplier_price; $prevRetailPrice = $dp->product?->price; $dp->update(['supplier_price' => $newSupplierPrice]); // Пересчитываем розничную цену, если нет ручной фиксации $newRetailPrice = null; if ($dp->product && !$dp->product->price_locked) { $newRetailPrice = $calculator->calculate($dp); $dp->product->update(['price' => $newRetailPrice]); } DropshipPriceLog::create([ 'dropship_product_id' => $dp->id, 'prev_supplier_price' => $prevSupplierPrice, 'new_supplier_price' => $newSupplierPrice, 'prev_retail_price' => $prevRetailPrice, 'new_retail_price' => $newRetailPrice, 'source' => 'sync', 'recorded_at' => now(), ]); $updatedCount++; } Log::info('Price sync completed', [ 'supplier' => $this->supplier->slug, 'updated' => $updatedCount, ]); } } איך למנוע קפיצות מחיר פתאומיות
לפעמים רשימת המחירים של הספק מכילה מחירים שגויים (אפס, ערך גבוה מאוד, שגיאת הקלדה). ללא הגנה, החנות תציג מחיר קמעונאי שגוי. אנו מיישמים בדיקת חריגות: אם שינוי מחיר הרכישה עולה על סף מוגדר (לדוגמה, 50%), המוצר מסומן לבדיקה ידנית. לדוגמה, המחיר היה $9–13, הספק שולח 1500 (שינוי של 50%) — בסף של 50% זה מותר. אבל אם השינוי הוא 100% (ל-$18–26), המוצר עובר לבדיקה ידנית. המנהל רואה פריטים חשודים בקטע ניהולי ייעודי ויכול לאשר או לדחות את העדכון.
class PriceSanityChecker { private const MAX_CHANGE_PERCENT = 50; // не обновляем, если изменение > 50% public function isSafe(float $prevPrice, float $newPrice): bool { if ($newPrice <= 0) return false; if ($prevPrice <= 0) return true; // первая цена — принимаем любую положительную $changePercent = abs($newPrice - $prevPrice) / $prevPrice * 100; if ($changePercent > self::MAX_CHANGE_PERCENT) { // Логируем для ручной проверки Log::warning('Suspicious price change detected', [ 'prev' => $prevPrice, 'new' => $newPrice, 'change%' => round($changePercent, 1), ]); return false; } return true; } } מוצרים עם שינויי מחיר חשודים מוכנסים לתור בדיקה ידנית — המנהל רואה אותם בקטע ניהולי נפרד. זה מונע קביעת מחיר קמעונאי שגוי. כתוצאה מכך, קפיצות חדות לא עוברות אוטומטית; הן דורשות אישור אנושי.
המרת מטבע ושערי חליפין
אם הספק מתמחר ב-USD או EUR והחנות פועלת ב-USD:
class CurrencyPriceConverter { public function convert(float $price, string $fromCurrency, string $toCurrency): float { if ($fromCurrency === $toCurrency) return $price; $rate = Cache::remember( "exchange_rate_{$fromCurrency}_{$toCurrency}", 3600, // кэш на 1 час fn() => $this->fetchRate($fromCurrency, $toCurrency) ); return round($price * $rate, 2); } private function fetchRate(string $from, string $to): float { // Центробанк РФ: cbr.ru/scripts/XML_daily.asp // Или openexchangerates.org, fixer.io $response = Http::get('https://api.exchangerate-api.com/v4/latest/' . $from); return $response->json("rates.{$to}"); } } מה כלול
- אינטגרציה עם כל מקור מחיר (API, CSV, webhooks)
- הגדרת כללי מרווח (אחוז, קבוע, מדורג)
- יישום הגנת קפיצות חריגות
- אחסון והצגת היסטוריית שינויים
- המרת מטבע עם caching
- תיעוד תפעולי והכשרת צוות
- תמיכה לאחר השקה
צרו קשר לייעוץ על הפרויקט שלכם. נעזור להפוך את התמחור לאוטומטי ולהגן על המרווח שלכם.
לוחות זמנים משוערים
סנכרון מחירים עם ספק אחד + מחשבון מרווח — מכמה ימי עבודה. מרווח מדורג, המרת מטבע, הגנת קפיצות — הוסיפו עד יומיים נוספים. העלות הסופית מחושבת באופן אישי — השאירו בקשה ונשוחח על הפרויקט שלכם. המהנדסים שלנו מבטיחים פעולה אמינה של הפתרון. קבלו ייעוץ והערכת פרויקט — נעזור להפוך את התמחור לאוטומטי ולהגן על המרווח שלכם.







