option('email'); $createIfMissing = $this->option('create-if-missing'); $this->info("🔍 در حال پیدا کردن کاربر وردپرس: $wpEmail"); // ۱. پیدا کردن کاربر لاراول $laravelUser = User::where('email', $wpEmail)->first(); if (!$laravelUser) { if ($createIfMissing) { $this->warn("کاربر در لاراول یافت نشد. در حال ایجاد..."); $laravelUser = User::create([ 'name' => 'IFNEX Admin', 'email' => $wpEmail, 'password' => bcrypt('password'), 'role' => UserRole::SuperAdmin, 'is_active' => true, ]); $this->info("✅ کاربر در لاراول ایجاد شد: ID {$laravelUser->id}"); } else { $this->error("❌ کاربر در لاراول یافت نشد. از --create-if-missing استفاده کنید."); return 1; } } else { $this->info("✅ کاربر در لاراول پیدا شد: ID {$laravelUser->id} ({$laravelUser->name})"); } // ۲. پاک کردن توکن‌های قدیمی $oldCount = $laravelUser->tokens()->count(); $laravelUser->tokens()->delete(); $this->info("🗑️ {$oldCount} توکن قدیمی پاک شد."); // ۳. ساخت توکن جدید $token = $laravelUser->createToken('wordpress-bridge')->plainTextToken; $this->newLine(); $this->line('========================================'); $this->info('🔑 توکن Sanctum جدید (کپی کنید):'); $this->line('========================================'); $this->newLine(); $this->line($token); $this->newLine(); $this->line('========================================'); $this->newLine(); // ۴. ذخیره توکن در دیتابیس وردپرس $this->info("💾 در حال ذخیره توکن در دیتابیس وردپرس..."); try { $wpPdo = DB::connection('mysql')->getPdo(); // اتصال به دیتابیس وردپرس $wpDbName = env('WP_DB_NAME', 'ifnexwp'); $wpPdo->exec("USE `$wpDbName`"); // ذخیره توکن در user meta $stmt = $wpPdo->prepare(' INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (1, "ifnex_laravel_token", :token) ON DUPLICATE KEY UPDATE meta_value = :token '); $stmt->execute(['token' => $token]); // ذخیره تاریخ انقضا $expiry = date('Y-m-d H:i:s', strtotime('+30 days')); $stmt = $wpPdo->prepare(' INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (1, "ifnex_laravel_token_expiry", :expiry) ON DUPLICATE KEY UPDATE meta_value = :expiry '); $stmt->execute(['expiry' => $expiry]); $this->info("✅ توکن در دیتابیس وردپرس ذخیره شد."); $this->info(" User ID: 1 (admin)"); $this->info(" Token: " . substr($token, 0, 20) . "..."); $this->info(" Expires: $expiry"); } catch (\Exception $e) { $this->error("❌ خطا در ذخیره توکن در وردپرس: " . $e->getMessage()); $this->warn("توکن تولید شد ولی در وردپرس ذخیره نشد."); $this->warn("لطفاً دستی در دیتابیس وردپرس ذخیره کنید."); } // ۵. تست نهایی $this->newLine(); $this->info("🧪 در حال تست اتصال..."); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://localhost:8000/api/v1/wallet/balance'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . $token, 'Accept: application/json', ]); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($http_code === 200) { $data = json_decode($response, true); $this->info("✅ اتصال موفق!"); $this->info(" موجودی کیف پول: " . number_format($data['balance']) . " ریال"); $this->info(" کل واریزی: " . number_format($data['total_deposited']) . " ریال"); $this->info(" کل برداشت: " . number_format($data['total_withdrawn']) . " ریال"); } else { $this->error("❌ تست ناموفق: HTTP $http_code"); $this->line(substr($response, 0, 200)); } $this->newLine(); $this->info("🎉 آماده تست در وردپرس!"); $this->info(" آدرس: http://localhost/ifnexwp/?page_id=16"); $this->info(" ورود: admin / admin"); return 0; } }