Laravel 2019 年 10 月后与 Instagram API 整合
Laravel integrate with Instagram API after October 2019
自从 Facebook 更新政策并强制开发者使用 Instagram Basic Display API:
https://developers.facebook.com/docs/instagram-basic-display-api/
如何将 Laravel 与 Instagram API 集成?
我研究了一下,所有教程都是关于 https://socialiteproviders.netlify.com/providers/instagram.html 的,它已被弃用。
我要做什么:
- 用户登录我们的活动
- 检查用户是否上传了带有特定主题标签的照片
- 如果是,则用户可以有效加入我们的活动
运行 没有想法并在这里创建一个问题。无论如何,谢谢有想法去做。
啊,最后,按照 Facebook 文档中的指南:
https://developers.facebook.com/docs/instagram-basic-display-api/getting-started
以下是解决方案,以备不时之需:
- 安装 guzzle
composer require guzzlehttp/guzzle
- 在 .env 中添加这个
INSTAGRAM_CLIENT_ID=
INSTAGRAM_CLIENT_SECRET=
INSTAGRAM_REDIRECT_URI=https://yourdomainname.com/login/instagram/callback
- 在routes/web中添加这个。php
Route::get('login/instagram',
'Auth\LoginController@redirectToInstagramProvider')->name('instagram.login');
Route::get('login/instagram/callback', 'Auth\LoginController@instagramProviderCallback')->name('instagram.login.callback');
- 在config/services中添加这个。php
'instagram' => [
'client_id' => env('INSTAGRAM_CLIENT_ID'),
'client_secret' => env('INSTAGRAM_CLIENT_SECRET'),
'redirect' => env('INSTAGRAM_REDIRECT_URI'),
],
- 在Auth/LoginController中添加这个。php
use GuzzleHttp\Client;
public function redirectToInstagramProvider()
{
$appId = config('services.instagram.client_id');
$redirectUri = urlencode(config('services.instagram.redirect'));
return redirect()->to("https://api.instagram.com/oauth/authorize?app_id={$appId}&redirect_uri={$redirectUri}&scope=user_profile,user_media&response_type=code");
}
public function instagramProviderCallback(Request $request)
{
$code = $request->code;
if (empty($code)) return redirect()->route('home')->with('error', 'Failed to login with Instagram.');
$appId = config('services.instagram.client_id');
$secret = config('services.instagram.client_secret');
$redirectUri = config('services.instagram.redirect');
$client = new Client();
// Get access token
$response = $client->request('POST', 'https://api.instagram.com/oauth/access_token', [
'form_params' => [
'app_id' => $appId,
'app_secret' => $secret,
'grant_type' => 'authorization_code',
'redirect_uri' => $redirectUri,
'code' => $code,
]
]);
if ($response->getStatusCode() != 200) {
return redirect()->route('home')->with('error', 'Unauthorized login to Instagram.');
}
$content = $response->getBody()->getContents();
$content = json_decode($content);
$accessToken = $content->access_token;
$userId = $content->user_id;
// Get user info
$response = $client->request('GET', "https://graph.instagram.com/me?fields=id,username,account_type&access_token={$accessToken}");
$content = $response->getBody()->getContents();
$oAuth = json_decode($content);
// Get instagram user name
$username = $oAuth->username;
// do your code here
}
自从 Facebook 更新政策并强制开发者使用 Instagram Basic Display API:
https://developers.facebook.com/docs/instagram-basic-display-api/
如何将 Laravel 与 Instagram API 集成? 我研究了一下,所有教程都是关于 https://socialiteproviders.netlify.com/providers/instagram.html 的,它已被弃用。
我要做什么:
- 用户登录我们的活动
- 检查用户是否上传了带有特定主题标签的照片
- 如果是,则用户可以有效加入我们的活动
运行 没有想法并在这里创建一个问题。无论如何,谢谢有想法去做。
啊,最后,按照 Facebook 文档中的指南:
https://developers.facebook.com/docs/instagram-basic-display-api/getting-started
以下是解决方案,以备不时之需:
- 安装 guzzle
composer require guzzlehttp/guzzle
- 在 .env 中添加这个
INSTAGRAM_CLIENT_ID=
INSTAGRAM_CLIENT_SECRET=
INSTAGRAM_REDIRECT_URI=https://yourdomainname.com/login/instagram/callback
- 在routes/web中添加这个。php
Route::get('login/instagram',
'Auth\LoginController@redirectToInstagramProvider')->name('instagram.login');
Route::get('login/instagram/callback', 'Auth\LoginController@instagramProviderCallback')->name('instagram.login.callback');
- 在config/services中添加这个。php
'instagram' => [
'client_id' => env('INSTAGRAM_CLIENT_ID'),
'client_secret' => env('INSTAGRAM_CLIENT_SECRET'),
'redirect' => env('INSTAGRAM_REDIRECT_URI'),
],
- 在Auth/LoginController中添加这个。php
use GuzzleHttp\Client;
public function redirectToInstagramProvider()
{
$appId = config('services.instagram.client_id');
$redirectUri = urlencode(config('services.instagram.redirect'));
return redirect()->to("https://api.instagram.com/oauth/authorize?app_id={$appId}&redirect_uri={$redirectUri}&scope=user_profile,user_media&response_type=code");
}
public function instagramProviderCallback(Request $request)
{
$code = $request->code;
if (empty($code)) return redirect()->route('home')->with('error', 'Failed to login with Instagram.');
$appId = config('services.instagram.client_id');
$secret = config('services.instagram.client_secret');
$redirectUri = config('services.instagram.redirect');
$client = new Client();
// Get access token
$response = $client->request('POST', 'https://api.instagram.com/oauth/access_token', [
'form_params' => [
'app_id' => $appId,
'app_secret' => $secret,
'grant_type' => 'authorization_code',
'redirect_uri' => $redirectUri,
'code' => $code,
]
]);
if ($response->getStatusCode() != 200) {
return redirect()->route('home')->with('error', 'Unauthorized login to Instagram.');
}
$content = $response->getBody()->getContents();
$content = json_decode($content);
$accessToken = $content->access_token;
$userId = $content->user_id;
// Get user info
$response = $client->request('GET', "https://graph.instagram.com/me?fields=id,username,account_type&access_token={$accessToken}");
$content = $response->getBody()->getContents();
$oAuth = json_decode($content);
// Get instagram user name
$username = $oAuth->username;
// do your code here
}