logic = $logic; } public function pin($siteId) { // $siteId = $request->input('siteId'); $social = Social::query()->where(['site_id' => $siteId, 'type' => Social::PIN])->first(); if (!$social) { return view('admin/errors/tips', [ 'tips' => '社交信息不存在!!!' ]); } // $clientId = $social->app_id; // $clientSecret = $social->app_secret; // $redirectUrl = $social->redirect_url; // $config = new \SocialiteProviders\Manager\Config($clientId, $clientSecret, $redirectUrl); config([ 'services.pinterest' => [ 'client_id' => $social->app_id, 'client_secret' => $social->app_secret, 'redirect' => $social->redirect_url ] ]); // $user = Socialite::driver('pinterest')->setConfig($config)->user(); $user = Socialite::driver('pinterest')->user(); if (empty($user->token)) { return view('admin/errors/tips', [ 'tips' => '用户令牌获取失败!!!' ]); } $social->token = $user->token; $social->save(); return view('admin/errors/tips', [ 'tips' => '授权成功' ]); } public function twitter(Request $request) { $user = Socialite::with('twitter')->user(); if (empty($user->token) || empty($user->tokenSecret)) { return view('admin/errors/tips', [ 'tips' => '用户令牌获取失败!!!' ]); } if (!$siteId = $request->input('siteId')) { return view('admin/errors/tips', [ 'tips' => '未指定站点!!!' ]); } Social::query()->updateOrCreate([ 'site_id' => $siteId, 'type' => Social::TWITTER ], [ 'token' => $user->token, 'token_secret' => $user->tokenSecret ]); return view('admin/errors/tips', [ 'tips' => '授权成功!!!!' ]); } public function linkedIn(Request $request) { $social = Social::query()->where(['type' => Social::LINKED, 'site_id' => 0])->first(); if (!$social) { return view('admin/errors/tips', [ 'tips' => '社交信息不存在!!!' ]); } config([ 'services.linkedin.client_id' => $social->app_id, 'services.linkedin.client_secret' => $social->app_secret, 'services.linkedin.redirect' => sprintf('%s?siteId=%s', $social->redirect_url, $request->input('siteId')), ]); $user = Socialite::driver('LinkedIn')->stateless()->user(); if (empty($user->token)) { return view('admin/errors/tips', [ 'tips' => '授权失败!!!' ]); } $social->update([ 'token' => $user->token, 'token_expired_at' => date('Y-m-d H:i:s', strtotime('+59 days')) ]); return view('admin/errors/tips', [ 'tips' => '授权成功,有效期60天' ]); } public function facebook() { $user = Socialite::driver('facebook')->user(); if (empty($user->token)) { return view('admin/errors/tips', [ 'tips' => '用户令牌获取失败!!!' ]); } try { $allSites = Site::query()->select(['id', 'facebook_page', 'facebook_page_token', 'cn_title'])->get(); $fb = new Facebook([ 'app_id' => env('FACEBOOK_CLIENT_ID'), 'app_secret' => env('FACEBOOK_CLIENT_SECRET'), 'default_access_token' => $user->token, // optional ]); $invalidTokenSiteTitleList = []; foreach ($allSites as $site) { try { if (empty($site->facebook_page)) { continue; } $pageId = $site->facebook_page; $response = $fb->get(sprintf('/%s?fields=access_token', $pageId)); $responseJson = json_decode($response->getBody(), true); if (empty($responseJson['access_token'])) { $invalidTokenSiteTitleList[] = ['title' => $site->cn_title, 'failed' => var_export($response->getBody(), 1)]; Log::warning('facebook_page_token:' . var_export($response->getBody(), 1)); } $pageToken = $responseJson['access_token']; $site->facebook_page_token = $pageToken; $site->save(); } catch (\Throwable $throwable) { Log::warning(sprintf('facebook Auth%s', var_export($throwable->getMessage(), 1))); $invalidTokenSiteTitleList[] = [ 'title' => $site->cn_title, 'failed' => var_export($throwable->getMessage(), 1) ]; } } Social::query()->where(['type' => 'facebook'])->update([ 'token' => $user->token, 'token_expired_at' => date('Y-m-d H:i:s', strtotime('+59 days')), 'page_token_expired_at' => date('Y-m-d H:i:s', strtotime('+59 days')), 'err' => json_encode($invalidTokenSiteTitleList) ]); return view('admin/errors/tips', [ 'tips' => '授权成功,有效期60天
失败列表:' . json_encode($invalidTokenSiteTitleList) ]); } catch (\Throwable $throwable) { Log::warning(sprintf('facebook Auth%s', var_export($throwable->getMessage(), 1))); return view('admin/errors/tips', [ 'tips' => '页面令牌获取失败!!!' ]); } } public function oauth(Request $request) { $siteId = $request->input('siteId'); // ->scopes(['w_organization_social', 'r_organization_social', 'w_member_social','r_member_social']) $which = $request->input('which'); switch ($which) { case 'pinterest': //pin的授权地址需要完全一样 例如 pin后台填的是baidu.com/api 则授权地址必须是是baidu.com/api if (!$siteId) { return view('admin/errors/tips', [ 'tips' => '请选择参数' ]); } $social = Social::query()->where(['site_id' => $siteId, 'type' => Social::PIN])->first(); if (!$social) { return view('admin/errors/tips', [ 'tips' => '社交账号信息不存在' ]); } // $clientId = $social->app_id; // $clientSecret = $social->app_secret; // $redirectUrl = $social->redirect_url; // $config = new \SocialiteProviders\Manager\Config($clientId, $clientSecret, $redirectUrl); config([ 'services.pinterest' => [ 'client_id' => $social->app_id, 'client_secret' => $social->app_secret, 'redirect' => $social->redirect_url ] ]); // return Socialite::driver('pinterest')->setConfig($config)->scopes(['read_public', 'write_public'])->redirect(); return Socialite::driver('pinterest')->scopes(['read_public', 'write_public'])->redirect(); case 'linkedIn': //expiresIn: 5184000 60天 $social = Social::query()->where(['site_id' => 0, 'type' => Social::LINKED])->first(); if (!$social) { return view('admin/errors/tips', [ 'tips' => '社交账号信息不存在' ]); } //UGC Post is an upcoming API that will eventually replace the Shares API. //https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/ugc-post-api config([ 'services.linkedin.client_id' => $social->app_id, 'services.linkedin.client_secret' => $social->app_secret, 'services.linkedin.redirect' => sprintf('%s?siteId=%s', $social->redirect_url, $siteId), ]); // return Socialite::driver('LinkedIn')->scopes(['w_member_social', 'w_organization_social'])->redirect(); return Socialite::driver('LinkedIn')->scopes(['r_emailaddress', 'r_liteprofile', 'w_member_social', 'w_organization_social'])->redirect(); // return Socialite::driver('LinkedIn')->scopes(['r_emailaddress', 'r_liteprofile', 'w_member_social','w_organization_social'])->redirect(); case 'twitter': //twitter地址一样但是可以携带查询字符串 比如twitter 后台填的是baidu.com/api 但是baidu.com/api?siteId=1 也是可以的 config([ 'services.twitter.redirect' => sprintf( '%s?siteId=%s', config('services.twitter.redirect'), $siteId ) ]); return Socialite::with('twitter')->redirect(); break; case 'facebook': return Socialite::driver('facebook')->scopes(['manage_pages', 'publish_pages'])->redirect(); default: break; } return view('admin/errors/tips', [ 'tips' => '无授权类型' ]); } public function index(Request $request) { if (!$request->ajax()) { $allSite = Site::query()->select(['id', 'cn_title'])->get(); return view('admin/social/index', ['sites' => $allSite]); } $keyword = $request->input('keyword'); $builder = HootsuiteUser::query()->with('site'); if ($keyword) { $siteIds = Site::query()->where('cn_title', 'like', '%' . $keyword . '%') ->orWhere('domain', 'like', '%' . $keyword . '%')->pluck('id')->toArray(); $builder->where('email', 'like', '%' . $keyword . '%')->orWhereIn('site_id', $siteIds); } $result = $builder->orderByDesc('id') ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE); $items = $result->items(); array_walk($items, function ($item) { $item->site_title = $item->site->cn_title??'未绑定'; unset($item->role); }); return response()->json([ 'rows' => $items, 'total' => $result->total() ]); } public function hootsuite(Request $request) { $client = new Client(); $url = sprintf('%s/admin/hootsuite/token', config('app.wall_url')); try { $response = $client->request('POST', $url, [ 'form_params' => $request->input() ]); $result = $response->getBody()->getContents(); dd($result); } catch (\GuzzleHttp\Exception\GuzzleException $exception) { dd($exception->getMessage()); } } public function hootsuiteAuth(){ $client_id = 'c1ada351-6797-406e-8706-342af91ecad5'; $redirect_uri = 'https://admin.yinqingli.com/admin/socials/hootsuite'; $state = ''; return redirect(sprintf( 'https://platform.hootsuite.com/oauth2/auth?response_type=code&client_id=%s&scope=offline&state=%s&redirect_uri=%s', $client_id, $state, $redirect_uri )); } }