| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- <?php
- namespace App\Console\Commands;
- use App\Services\Payment\PaymentProviderCatalog;
- use App\Services\Payment\PaymentProviderConfig;
- use Illuminate\Console\Command;
- use Illuminate\Support\Facades\Log;
- use Throwable;
- class ImportPaymentProviderConfig extends Command
- {
- protected $signature = 'payment:config-import-env
- {--company=* : 支付公司代码,可重复指定;省略则全部}
- {--write : 实际导入数据库;默认仅预览}';
- protected $description = '将当前生效的支付环境配置补入后台,保留已有后台值,不输出密钥明文';
- public function handle(PaymentProviderConfig $config): int
- {
- $codes = $this->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;
- }
- }
|