1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- namespace app\index\controller;
- use app\BaseController;
- use app\model\User;
- use wx\offiaccount\User as OffiaccountUser;
- class Wxbase extends BaseController
- {
- protected $user;
- public function initialize()
- {
- /** 网页授权 */
- $code = input('code');
- $this->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;
- }
- }
- }
|