validate($request, [ 'user_id' => 'required' ]); $currentUser = $this->getCurrentUser(); $componentInfo = WechatOpenPlatformService::getComponentInfoByCompanyUid($currentUser->id); $app = WechatOpenPlatformService::buildApplication($componentInfo); $user_id = $request->input('user_id'); $url = $app->createPreAuthorizationUrl(sprintf('%s/api/channel/openPlatform/auth/%s/%s',config('app.url'), $componentInfo->app_id, $user_id), []); return redirect($url); } public function auth(Request $request, $component_appid, $user_id) { $auth_code = $request->input('auth_code'); $auth_user = DB::table('users') ->where([ 'id' => $user_id, 'deleted_at' => 0, 'status' => 1 ]) ->where('pid', '<>', 0) ->select('pid', 'id')->first(); if(!$auth_user) { CommonBusinessException::throwError(Errors::OPENPLATFORM_OPTIMIZER_INFO_ERROR); } $componentInfo = WechatOpenPlatformService::getComponentInfoByAppid($component_appid); $app = WechatOpenPlatformService::buildApplication($componentInfo); $client = $app->getClient(); $response = $client->post('/cgi-bin/component/api_query_auth', [ 'component_appid' => $component_appid, 'authorization_code' => $auth_code ]); $authorizer_appid = $response['authorization_info']['authorizer_appid']; $authorizer_refresh_token = $response['authorization_info']['authorizer_refresh_token']; WechatAuthorizationInfo::updateOrCreate([ 'authorizer_appid' => $authorizer_appid, 'component_appid' => $component_appid, 'user_id' => $user_id, 'puser_id' => $auth_user->pid, ], [ 'authorizer_refresh_token' => $authorizer_refresh_token ]); return view('wechat.openPlatform.authSuccess')->with('url', sprintf('%s/#/user/advertiser',config('app.url'))); } /** * 处理授权事件 * @param Request $request * @param $component_appid */ public function authorCommand(Request $request, $component_appid) { $componentInfo = WechatOpenPlatformService::getComponentInfoByAppid($component_appid); $app = WechatOpenPlatformService::buildApplication($componentInfo); $server = $app->getServer(); $server->handleAuthorized(function($message, \Closure $next) { myLog('authorCommand')->info('handleAuthorized', ['message' => $message]); return $next($message); }); return $server->serve(); } public function infoCommand(Request $request, $authorizer_appid, $component_appid) { $componentInfo = WechatOpenPlatformService::getComponentInfoByAppid($component_appid); $app = WechatOpenPlatformService::buildApplication($componentInfo); $server = $app->getServer(); return $server->serve(); } }