| | | 1 | | namespace Services.BitrixStockServices; |
| | | 2 | | |
| | | 3 | | /// <summary>Перевод типовых ошибок Ozon Seller API при обновлении остатков.</summary> |
| | | 4 | | public static class BitrixOzonStockErrorMapper |
| | | 5 | | { |
| | | 6 | | public static string Map(string? raw) |
| | | 7 | | { |
| | 4 | 8 | | if (string.IsNullOrWhiteSpace(raw)) |
| | 0 | 9 | | return "Неизвестная ошибка"; |
| | | 10 | | |
| | 4 | 11 | | var s = raw.Trim().Replace('_', ' '); |
| | | 12 | | |
| | 4 | 13 | | if (s.Contains("updated too frequently", StringComparison.OrdinalIgnoreCase) || |
| | 4 | 14 | | s.Contains("stock is updated too frequently", StringComparison.OrdinalIgnoreCase)) |
| | 2 | 15 | | return "Остаток обновляется слишком часто — подождите 1–2 мин и повторите"; |
| | | 16 | | |
| | 2 | 17 | | if (s.Contains("product is not created", StringComparison.OrdinalIgnoreCase) || |
| | 2 | 18 | | s.Contains("not created", StringComparison.OrdinalIgnoreCase)) |
| | 2 | 19 | | return "Товар не создан на складе Ozon (проверьте карточку и привязку склада)"; |
| | | 20 | | |
| | 0 | 21 | | if (s.Contains("not moderated", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 22 | | return "Товар не прошёл модерацию"; |
| | | 23 | | |
| | 0 | 24 | | if (s.Contains("tags validation failed", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 25 | | return "Не продаётся (ошибка атрибутов)"; |
| | | 26 | | |
| | 0 | 27 | | if (s.Contains("not found", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 28 | | return "Товар не найден в Ozon"; |
| | | 29 | | |
| | 0 | 30 | | if (s.Contains("restore limit exceeded", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 31 | | return "Превышен лимит разархивации товаров"; |
| | | 32 | | |
| | 0 | 33 | | if (s.Contains("quota", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 34 | | return "Превышен лимит запросов к API"; |
| | | 35 | | |
| | 0 | 36 | | if (s.Contains("rate limit", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 37 | | return "Слишком много запросов (rate limit)"; |
| | | 38 | | |
| | 0 | 39 | | if (s.Contains("unauthorized", StringComparison.OrdinalIgnoreCase) || |
| | 0 | 40 | | s.Contains("forbidden", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 41 | | return "Ошибка авторизации Ozon API"; |
| | | 42 | | |
| | 0 | 43 | | if (s.Contains("warehouse", StringComparison.OrdinalIgnoreCase) && |
| | 0 | 44 | | s.Contains("not found", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 45 | | return "Склад Ozon не найден"; |
| | | 46 | | |
| | 0 | 47 | | if (s.Contains("invalid", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 48 | | return "Некорректные данные запроса"; |
| | | 49 | | |
| | 0 | 50 | | if (s.Contains("not sell", StringComparison.OrdinalIgnoreCase) || |
| | 0 | 51 | | s.Contains("not active", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 52 | | return "Товар не продаётся"; |
| | | 53 | | |
| | 0 | 54 | | if (s.Contains("limit", StringComparison.OrdinalIgnoreCase)) |
| | 0 | 55 | | return "Превышен лимит"; |
| | | 56 | | |
| | 0 | 57 | | return s; |
| | | 58 | | } |
| | | 59 | | } |