setName('shopro_huifu:upload-split-media') ->addOption('home-url', null, Option::VALUE_REQUIRED, '首页截图 HTTPS 地址') ->addOption('goods-url', null, Option::VALUE_REQUIRED, '商品/服务明细页截图') ->addOption('order-url', null, Option::VALUE_REQUIRED, '下单场景页截图') ->addOption('pay-url', null, Option::VALUE_REQUIRED, '支付页截图') ->addOption('media-name', null, Option::VALUE_OPTIONAL, '小程序名称,默认 橙虎小酒') ->addOption('media-type', null, Option::VALUE_OPTIONAL, '运营媒介类型,小程序默认 S3') ->addOption('file-type', null, Option::VALUE_OPTIONAL, '汇付图片上传 file_type,默认 F24') ->addOption('save-config', null, Option::VALUE_NONE, '写入 shopro_huifu_config.split_config_online_media_json') ->setDescription('Upload miniprogram media screenshots for split/config (apply_ratio>20%)'); } protected function execute(Input $input, Output $output) { if (!Bridge::isEnabled()) { $output->writeln('[FAIL] 汇付插件未启用'); return 1; } $urls = [ 'media_front_page' => trim((string) $input->getOption('home-url')), 'media_service_page' => trim((string) $input->getOption('goods-url')), 'media_order_page' => trim((string) $input->getOption('order-url')), 'media_pay_page' => trim((string) $input->getOption('pay-url')), ]; $labels = [ 'media_front_page' => 'home-url', 'media_service_page' => 'goods-url', 'media_order_page' => 'order-url', 'media_pay_page' => 'pay-url', ]; foreach ($urls as $key => $url) { if ($url === '') { $output->writeln('[FAIL] 缺少 --' . $labels[$key]); return 1; } } $fileType = trim((string) $input->getOption('file-type')); if ($fileType === '') { $fileType = 'F24'; } $mediaName = trim((string) $input->getOption('media-name')); if ($mediaName === '') { $mediaName = '橙虎小酒'; } $mediaType = trim((string) $input->getOption('media-type')); if ($mediaType === '') { $mediaType = 'S3'; } $picture = new HuifuOnboardPicture(); $fileIds = []; foreach ($urls as $field => $url) { $output->writeln('上传 ' . $field . ' ...'); $fileIds[$field] = $picture->uploadByUrl($fileType, $url); $output->writeln(' file_id: ' . $fileIds[$field]); } $item = [ 'media_type' => $mediaType, 'media_name' => $mediaName, 'media_mer_common_flag' => 'Y', 'media_front_page' => $fileIds['media_front_page'], 'media_service_page' => $fileIds['media_service_page'], 'media_order_page' => $fileIds['media_order_page'], 'media_pay_page' => $fileIds['media_pay_page'], ]; $appId = trim((string) Bridge::getMiniProgramAppId()); if ($appId !== '') { $item['app_id'] = $appId; } $json = json_encode([$item], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $output->writeln(''); $output->writeln('split_config_online_media_json(可复制到 fa_shopro_huifu_config):'); $output->writeln($json); if ($input->getOption('save-config')) { $row = Db::name('shopro_huifu_config')->where('name', 'split_config_online_media_json')->find(); if ($row) { Db::name('shopro_huifu_config')->where('name', 'split_config_online_media_json')->update(['value' => $json]); } else { Db::name('shopro_huifu_config')->insert([ 'name' => 'split_config_online_media_json', 'value' => $json, 'group' => 'split', 'description' => 'split/config online_media_info_list JSON', ]); } HuifuConfig::reload(); $output->writeln('[OK] 已写入 split_config_online_media_json'); } $output->writeln(''); $output->writeln('下一步: php think shopro_huifu:sync-split-receivers'); return 0; } }