getId() ?? ''; $isAuth = Redis::get(printf($this->cacheKey, $openid)); } if (!$session || !$isAuth) { if ($request->has('code')) { $user = $officialAccount->oauth->user() ?? []; //更新用户数据 $this->saveUser($user); session([$sessionKey => $user]); $isNewSession = true; event(new WeChatUserAuthorized(session($sessionKey), $isNewSession, $account)); return redirect()->to($this->getTargetUrl($request)); } session()->forget($sessionKey); return $officialAccount->oauth->scopes($scopes)->redirect($request->fullUrl()); } event(new WeChatUserAuthorized(session($sessionKey), $isNewSession, $account)); return $next($request); } private function saveUser($user) { if (!$user) { return; } $user = $user->getOriginal(); Log::info($user); $openid = $user['openid'] ?? ''; $nickname = $user['nickname'] ?? ''; $pic = $user['headimgurl'] ?? ''; $unionid = $user['unionid'] ?? ''; if (!($openid && strlen($nickname) > 0 && $pic && $unionid)) { return; } $merchant_user = MerchantUser::where('openid', $openid)->first(); if (!$merchant_user) { $merchant_user = new MerchantUser; $merchant_user->openid = $openid; } $merchant_user->nickname = $nickname; $merchant_user->pic = $pic; $merchant_user->authorize_at = date('Y-m-d H:i:s'); $has = MerchantUser::where('unionid', $unionid)->count(); if (!$has) { $merchant_user->unionid = $unionid; } $merchant_user->save(); Redis::setex(printf($this->cacheKey, $openid), 60, 1); } /** * Build the target business url. * * @param Request $request * * @return string */ protected function getTargetUrl($request) { $queries = Arr::except($request->query(), ['code', 'state']); return $request->url() . (empty($queries) ? '' : '?' . http_build_query($queries)); } }