From a7173dd60c6fb6fa47ba7f03df1766e129cda8f5 Mon Sep 17 00:00:00 2001 From: liapples Date: Sat, 11 Sep 2021 16:46:37 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Extensions/Grid/AuditAgent.php | 2 +- app/Admin/Extensions/Grid/AuditAgentProduct.php | 2 +- app/Admin/Extensions/Grid/AuditDemandProduct.php | 2 +- app/Admin/Extensions/Grid/AuditGuide.php | 2 +- app/Admin/Extensions/Grid/AuditProduct.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Admin/Extensions/Grid/AuditAgent.php b/app/Admin/Extensions/Grid/AuditAgent.php index a298593..0e1ea90 100644 --- a/app/Admin/Extensions/Grid/AuditAgent.php +++ b/app/Admin/Extensions/Grid/AuditAgent.php @@ -13,7 +13,7 @@ use Illuminate\Support\Facades\DB; /** * 供应商审核 - * Class AuditSupplier + * Class AuditAgent * @package App\Admin\Extensions\Grid */ class AuditAgent extends RowAction diff --git a/app/Admin/Extensions/Grid/AuditAgentProduct.php b/app/Admin/Extensions/Grid/AuditAgentProduct.php index 7c4f637..e00975b 100644 --- a/app/Admin/Extensions/Grid/AuditAgentProduct.php +++ b/app/Admin/Extensions/Grid/AuditAgentProduct.php @@ -8,7 +8,7 @@ use Illuminate\Http\Request; /** * 供应商审核 - * Class AuditSupplier + * Class AuditAgentProduct * @package App\Admin\Extensions\Grid */ class AuditAgentProduct extends RowAction diff --git a/app/Admin/Extensions/Grid/AuditDemandProduct.php b/app/Admin/Extensions/Grid/AuditDemandProduct.php index cdbfa3f..9d8b532 100644 --- a/app/Admin/Extensions/Grid/AuditDemandProduct.php +++ b/app/Admin/Extensions/Grid/AuditDemandProduct.php @@ -9,7 +9,7 @@ use Illuminate\Http\Request; /** * 供应商审核 - * Class AuditSupplier + * Class AuditDemandProduct * @package App\Admin\Extensions\Grid */ class AuditDemandProduct extends RowAction diff --git a/app/Admin/Extensions/Grid/AuditGuide.php b/app/Admin/Extensions/Grid/AuditGuide.php index ce02a73..3b80140 100644 --- a/app/Admin/Extensions/Grid/AuditGuide.php +++ b/app/Admin/Extensions/Grid/AuditGuide.php @@ -10,7 +10,7 @@ use Illuminate\Support\Facades\DB; /** * 供应商审核 - * Class AuditSupplier + * Class AuditGuide * @package App\Admin\Extensions\Grid */ class AuditGuide extends RowAction diff --git a/app/Admin/Extensions/Grid/AuditProduct.php b/app/Admin/Extensions/Grid/AuditProduct.php index e66c330..07989c3 100644 --- a/app/Admin/Extensions/Grid/AuditProduct.php +++ b/app/Admin/Extensions/Grid/AuditProduct.php @@ -8,7 +8,7 @@ use Illuminate\Http\Request; /** * 供应商审核 - * Class AuditSupplier + * Class AuditProduct * @package App\Admin\Extensions\Grid */ class AuditProduct extends RowAction From 66d54c93375e0e0b2f1a86f6b29a744fa1cdca73 Mon Sep 17 00:00:00 2001 From: shuixiang Date: Sat, 11 Sep 2021 17:09:41 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E9=97=AE=E9=A2=98=E2=80=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/AdminSupplier/Controllers/ProductController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/AdminSupplier/Controllers/ProductController.php b/app/AdminSupplier/Controllers/ProductController.php index fbfc01b..4e7947a 100644 --- a/app/AdminSupplier/Controllers/ProductController.php +++ b/app/AdminSupplier/Controllers/ProductController.php @@ -241,7 +241,7 @@ class ProductController extends AdminController } DB::commit(); - return $form->response()->success('更新成功!')->script('history.go(-1)'); + return $form->response()->success('更新成功!')->redirect('product/list'); } catch (\Exception $exception) { DB::rollBack(); return $form->response()->error($exception->getMessage()); From 659b3be092737e6bb7c2d072faad7ba72f4ec032 Mon Sep 17 00:00:00 2001 From: liapples Date: Sat, 11 Sep 2021 19:03:35 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=88=86?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MySQL_change.sql | 34 +++++++ app/Admin/Controllers/AgentController.php | 6 ++ .../MiniProgramDraftController.php | 3 + .../MiniProgramTemplateController.php | 11 ++- .../Extensions/Grid/PullTemplateList.php | 56 ++++++++++++ .../Extensions/Grid/UploadMiniProgram.php | 89 +++++++++++++++++++ app/Admin/Repositories/MiniProgramDraft.php | 2 +- app/Admin/Repositories/MiniProgramList.php | 2 +- .../Repositories/MiniProgramTemplate.php | 60 ------------- .../Repositories/MiniProgramTemplateList.php | 21 +++++ .../Controllers/AgentController.php | 18 ++-- app/Models/MiniProgramTemplateList.php | 11 +++ app/Models/MiniProgramUploadLog.php | 11 +++ resources/lang/zh_CN/mini-program.php | 3 +- 14 files changed, 253 insertions(+), 74 deletions(-) create mode 100644 app/Admin/Extensions/Grid/PullTemplateList.php create mode 100644 app/Admin/Extensions/Grid/UploadMiniProgram.php delete mode 100644 app/Admin/Repositories/MiniProgramTemplate.php create mode 100644 app/Admin/Repositories/MiniProgramTemplateList.php create mode 100644 app/Models/MiniProgramTemplateList.php create mode 100644 app/Models/MiniProgramUploadLog.php diff --git a/MySQL_change.sql b/MySQL_change.sql index 474a711..c50c5fa 100644 --- a/MySQL_change.sql +++ b/MySQL_change.sql @@ -282,3 +282,37 @@ ALTER TABLE `suppliers` ALTER TABLE `orders` ADD COLUMN `pay_user_id` INT NOT NULL DEFAULT 0 COMMENT '支付用户的user_id(跳转到外部小程序支付时用到)' AFTER `agent_cloud_price`; +# 18:47 2021/9/11 +ALTER TABLE `agents` + CHANGE COLUMN `appid` `appid` VARCHAR(30) NULL COMMENT '微信AppID' COLLATE 'utf8_general_ci' AFTER `remember_token`, + CHANGE COLUMN `appsecret` `appsecret` CHAR(32) NULL COMMENT '微信AppSecret' COLLATE 'utf8_general_ci' AFTER `appid`, + CHANGE COLUMN `mchid` `mchid` VARCHAR(32) NULL COMMENT '微信支付mch_id' COLLATE 'utf8_general_ci' AFTER `appsecret`, + CHANGE COLUMN `mchkey` `mchkey` CHAR(32) NULL COMMENT '微信支付key' COLLATE 'utf8_general_ci' AFTER `mchid`; + +CREATE TABLE `mini_program_template_lists` ( + `template_id` INT(10) NOT NULL, + `user_version` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '版本号' COLLATE 'utf8_general_ci', + `user_desc` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '描述' COLLATE 'utf8_general_ci', + `source_miniprogram_appid` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '来源小程序' COLLATE 'utf8_general_ci', + `source_miniprogram` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模板小程序APPID' COLLATE 'utf8_general_ci', + `developer` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '上传者微信昵称' COLLATE 'utf8_general_ci', + `template_type` INT(10) NOT NULL DEFAULT '0' COMMENT '模板ID', + `create_time` INT(10) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`template_id`) USING BTREE +) +COMMENT='小程序模板列表' +COLLATE='utf8_general_ci' +ENGINE=InnoDB; + +CREATE TABLE `mini_program_upload_logs` ( + `id` INT(10) NOT NULL AUTO_INCREMENT, + `agent_id` INT(10) NOT NULL COMMENT '代理商ID', + `appid` VARCHAR(50) NOT NULL COMMENT '代理商APPID' COLLATE 'utf8_general_ci', + `template_id` INT(10) NOT NULL COMMENT '小程序template_id', + `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) USING BTREE, + INDEX `agent_id` (`agent_id`) USING BTREE +) +COMMENT='注册小程序日志' +COLLATE='utf8_general_ci' +ENGINE=InnoDB; diff --git a/app/Admin/Controllers/AgentController.php b/app/Admin/Controllers/AgentController.php index 96375f7..9b4c8cf 100644 --- a/app/Admin/Controllers/AgentController.php +++ b/app/Admin/Controllers/AgentController.php @@ -3,6 +3,7 @@ namespace App\Admin\Controllers; use App\Admin\Extensions\Grid\AuditAgent; +use App\Admin\Extensions\Grid\UploadMiniProgram; use App\Admin\Repositories\Agent; use App\Common\AgentType; use App\Common\UserStatus; @@ -51,6 +52,11 @@ class AgentController extends AdminController $column->append((new AuditAgent(null, 1))->setKey($this->id))->append(' '); $column->append((new AuditAgent(null, 2))->setKey($this->id)); }) + ->if(fn() => $this->status == UserStatus::NORMAL) + ->display('') + ->then(function ($column) { + $column->append((new UploadMiniProgram())->setKey($this->id)); + }) ->else() ->using(UserStatus::array()) ->dot([ diff --git a/app/Admin/Controllers/MiniProgramDraftController.php b/app/Admin/Controllers/MiniProgramDraftController.php index f32f4e7..e0c920e 100644 --- a/app/Admin/Controllers/MiniProgramDraftController.php +++ b/app/Admin/Controllers/MiniProgramDraftController.php @@ -19,6 +19,7 @@ class MiniProgramDraftController extends AdminController return Grid::make(new MiniProgramDraft, function (Grid $grid) { $grid->disableCreateButton(); $grid->disableRowSelector(); + $grid->disableActions(); $grid->column('draft_id'); $grid->column('user_version'); @@ -27,6 +28,8 @@ class MiniProgramDraftController extends AdminController $grid->column('source_miniprogram_appid'); $grid->column('developer'); $grid->column('create_time')->display(fn($v) => date('Y-m-d H:i:s', $v)); + + $grid->column('op'); }); } } diff --git a/app/Admin/Controllers/MiniProgramTemplateController.php b/app/Admin/Controllers/MiniProgramTemplateController.php index f97b6d6..dc0dbd9 100644 --- a/app/Admin/Controllers/MiniProgramTemplateController.php +++ b/app/Admin/Controllers/MiniProgramTemplateController.php @@ -1,7 +1,8 @@ disableCreateButton(); $grid->disableRowSelector(); + $grid->disableViewButton(); + $grid->disableEditButton(); + + $grid->disableDeleteButton(); + + $grid->tools(new PullTemplateList); $grid->column('template_id'); $grid->column('template_type')->using([0 => '普通模板', 1 => '标准模板']); diff --git a/app/Admin/Extensions/Grid/PullTemplateList.php b/app/Admin/Extensions/Grid/PullTemplateList.php new file mode 100644 index 0000000..2364c4d --- /dev/null +++ b/app/Admin/Extensions/Grid/PullTemplateList.php @@ -0,0 +1,56 @@ +appendHtmlAttribute('class', 'btn btn-primary'); + $this->defaultHtmlAttribute('href', 'javascript:;'); + + return "formatHtmlAttributes()}>{$this->title}"; + } + + public function handle(Request $request) + { + try { + $setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']); + $config = [ + 'app_id' => $setting['service_appid'], + 'secret' => $setting['service_appsecret'], + 'token' => $setting['service_token'], + 'aes_key' => $setting['service_aeskey'], + ]; + + $openPlatform = Factory::openPlatform($config); + $codeTemplate = $openPlatform['code_template']; + $list = $codeTemplate->list(); + + MiniProgramTemplateList::insertOrIgnore($list['template_list']); + //删除不存在的数据 + MiniProgramTemplateList::whereNotIn('template_id', array_column($list['template_list'], 'template_id'))->delete(); + + return $this->response()->success("操作成功")->refresh(); + } catch (\Exception $e) { + return $this->response()->error($e->getMessage()); + } + } + + public function confirm() + { + return ['此操作将数据与腾讯服务器数据同步,是否继续?', '']; + } +} diff --git a/app/Admin/Extensions/Grid/UploadMiniProgram.php b/app/Admin/Extensions/Grid/UploadMiniProgram.php new file mode 100644 index 0000000..95116f0 --- /dev/null +++ b/app/Admin/Extensions/Grid/UploadMiniProgram.php @@ -0,0 +1,89 @@ +appendHtmlAttribute('class', 'btn btn-sm btn-primary'); + $this->defaultHtmlAttribute('href', 'javascript:;'); + + return "formatHtmlAttributes()}>{$this->title}"; + } + + public function handle(Request $request) + { + $template = MiniProgramTemplateList::orderBy('template_id', 'desc')->first(); + if (MiniProgramUploadLog::query()->where(['agent_id' => $this->getKey(), 'template_id' => $template->template_id])->exists()) { + return $this->response()->error('该代理商已经上传过小程序,无需重复上传'); + } + + $agent = Agent::find($this->getKey()); + if (empty($agent->appid)) { + return $this->response()->error('该代理商未注册过小程序,请先注册'); + } + + try { + $setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']); + $config = [ + 'app_id' => $setting['service_appid'], + 'secret' => $setting['service_appsecret'], + 'token' => $setting['service_token'], + 'aes_key' => $setting['service_aeskey'], + ]; + + $openPlatform = \EasyWeChat\Factory::openPlatform($config); + $refreshToken = $openPlatform->getAuthorizer($agent->appid)['authorization_info']['authorizer_refresh_token'] ?? null; + if (!$refreshToken) { + return $this->response()->error('获取refresh_token失败'); + } + $code = $openPlatform->miniProgram($agent->appid, $refreshToken)['code']; + + $templateId = $template->template_id; + $extJson = json_encode(['extAppid' => $agent->appid]); + $version = $template->user_version; + $description = $agent->company_name; + + $commit = $code->commit($templateId, $extJson, $version, $description); +// $qrcode = $code->getQrCode(); + + if (isset($commit['errcode'], $commit['errmsg']) && $commit['errcode'] == 0 && $commit['errmsg'] == 'ok') { + MiniProgramUploadLog::insert([ + 'agent_id' => $agent->id, + 'appid' => $agent->appid, + 'template_id' => $templateId, + ]); + return $this->response()->success("上传成功")->refresh(); + } else { + throw new \Exception(join(',', $commit)); + } + } catch (\Exception $e) { + return $this->response()->error($e->getMessage()); + } + } + + public function confirm() + { + return ['确定要上传小程序吗?', '']; + } +} diff --git a/app/Admin/Repositories/MiniProgramDraft.php b/app/Admin/Repositories/MiniProgramDraft.php index 9da52c9..7c5b6c0 100644 --- a/app/Admin/Repositories/MiniProgramDraft.php +++ b/app/Admin/Repositories/MiniProgramDraft.php @@ -48,7 +48,7 @@ class MiniProgramDraft extends Repository } else { $data['total'] = count($list['draft_list']); $data['subjects'] = $list['draft_list'] ?? []; - Cache::put($cache_key, $list['draft_list'], 120); + Cache::put($cache_key, $list['draft_list'], 180); } } diff --git a/app/Admin/Repositories/MiniProgramList.php b/app/Admin/Repositories/MiniProgramList.php index bb88508..eed7652 100644 --- a/app/Admin/Repositories/MiniProgramList.php +++ b/app/Admin/Repositories/MiniProgramList.php @@ -48,7 +48,7 @@ class MiniProgramList extends Repository } else { $data['total'] = count($list['list']); $data['subjects'] = $list['list'] ?? []; - Cache::put($cache_key, $list['list'], 120); + Cache::put($cache_key, $list['list'], 180); } } diff --git a/app/Admin/Repositories/MiniProgramTemplate.php b/app/Admin/Repositories/MiniProgramTemplate.php deleted file mode 100644 index b1651b5..0000000 --- a/app/Admin/Repositories/MiniProgramTemplate.php +++ /dev/null @@ -1,60 +0,0 @@ - $setting['service_appid'], - 'secret' => $setting['service_appsecret'], - 'token' => $setting['service_token'], - 'aes_key' => $setting['service_aeskey'], - ]; - - $cache_key = 'mini_program:template_list'; - if ($data['subjects'] = Cache::get($cache_key)) { - $data['total'] = count($data['subjects']); - } else { - $openPlatform = Factory::openPlatform($config); - $codeTemplate = $openPlatform['code_template']; - - if (empty($codeTemplate) || (!$list = $codeTemplate->list())) { - $data['total'] = 0; - $data['subjects'] = []; - } else { - $data['total'] = count($list['template_list']); - $data['subjects'] = $list['template_list'] ?? []; - Cache::put($cache_key, $list['template_list'], 120); - } - } - - return $model->makePaginator( - $data['total'] ?? 0, // 传入总记录数 - $data['subjects'] ?? [] // 传入数据二维数组 - ); - } -} diff --git a/app/Admin/Repositories/MiniProgramTemplateList.php b/app/Admin/Repositories/MiniProgramTemplateList.php new file mode 100644 index 0000000..83141ab --- /dev/null +++ b/app/Admin/Repositories/MiniProgramTemplateList.php @@ -0,0 +1,21 @@ +setKeyName('template_id'); + } +} diff --git a/app/AdminSettled/Controllers/AgentController.php b/app/AdminSettled/Controllers/AgentController.php index 9705c09..a88210e 100644 --- a/app/AdminSettled/Controllers/AgentController.php +++ b/app/AdminSettled/Controllers/AgentController.php @@ -59,12 +59,12 @@ class AgentController extends AdminController $form->disableDeleteButton(); $form->text('username')->required(); - $form->password('password')->required(); + $form->password('password')->minLength(6, '密码最少6个字符')->required(); $form->text('name')->required(); - $form->text('appid')->placeholder('可以先不填,审核通过之后再设置'); - $form->text('appsecret')->placeholder('可以先不填,审核通过之后再设置'); - $form->text('mchid')->placeholder('可以先不填,审核通过之后再设置'); - $form->text('mchkey')->placeholder('可以先不填,审核通过之后再设置'); +// $form->text('appid')->placeholder('可以先不填,审核通过之后再设置'); +// $form->text('appsecret')->placeholder('可以先不填,审核通过之后再设置'); +// $form->text('mchid')->placeholder('可以先不填,审核通过之后再设置'); +// $form->text('mchkey')->placeholder('可以先不填,审核通过之后再设置'); $form->radio('type') ->options(AgentType::array()) ->default(AgentType::OPERATOR) @@ -106,10 +106,10 @@ class AgentController extends AdminController //处理特殊字段 $form->status = UserStatus::UNAUDITED; $form->rate = 0.05; - $form->appid = $form->appid ?: '暂未填写'; - $form->appsecret = $form->appsecret ?: '暂未填写'; - $form->mchid = $form->appid ?: '暂未填写'; - $form->mchkey = $form->appid ?: '暂未填写'; +// $form->appid = $form->appid ?: '暂未填写'; +// $form->appsecret = $form->appsecret ?: '暂未填写'; +// $form->mchid = $form->appid ?: '暂未填写'; +// $form->mchkey = $form->appid ?: '暂未填写'; $form->type = in_array($form->type, UserStatus::array()) ? $form->type : AgentType::OPERATOR; })->saved(function (Form $form) { return $form->response()->success('操作成功,请等待管理员审核'); diff --git a/app/Models/MiniProgramTemplateList.php b/app/Models/MiniProgramTemplateList.php new file mode 100644 index 0000000..e3aaaf0 --- /dev/null +++ b/app/Models/MiniProgramTemplateList.php @@ -0,0 +1,11 @@ + '版本号', 'user_desc' => '描述', 'source_miniprogram' => '来源小程序', - 'source_miniprogram_appid' => '上传者微信号', + 'source_miniprogram_appid' => '模板小程序APPID', 'developer' => '上传者微信昵称', 'create_time' => '创建时间', 'template_type' => '模板类型', 'authorizer_appid' => 'APPID', + 'op' => '操作', ], 'options' => [ ],