validate([ 'code' => 'required|string' ], [ 'code.required' => '登录参数格式错误', 'code.string' => '登录参数格式错误', ]); $session = app(WechatService::class)->code2Session($validated['code']); $user = UserModel::where('openid', $session['openid'])->first(); if ($user === null || $user->status === UserModel::STATUS_DISABLED) { return $this->error('账号不存在或已被停用'); } $user->last_login_at = date('Y-m-d H:i:s'); $user->save(); $token = $user->createToken($user->openid)->toArray(); return $this->success([ 'token' => $token['plainTextToken'], 'user' => $user->toArray(), ], __('user.login_success')); } /** 小程序注册 */ #[PostRoute('/auth/register', authorize: false)] public function register(Request $request): JsonResponse { $validated = $request->validate([ 'code' => 'required|string', 'phoneCode' => 'required|string', 'storeCode' => 'required|string' ], [ 'code.required' => '注册参数格式错误', 'code.string' => '注册参数格式错误', 'phoneCode.required' => '注册参数格式错误', 'phoneCode.string' => '注册参数格式错误', 'storeCode.required' => '门店编码必须填写', 'storeCode.string' => '注册参数格式错误', ]); $store = StoreModel::where('code', $validated['storeCode'])->first(); if (!$store) { return $this->error('门店不存在!'); } // 通过 code 换取 openid、session_key、unionid $session = app(WechatService::class)->code2Session($validated['code']); $user = UserModel::where('openid', $session['openid'])->first(); if ($user) { return $this->error('你的微信已经注册,请直接登录!'); } $userData = [ 'openid' => $session['openid'], 'unionid' => $session['unionid'] ?? '', 'username' => 'wx_'.uniqid(), 'nickname' => '微信用户', 'store_id' => $store->id, 'avatar' => '', 'password' => '', 'last_login_at' => date('Y-m-d H:i:s'), ]; $phone = app(WechatService::class)->getPhone($validated['phoneCode']); $userData['phone'] = $phone ?? ''; $user = UserModel::create($userData); $token = $user->createToken($user->username)->toArray(); return $this->success([ 'token' => $token['plainTextToken'], 'user' => $user->toArray(), ], __('user.login_success')); } /** 当前用户信息 */ #[GetRoute('/auth/info')] public function info(Request $request): JsonResponse { $user = UserModel::with(['store.level:id,name']) ->find($request->user()->id); if ($user === null) { throw new RepositoryException('账号不存在'); } return $this->success($user->toArray()); } #[PutRoute('auth/info')] public function setUserInfo(UserUpdateInfoRequest $request): JsonResponse { UserModel::where('user_id', auth('user')->id())->update($request->validated()); return $this->error('更新成功'); } }