// +---------------------------------------------------------------------- declare (strict_types = 1); namespace addon\wxchat\controller\backend; use addon\wxchat\model\WxchatRealnameAuth; use think\facade\Db; use think\facade\View; use ywxapp\controller\BackendBase; /** * 真人认证 - 后台审核(列表 / 详情 / 通过 / 驳回) */ class WxchatAuth extends BackendBase { // 插件后台按框架惯例放宽登录校验(与 mqttbroker 等插件后台一致) protected $noNeedVerify = ['*']; protected function initialize() {} public function index() { if ($this->request->isAjax()) { return $this->lists(); } return View::fetch('wxchatauth/index'); } /** * 认证记录列表(关联用户昵称) */ public function lists() { $page = (int) $this->request->param('page', 1); $limit = (int) $this->request->param('limit', 15); $kw = trim((string) $this->request->param('keyword', '')); $status = $this->request->param('status', ''); $query = WxchatRealnameAuth::alias('a') ->join('user u', 'u.uid = a.uid', 'left') ->field('a.*, u.nickname, u.avatar'); if ($kw !== '') { $query->where('a.real_name', 'like', "%{$kw}%") ->whereOr('u.nickname', 'like', "%{$kw}%"); } if ($status !== '') { $query->where('a.status', (int) $status); } $total = $query->count(); $rows = $query->order('a.create_at', 'desc') ->page($page, $limit)->select(); $this->result->setCount($total)->success($rows->toArray()); } /** * 详情 */ public function detail() { $id = (int) $this->request->param('id', 0); $row = WxchatRealnameAuth::alias('a') ->join('user u', 'u.uid = a.uid', 'left') ->field('a.*, u.nickname, u.avatar') ->where('a.id', $id)->find(); if (! $row) { $this->result->error('记录不存在'); } $this->result->success($row->toArray()); } /** * 人工复审:通过 / 驳回 */ public function review() { $id = (int) $this->request->post('id', 0); $pass = (int) $this->request->post('pass', 0); $reason = trim((string) $this->request->post('reason', '')); $auth = WxchatRealnameAuth::find($id); if (! $auth) { $this->result->error('记录不存在'); } $auth->status = $pass ? 1 : 2; $auth->reject_reason = $pass ? '' : $reason; // 插件后台上下文 $this->auth 为会员体系,reviewer 仅作兜底记录 try { $auth->reviewer_id = $this->auth->id ?? 0; } catch (\Throwable $e) { $auth->reviewer_id = 0; } $auth->review_at = time(); $auth->save(); if ($pass) { \ywxapp\model\MemberProfile::where('uid', $auth->uid) ->update(['is_realname' => 1]); } $this->result->success([], $pass ? '已通过' : '已驳回'); } /** * 删除认证记录 */ public function del($ids = '') { $ids = $this->request->param('ids', ''); if (! $ids) { $this->result->error('请选择要删除的数据'); } $idArr = array_filter(array_map('intval', explode(',', $ids))); WxchatRealnameAuth::destroy($idArr); $this->result->success([], '删除成功'); } }