// +---------------------------------------------------------------------- declare (strict_types = 1); namespace addon\appmall\controller\backend; use think\facade\Db; use think\facade\View; use Exception; use ywxapp\controller\BackendBase; use ywxapp\library\Mailer; /** * 开发者管理(运营后台,含审核) * 由原核心 app/backend/controller/Developer.php 剥离到 market 插件。 */ class Developer extends BackendBase { public function index() { if ($this->request->isAjax()) { $status = $this->request->param('status', ''); $query = Db::name('appmall_developers'); if ($status !== '') { $query->where('status', (int) $status); } $list = $query->order('status', 'asc') ->order('id', 'desc') ->paginate([ 'page' => (int) $this->request->param('page', 1), 'list_rows' => (int) $this->request->param('limit', 10), ]); $this->result->setCount($list->total())->success($list->items(), '获取成功'); } return View::fetch('developer/index'); } /** * 审核通过:激活并邮件下发令牌 */ public function approve() { try { $id = (int) input('id'); $dev = Db::name('appmall_developers')->where('id', $id)->find(); if (empty($dev)) { return $this->result->error('记录不存在'); } Db::name('appmall_developers')->where('id', $id)->update(['status' => 1, 'update_at' => time()]); Mailer::send($dev['email'], '开发者申请已通过', $this->tokenMail($dev['username'], $dev['token'])); return $this->result->success([], '已通过并发送令牌邮件'); } catch (Exception $e) { return $this->result->error($e->getMessage()); } } /** * 禁用 */ public function disable() { $id = (int) input('id'); Db::name('appmall_developers')->where('id', $id)->update(['status' => -1, 'update_at' => time()]); return $this->result->success([], '已禁用'); } /** * 重新发送令牌邮件(仅已激活) */ public function resend() { $id = (int) input('id'); $dev = Db::name('appmall_developers')->where('id', $id)->find(); if (empty($dev)) { return $this->result->error('记录不存在'); } if ((int) $dev['status'] !== 1) { return $this->result->error('仅已激活账号可重发'); } Mailer::send($dev['email'], '您的开发者令牌', $this->tokenMail($dev['username'], $dev['token'])); return $this->result->success([], '已重发令牌邮件'); } /** * 重置令牌(已激活则同步邮件通知) */ public function reset() { try { $id = (int) input('id'); $dev = Db::name('appmall_developers')->where('id', $id)->find(); if (empty($dev)) { return $this->result->error('记录不存在'); } $token = bin2hex(random_bytes(32)); Db::name('appmall_developers')->where('id', $id)->update(['token' => $token, 'update_at' => time()]); if ((int) $dev['status'] === 1) { Mailer::send($dev['email'], '您的开发者令牌已重置', $this->tokenMail($dev['username'], $token)); } return $this->result->success(['token' => $token], '已重置令牌' . ((int) $dev['status'] === 1 ? '并邮件通知' : '')); } catch (Exception $e) { return $this->result->error($e->getMessage()); } } private function tokenMail($name, $token): string { return "尊敬的 {$name}:
您的开发者令牌如下:

" . "{$token}

" . '请将其配置到开发者控制台的 APPMARKET_DEV_TOKEN 环境变量。'; } }