self::SUBJECT_DELIVERED,
];
- $imapConfig = Yii::$app->params['IMAP_FLOWWOW'];
- $hostname = $imapConfig['host'];
+ $imapConfig = Yii::$app->params['IMAP_FLOWWOW'] ?? null;
+
+ // Валидация конфигурации IMAP
+ if (!$imapConfig || !is_array($imapConfig)) {
+ Yii::error('Конфигурация IMAP_FLOWWOW не найдена в params.php', __METHOD__);
+ if ($progressCallback) {
+ call_user_func($progressCallback, "Ошибка: конфигурация IMAP_FLOWWOW не найдена");
+ }
+ return 0;
+ }
+
+ $hostname = $imapConfig['host'] ?? '';
if ($useAlternateMailbox) {
- $username = $imapConfig['alternate']['username'];
- $password = $imapConfig['alternate']['password'];
+ $username = $imapConfig['alternate']['username'] ?? '';
+ $password = $imapConfig['alternate']['password'] ?? '';
} else {
- $username = $imapConfig['primary']['username'];
- $password = $imapConfig['primary']['password'];
+ $username = $imapConfig['primary']['username'] ?? '';
+ $password = $imapConfig['primary']['password'] ?? '';
+ }
+
+ // Валидация IMAP credentials перед подключением
+ if (empty($hostname) || empty($username) || empty($password)) {
+ $mailboxType = $useAlternateMailbox ? 'alternate' : 'primary';
+ Yii::error("IMAP credentials не настроены для {$mailboxType} mailbox. Проверьте IMAP_FLOWWOW в .env", __METHOD__);
+ if ($progressCallback) {
+ call_user_func($progressCallback, "Ошибка: IMAP credentials не настроены для {$mailboxType} mailbox");
+ }
+ return 0;
}
if ($progressCallback) {
->where(['warehouse_guid' => (string)$campaignId])
->andWhere(['warehouse_id' => 1])->one();
+ // Проверка существования магазина
+ if ($store === null) {
+ Yii::error("Магазин с warehouse_guid={$campaignId} и warehouse_id=1 не найден", __METHOD__);
+ return null;
+ }
+
$marketplaceOrder = new MarketplaceOrders();
$marketplaceOrder->marketplace_order_id = (string)$order['number'];
$marketplaceOrder->creation_date = date('Y-m-d H:i:s', strtotime($order['date']));
private function sendTelegramMessage(string $chatId, string $message): array
{
$botToken = $this->getTelegramBotToken();
+
+ // Валидация токена бота
+ if (empty($botToken)) {
+ $envVar = $this->isDevEnvironment() ? 'TELEGRAM_BOT_TOKEN' : 'TELEGRAM_BOT_TOKEN_PROD';
+ $this->logError("Telegram bot token не установлен. Проверьте переменную окружения {$envVar}");
+ return ['success' => false, 'retry_after' => null, 'error' => "Telegram bot token не установлен ({$envVar})"];
+ }
+
$url = "https://api.telegram.org/bot{$botToken}/sendMessage";
$ch = curl_init();