appId(); $res = $handler->login($code); Db::startTrans(); try { $wechatUser = WechatUser::withTrashed()->where('app_id', $appId)->where('routine_openid', $res['openid'])->find(); if (empty($wechatUser)) { $wechatUser = new WechatUser(); $wechatUser->app_id = $appId; $wechatUser->unionid = $res['union_id'] ?? $res['unionid'] ?? ''; $wechatUser->routine_openid = $res['openid']; $wechatUser->nickname = !empty($this->nickname) ? $this->nickname : $handler->nickname(); $wechatUser->headimgurl = $handler->avatar(); if (!$wechatUser->save()) { throw new \Exception('三方登录信息保存出错', 500); } } $user = User::withTrashed()->where('wechat_user_id', $wechatUser->id)->field('id,nickname,avatar')->find(); if (!empty($user['delete_time'])) { throw new BusinessException('账号已注销', 500); } if (empty($user)) { $user = new User(); $user->wechat_user_id = $wechatUser->id; $user->real_name = ''; $user->nickname = $wechatUser->nickname; $user->avatar = $wechatUser->headimgurl; } $user->last_time = date('Y-m-d H:i:s'); if (!$user->save()) { throw new \Exception('用户信息保存出错', 500); } Db::commit(); } catch (\Exception $exception) { Db::rollback(); throw new \Exception($exception->getMessage(), $exception->getCode()); } $tokenParam = [ 'id' => $user->id, 'nickname' => $user->nickname, 'avatar' => $user->avatar, 'code' => $user->code, ]; $token = JwtToken::generateToken(['id' => $user->id]); $token['expires_in'] = $token['expires_in'] + time(); $token['refresh_token_expire'] = time() + config('plugin.tinywan.jwt.app.jwt.refresh_exp'); $tokenParam['token'] = $token; return $tokenParam; } }