option('company'); if (array_diff($codes, PaymentProviderCatalog::codes()) !== []) { $this->error('支付公司代码无效,可选:' . implode(', ', PaymentProviderCatalog::codes())); return self::FAILURE; } $write = (bool)$this->option('write'); $this->line('读取当前生效的 Laravel 配置及默认网关;若刚修改 .env,请先执行 php artisan config:cache。'); try { $report = $config->importDefaults($codes, $write); } catch (Throwable $e) { Log::error('payment_provider_config_import_failed', ['exception' => $e]); $this->error('导入失败,请检查数据库迁移、数据库连接及 APP_KEY;详情见日志。'); return self::FAILURE; } $this->table(['支付公司', $write ? '已导入字段' : '待导入字段', '保留后台字段', '未配置字段'], array_map(fn ($row) => [$row['payment_company'] . ' / ' . $row['label'], implode(', ', $row['imported']) ?: '-', implode(', ', $row['preserved']) ?: '-', implode(', ', $row['empty']) ?: '-'], $report)); $count = array_sum(array_map(fn ($row) => count($row['imported']), $report)); $this->info($write ? "已导入 {$count} 个字段;已有后台值保留,密钥加密存储。" : "预览:将导入 {$count} 个字段,未写入数据库;添加 --write 执行。"); return self::SUCCESS; } }