見出し画像

【チュートリアル②】クライアント情報からアクセストークンを取得する

本チュートリアルでは、クライアント情報を取得した後、その情報を利用してアクセストークンを取得するまでを記載します。

アプリの環境設定ページからクライアント情報を確認する

チュートリアル①でアプリを作成したあと、自動的に環境設定ページに遷移します。
もしくは画面左側サイドバーのアプリを選択後、アプリの「概要を見る」から、上部のタブ内から「環境設定」タブを選択します。

クライアントシークレットについての注意点

前回のチュートリアル①でアプリの新規作成後に取得できるクライアントシークレットを使用します。
クライアントシークレットが分からなくなってしまった場合は、アプリの環境設定ページより再発行を行うことができます。

【注意】クライアントシークレットは漏洩リスク最小化のため、アプリの作成時およびクライアントシークレットの再発行時にのみ確認、コピーを行うことができます。
再発行を行った場合は以前のクライアントシークレットは無効になりますのでご注意ください。

リダイレクトURIについて

アプリの環境設定ページにて設定できる「リダイレクトURI」にはOpenID Connectを利用するときにリダイレクトする先のURLを指定します。
詳しくはこちらをご覧ください。

環境ごとのクライアント情報の取り扱いについて

このクライアント情報は開発(サンドボックス)用のものと本番用のものが作成されます。

https://developers.smaregi.dev/apidoc/common/#section/API
また、共通仕様書にある通り、

エンドポイントのURLは環境によって違います。
開発するときは開発用のクライアント情報開発用URL
本番にリリースときは本番用のクライアント情報本番用URL
を設定するようにアプリ側で制御しておくことを推奨します。

クライアント情報からアクセストークンを取得する

以降は、開発中であることを想定して開発用のクライアント情報開発用URLを利用して進めます。

Postmanを利用して取得する

アクセストークン取得APIはhttps://developers.smaregi.dev/apidoc/common/#section/アクセストークンの通り、
https://id.smaregi.dev/app/{契約ID}/token
とあります。


Tips: 契約IDとは?

スマレジと契約した法人・オーナーを示すIDで全て一意に割り振られます。
スマレジ・デベロッパーズに登録した時点で、デベロッパーの皆様にも割り当てられます。
契約IDはスマレジ・デベロッパーズの左上に記載されていますので、こちらから取得してください。


ここで確認した契約IDを{契約ID}の部分と置換しhttps://id.smaregi.dev/app/xxxxx/token
宛にPOST通信を行います。

その他ヘッダーやリクエストボディは共通仕様書をご覧になって設定してください。設定した結果がこちらです。

AuthorizationBasicAuthを選択し、UsernameにクライアントID、Passwordにクライアントシークレットを設定してください。

HeadersContent-Typeapplication/x-www-form-urlencodedを設定します。

Bodyは以下のように設定します。

scopeの値が空ですが、これはアプリの開発に必要なスコープをスマレジ・デベロッパーズで設定した後に、欲しいスコープを値に設定します。ここでは未設定のまま進めます。

この状態でアクセストークン取得APIをコールすると、アクセストークンが取得できます。

PHPを利用して取得する

※以下はサンプルコードです。スマレジはこのコードに対して一切責任を負いません。

<?php

require 'vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

$clientId = $_ENV['SMAREGI_CLIENT_ID'];
$clientSecret = $_ENV['SMAREGI_CLIENT_SECRET'];

$client = new GuzzleHttp\Client();
$request = new GuzzleHttp\Psr7\Request('POST', $_ENV['SMAREGI_IDP_HOST'] . '/app/' . $_ENV['SMAREGI_SANDBOX_CONTRACT_ID'] . '/token', [
    'Authorization' => 'Basic ' . base64_encode($clientId . ':' . $clientSecret),
    'Content-Type' => 'application/x-www-form-urlencoded',
], http_build_query([
    'grant_type' => 'client_credentials',
    'scope' => '',
]));

$accessTokenResult = sendRequestByGuzzle($request);

echo 'PHP Version: ' . PHP_VERSION . PHP_EOL;
echo 'scope: ' . $accessTokenResult['scope'] . PHP_EOL;
echo 'token_type: ' . $accessTokenResult['token_type'] . PHP_EOL;
echo 'expires_in: ' . $accessTokenResult['expires_in'] . PHP_EOL;
echo 'access_token: ' . $accessTokenResult['access_token'] . PHP_EOL;

/**
 * @param Psr\Http\Message\RequestInterface $request
 * @return mixed|void
 */
function sendRequestByGuzzle(Psr\Http\Message\RequestInterface $request)
{
    $client = new GuzzleHttp\Client();

    try {
        $response = $client->send($request);
    } catch (GuzzleHttp\Exception\GuzzleException $e) {
        echo $e->getMessage();
        exit;
    }

    try {
        $result = json_decode($response->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
    } catch (JsonException $e) {
        echo $e->getMessage();
        exit;
    }

    return $result;
}

出力結果:

上記のコードはcomposerを利用して、一般的によく使用されているguzzlehttp/guzzlevlucas/phpdotenvを利用しています。

特に

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
SMAREGI_IDP_HOST=https://id.smaregi.dev
SMAREGI_CLIENT_ID=xxxxxxxxxxxxxxxxxxxx
SMAREGI_CLIENT_SECRET=yyyyyyyyyyyyyyyyyyyy
SMAREGI_SANDBOX_CONTRACT_ID=zzzzzzzzzzzzzzzzzzzz

のように、PHPの実行環境ごとに変数の内容を変更できるようにプログラミングすることを推奨します。

他のプログラミング言語にも同じような機能を持つものがたくさんありますので、参考にしてください。

次のチュートリアルはこちら


スマレジ×アプリマーケットアプリを活用した
ユーザ様のDX事例や最新ニュースなどをお届けして参ります。
友だち登録よろしくおねがいします!


この記事が気に入ったらサポートをしてみませんか?