🦔
LaravelでSpotify APIのアクセストークンを取得する
目標
Guzzleというパッケージを使って、LaravelでSpotify APIのアクセストークンを取得し、暗号化してセッションに保存する。
前提条件
- Laravelでプロジェクトを作成し、アクセストークンを取得するコントローラを作成している。
- Spotify for Developersでアプリを作成している。
Guzzleのクライアントを作成する
SpotifyController.php
// 追加
use GuzzleHttp\Client;
class SpotifyController extends Controller
{
// 追加
public function getAccessToken()
{
$client = new Client();
}
}
form_paramsとheadersを設定する
オプションは連想配列で設定する。Spotifyのアクセストークンを取得する際はContent-Typeをapplication/x-www-form-urlencodedと指定するが、Guzzleのドキュメントによるとapplication/x-www-form-urlencodedのときはbodyではなくform_paramsを使う。
SpotifyController.php
use GuzzleHttp\Client;
class SpotifyController extends Controller
{
public function getAccessToken()
{
$client = new Client();
// 追加
$form_params = [
'grant_type' => 'client_credentials',
'client_id' => your_client_id,
'client_secret' => your_client_secret
];
$headers = [
'Content-Type' => 'application/x-www-form-urlencoded'
];
$options = [
'form_params' => $form_params,
'headers' => $headers
];
// ここまで
}
}
form_paramsのclient_idとclient_secretは作成したSpotifyアプリのものを使う。
リクエストを投げる
Clientのpostメソッドを使いURIと用意したオプションを指定する。
SpotifyController.php
use GuzzleHttp\Client;
class SpotifyController extends Controller
{
public function getAccessToken()
{
$client = new Client();
$form_params = [
'grant_type' => 'client_credentials',
'client_id' => your_client_id,
'client_secret' => your_client_secret
];
$headers = [
'Content-Type' => 'application/x-www-form-urlencoded'
];
$options = [
'form_params' => $form_params,
'headers' => $headers
];
// 追加
$response = $client->post('https://accounts.spotify.com/api/token', $options);
}
}
アクセストークンを暗号化してセッションに保存する
LaravelのCrypt Facardを使って暗号化し、セッションに保存する。
SpotifyController.php
use GuzzleHttp\Client;
// 追加
use Illuminate\Support\Facades\Crypt;
class SpotifyController extends Controller
{
public function getAccessToken()
{
$client = new Client();
$form_params = [
'grant_type' => 'client_credentials',
'client_id' => your_client_id,
'client_secret' => your_client_secret
];
$headers = [
'Content-Type' => 'application/x-www-form-urlencoded'
];
$options = [
'form_params' => $form_params,
'headers' => $headers
];
$response = $client->post('https://accounts.spotify.com/api/token', $options);
// 追加
$access_token = json_decode($response->getBody())->access_token;
$encrypted_access_token = Crypt::encryptString($access_token);
session(['access_token' => $encrypted_access_token]);
}
}
これで暗号化されたSpotify APIアクセストークンがsessionに保存される。
sessionのアクセストークンは以下のように復号できる。
$session_access_token = session('access_token');
$decrypted_access_token = Crypt::decryptString($session_access_token);
Discussion