user = session('user'); $appid = config('app.official_appid'); $wxUser = new OffiaccountUser(); $request = request(); $param = $request->param(); if (!isset($param['r']) || !is_numeric($param['r'])) { echo '页面不存在'; exit; } $get = $request->get(); if (isset($get['code'])) unset($get['code']); $redirectUrl = url($request->baseUrl(), $get, false, true); // 判断是否需要网页授权 if (empty($code) && empty($this->user)) { // 参数中剔除code值,防止重复获取 $wxUser->redirectForCode($appid, $redirectUrl); } // 网页授权获取用户信息 if (!empty($code)) { // 获取网页授权获取access_token $data = $wxUser->getAccessTokenByCode($appid, config('app.official_secret'), $code); if (isset($data['errcode']) && in_array($data['errcode'], [40029, 40163, 41008, 42003])) { // code已经被使用 $wxUser->redirectForCode($appid, $redirectUrl); } elseif (isset($data['errcode'])) { trace('授权获取用户信息', 'error'); trace($data, 'error'); echo $data['errmsg']; exit; } // 查询用户信息是否存在 $user = User::where([['openid', '=', $data['openid']], ['root_id', '=', $param['r']]])->findOrEmpty(); if ($user->isEmpty() || empty($user->unionid)) { $userInfo = $wxUser->getH5UserInfo($data['access_token'], $data['openid']); if (isset($userInfo['errcode'])) { trace('拉取用户信息', 'error'); trace($data, 'error'); echo '请求失败'; exit; } $user->save([ 'nickname' => $userInfo['nickname'], 'sex' => $userInfo['sex'], 'headimgurl' => $userInfo['headimgurl'], 'province' => $userInfo['province'], 'city' => $userInfo['city'], 'country' => $userInfo['country'], 'openid' => $userInfo['openid'], 'unionid' => $userInfo['unionid'] ?? '', 'root_id' => $param['r'] ]); } $this->user = $user->toArray(); session('user', $this->user); session('openid', $data['openid']); trace($redirectUrl, 'log'); // header('location:' . $redirectUrl); // exit; } } }