🦔

LaravelでSpotify APIのアクセストークンを取得する

2023/12/12に公開

目標

Guzzleというパッケージを使って、LaravelでSpotify APIのアクセストークンを取得し、暗号化してセッションに保存する。
https://docs.guzzlephp.org/en/stable/quickstart.html
https://developer.spotify.com/documentation/web-api/tutorials/getting-started

前提条件

  • 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