| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -20,33 +20,37 @@ class WechatAuth | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public function handle(Request $request, Closure $next) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $sessionKey = 'wechat_user'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $user = $request->session()->get($sessionKey); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (!$user) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $config = config('wechat.official_account.default'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $app = Factory::officialAccount($config); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $sessionKey = 'wechat_user'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $user = $request->session()->get($sessionKey); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (!$user) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                $config = config('wechat.official_account.default'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                $app = Factory::officialAccount($config); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $code = $request->input('code'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (empty($code)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return $app->oauth->scopes(['snsapi_userinfo'])->redirect($request->url()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                $wechatUser = $app->oauth->user(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (!$wechatUser) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    throw new \Exception('获取用户信息失败'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } else if (empty($user->unionid)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    # TODO 调试unionid
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (config('app.debug') && $request->server('REMOTE_ADDR') == '127.0.0.1') { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        $wechatUser['unionid'] = 'onhl355f-ofX5e0-4I4vn0bswVPM'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        throw new Exception('获取UnionId失败'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                $code = $request->input('code'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (empty($code)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    return $app->oauth->scopes(['snsapi_userinfo'])->redirect($request->url()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    $wechatUser = $app->oauth->user(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (empty($wechatUser['id'])) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        throw new \Exception('获取用户信息失败'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } else if (empty($user['unionid'])) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        # TODO 调试unionid
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (config('app.debug') && $request->server('REMOTE_ADDR') == '127.0.0.1') { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            $wechatUser['unionid'] = 'onhl355f-ofX5e0-4I4vn0bswVPM'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            throw new Exception('获取UnionId失败'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $user = User::where('unionid', $wechatUser->unionid)->first(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (!$user) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                throw new Exception('您的账号未在小程序上登录过,获取用户信息失败'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                $user = User::where('unionid', $wechatUser->unionid)->first(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (!$user) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    throw new Exception('您的账号未在小程序上登录过,获取用户信息失败'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                $request->session()->put($sessionKey, $user); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $request->session()->put($sessionKey, $user); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } catch (\Exception $exception) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return response($exception->getMessage()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return $next($request); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					
  |