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

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

スマレジ・アプリマーケット

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

クライアントIDとクライアントシークレットを確認する

アプリ / パブリックアプリ / 作成したアプリ / 環境設定 で 環境設定ページにアクセスします。

環境設定ページの下部に認可情報とあります。この項目にクライアントIDとクライアントシークレットがありますので、そこから取得できます。

リダイレクト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の実行環境ごとに変数の内容を変更できるようにプログラミングすることを推奨します。

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

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


この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
スマレジ・アプリマーケット
こんにちは。スマレジは会計機能のみならず分析や管理機能を持ち合わせたクラウド型POSレジシステムを提供しています。 でも!もっと!スマレジ×〇〇であらゆる店舗の味方になれるのでは!?ということで出来ました『スマレジ・アプリマーケット』。関連情報、発信します。