スコープの設定 ~ アクセストークンの取得
スマレジ プラットフォームAPIにおける アクセストークンを取得する流れをまとめたスタートガイドです。
本ガイドでは、開発環境(サンドボックス) での操作・設定を前提として進めますが、本番環境でも同様の流れとなります。
ご利用状況に合わせて、開発環境と本番環境のクライアント情報とエンドポイントを適切に切り替えて ご利用ください。
開発環境と本番環境の違いは「API ドキュメント クイックスタートガイド」をご確認ください。
※本ページに記載のコードはサンプルコードです。スマレジはこのコードに対して一切責任を負いません。
あらかじめご了承いただきますようお願いいたします。
アクセストークンとは
Section titled “アクセストークンとは”アクセストークンとはAPIを利用する際に必要な認証情報のことで、APIを使う上で必須のものです。
スマレジ・プラットフォームAPIを呼び出すときにアクセストークンをリクエストに含めることで、許可されたアプリケーションであることを証明し、データにアクセスできるようになります。
アクセストークンがないと、スマレジ・プラットフォームAPIではリクエストが拒否されます。
例えば複数のアプリがあっても、アクセストークンによって「どのアプリのリクエストか」「適切な権限を持っているか」を判断します。
クライアントIDとクライアントシークレット
Section titled “クライアントIDとクライアントシークレット”クライアントIDは、スマレジ・デベロッパーズでアプリを登録した際に発行されるアプリ固有の識別子です。
クライアントシークレット(Client Secret)はパスワードのような文字列で、アプリ作成時に発行されます。
クライアントIDとクライアントシークレットはアクセストークンを取得するためにBasic認証で使用します。
スマレジ・デベロッパーズの管理画面でアプリ作成後に表示される「環境設定」ページで確認できます。
※クライアントシークレットをアプリ作成時に確認できなかった場合は、再発行する必要があります。
アクセストークンの種類
Section titled “アクセストークンの種類”スマレジ・プラットフォームAPIで使用するアクセストークンにはアプリアクセストークンとユーザーアクセストークンの2種類があります。
それぞれ取得方法や利用範囲が異なり、セキュリティ上の特性や付与される権限にも違いがあります。
アプリアクセストークン:
Section titled “アプリアクセストークン:”アプリケーション単位で発行するアクセストークンです。
主にサーバーサイドでAPIを呼び出すWEBアプリ向けに利用される方式で、クライアントシークレット(秘密鍵)を安全に保管できる環境での使用を想定しています。
取得の際にはあらかじめ必要なAPIのスコープ(権限範囲)を指定し、アプリのクライアントIDとクライアントシークレットを使用して認証を行います。
アプリアクセストークンで許可される操作内容は発行時に指定したスコープによって決まるため、特定のユーザーに依存しません。
後述のユーザーアクセストークンとは異なり、ユーザー権限に左右されないといった特徴があります。
ユーザーアクセストークン:
Section titled “ユーザーアクセストークン:”スマレジのユーザーアカウントによるログイン認証を経て発行されるアクセストークンです。
Section titled “スマレジのユーザーアカウントによるログイン認証を経て発行されるアクセストークンです。”主にクライアントサイド(モバイルアプリ等)で利用するネイティブアプリ向けの方式で、ユーザーごとの認可で動作します。
取得されたアクセストークンで可能な操作は、そのユーザーがスマレジの管理画面上で持つ権限の範囲に準拠します。
つまり、スマレジ上のスタッフ権限・役職に応じた制限が適用された形でAPIを操作できます。
そのため、ユーザーのログイン(認可)さえ行えばよいためアプリ側に秘密鍵を持たない分、公開された環境(モバイル端末など)でも利用しやすい利点があります。(逆に言えばユーザーごとに権限が細かく制御されます)
※ネイティブアプリとして登録した場合はユーザーアクセストークンのみ利用可能です。
主な違いまとめ:
Section titled “主な違いまとめ:”比較項目 | アプリアクセストークン | ユーザーアクセストークン |
---|---|---|
認証フロー | クライアント認証(OAuth2 Client Credentials グラント)で発行。ユーザーの関与なし。 | ユーザー認証(OAuth2 認可コードフロー)で発行。ユーザーのログイン・同意が必要。 |
利用シナリオ | サーバーサイド実行のアプリ(WEBアプリ)向け。クライアントシークレットを用いてサーバー上でトークン発行。 | クライアントサイド実行のアプリ(ネイティブアプリ)向け。クライアントシークレットは発行されず、ユーザーのログインによるトークン発行。 |
セキュリティ | 秘密鍵を含むため、安全なサーバ環境での利用が前提になる。ユーザー認証不要なのでバックエンド処理に適する。 | 秘密鍵不要のため公開環境でも安全に扱える。ただし、ユーザーの資格情報で発行されるため、トークン自体を適切に保護する必要がある。 |
権限範囲 | アプリ作成時に開発者が指定したスコープによって決定。スコープ内であれば契約ID内の全データにアクセス可能。ユーザー固有の権限制限はなし。 | スマレジ上のユーザー権限に基づきアクセス範囲が制限。所属店舗や権限設定に応じてAPI実行が制御される。 |
備考 | 一部のAPIはアプリアクセストークンでのみアクセス可能。 例:入出荷のAPIなど (利用できる方式はAPI仕様書の「Authorizations」に記載) | ネイティブアプリ登録時は、クライアントシークレットが発行されないため、この方式を使用する必要がある。 リフレッシュトークンを取得するには後述のoffline_access スコープ付与が必要。 |
アプリアクセストークンの取得方法
Section titled “アプリアクセストークンの取得方法”仕様書: 【共通仕様】アプリアクセストークン
まとめ
- 環境設定ページでクライアント情報を把握
- アプリ作成直後 or 「概要を見る」→「環境設定」から確認
- スコープの設定
- エンドポイントの切り替え
- アクセストークン取得
- grant_type=client_credentials + Basic認証(クライアントID & シークレット)
- scope を必要に応じて設定
- レスポンスから返却される access_token をAPIコール時の認証ヘッダー
Authorization: Bearer {token}
などに利用する
1.事前準備
Section titled “1.事前準備”1. 1 クライアントIDとクライアントシークレットの確認
Section titled “1. 1 クライアントIDとクライアントシークレットの確認”アプリの環境設定ページでは、サンドボックス環境用と本番環境用それぞれにクライアントIDとクライアントシークレットが表示されています。
利用したい環境のクライアントIDとクライアントシークレットを確認しましょう。
(今回は開発環境のクライアントIDとクライアントシークレットを控えます。)
※クライアントシークレットはアプリの作成時またはシークレットの再発行時しか表示されません。機密情報ですので、ご自身で安全に保管してください。
クライアントシークレットを誤って漏洩させないように注意し、できればソースコードに直書きせず環境変数として管理すると安全です。
注意
- セキュリティ上の観点から、一度発行したクライアントシークレットを後から確認することはできません。
- 再発行すると以前のクライアントシークレットは無効になり、既存のアクセストークン取得フローが動作しなくなります。
- クライアントシークレットは必ず安全な場所に保管してください。
1. 2 スコープの設定
Section titled “1. 2 スコープの設定”スコープとはアクセストークンを用いて利用できる 権限 や 範囲 を指定する仕組みです。
アプリの「スコープ」画面から設定できます。
求める機能に合わせて必要なスコープをオンにしましょう。
利用したいAPIで必要なスコープは、各APIの「Authorizations」に記載しています。
1. 3 契約IDの確認
Section titled “1. 3 契約IDの確認”契約IDとはスマレジのアカウントごとに付与される識別子で、 APIのエンドポイントURLに含めて利用します。
開発環境でテストを行う場合、スマレジ・デベロッパーズの管理画面左上に表示されています。(sb_xxxx
)
2. アクセストークンの取得
Section titled “2. アクセストークンの取得”ここでは、サンドボックス環境(開発用)を例に説明します。
実際には {契約ID}
や クライアントID/クライアントシークレット はそれぞれの値を置き換えてください。
2. 1 Postmanを利用する例
Section titled “2. 1 Postmanを利用する例”APIの動作確認のために Postman というツールを使ってアクセストークンを取得する方法を説明します。
- URL:
- 開発環境
POST https://id.smaregi.dev/app/{契約ID}/token
- 本番環境
POST https://id.smaregi.jp/app/{契約ID}/token
- Basic認証:
- Username : クライアントID
- Password : クライアントシークレット
- Headers:
Content-Type: application/x-www-form-urlencoded
- Body (x-www-form-urlencoded):
grant_type = client_credentialsscope = (ここに必要なスコープをスペース区切りで入力)
例: scope = inventory pos
- 送信すると、レスポンスとしてJSON形式のアクセストークン情報が返ってきます。
-
access_token
: 実際にAPIの認証で使うトークン -
expires_in
: トークン有効期限(秒) -
token_type
: “Bearer” など -
レスポンス例:
{ "scope": "pos.products:read pos.transactions:write", "token_type": "Bearer", "expires_in": 3600, "access_token": "XXXXXXXXXXXXXXXXX"}
上記アクセストークンの取得をPostmanで行うためのサンプルリクエストを設定したJsonファイルをダウンロードできます。
PostmanのCollectionファイルをダウンロード
ダウンロードしたファイルを利用する場合は以下の手順で設定してください。
- PostmanのCollectionファイルをダウンロード
- Postmanをインストール、起動後に
File > Import
からダウンロードしたJsonファイルをインポート - 契約IDを設定する
- 設定箇所は下記画像の通り、Path Variablesの
contract_id
になります。
- 設定箇所は下記画像の通り、Path Variablesの

※バージョン等によっては設定箇所が異なる場合があります。あらかじめご了承ください。
4. AuthタブからBasic Authを設定する
- UsernameにクライアントID、Passwordにクライアントシークレットを入力します。

- 取得したいトークンのスコープをbodyに入力

- Sendボタンを押す
ダウンロードできるコレクションには、サンプルとして店舗情報の取得、および更新のAPIコールを行うリクエストも含まれています。
contract_id
の設定、及びAuthタブから先ほど取得したトークンをBearer Tokenとして設定することで、APIの動作確認が可能です。
APIのコールには対応したスコープを持ったアクセストークンが必要です。アクセストークン取得の際に必要なスコープを指定してください。
2. 2 PHPでのアクセストークン取得
Section titled “2. 2 PHPでのアクセストークン取得”PHPを使ってアクセストークンを取得する方法を紹介します。
必要なライブラリやサンプルコードを示しますので、ご自身の環境で実行してみてください。
必要なライブラリと環境設定:
Section titled “必要なライブラリと環境設定:”PHPでHTTPリクエストを送るには、標準のcURL関数を使用する方法もありますが、ここでは扱いやすいHTTPクライアントライブラリのGuzzleを使用します。
また、機密情報(クライアントIDやシークレット、契約IDなど)の管理には環境変数を利用すると便利なため、phpdotenvを使います。
予めComposerで以下のパッケージをインストールしてください(コマンド例:composer require guzzlehttp/guzzle vlucas/phpdotenv
)。
- guzzlehttp/guzzle (HTTPクライアントライブラリ)
- vlucas/phpdotenv (環境変数管理用ライブラリ)
PHPサンプルコード:
Section titled “PHPサンプルコード:”以下に、PHPでアクセストークンを取得するサンプルコードを示します。
このコードでは、先ほど取得したクライアントID・クライアントシークレット、および契約IDを使用してAPIにリクエストを送信しています。
実際に使う際は 'YOUR_CLIENT_ID'
などを書き換えるか、環境変数から読み込むようにしてください。
<?phprequire 'vendor/autoload.php'; // Composerのオートローダを読み込む
use GuzzleHttp\Client;
$clientId = 'YOUR_CLIENT_ID'; // あなたのクライアントID$clientSecret = 'YOUR_CLIENT_SECRET'; // あなたのクライアントシークレット$contractId = 'YOUR_CONTRACT_ID'; // あなたの契約ID(サンドボックス)
// アクセストークンAPIのURLを組み立て(サンドボックス環境を使用)$tokenUrl = "https://id.smaregi.dev/app/{$contractId}/token";
// HTTPクライアントを初期化$client = new Client();
// POSTリクエストを作成$response = $client->post($tokenUrl, [ 'headers' => [ 'Authorization' => 'Basic ' . base64_encode($clientId . ':' . $clientSecret), 'Content-Type' => 'application/x-www-form-urlencoded', ], 'form_params' => [ 'grant_type' => 'client_credentials', 'scope' => 'pos.stores:read' // 必要なスコープをスペース区切りで。例として店舗読み取り権限を指定 ]]);
// レスポンスボディをJSONとしてパース$data = json_decode($response->getBody(), true);
// 結果を表示echo "Access Token: " . $data['access_token'] . PHP_EOL;echo "Token Type: " . $data['token_type'] . PHP_EOL;echo "Expires In: " . $data['expires_in'] . PHP_EOL;echo "Scope: " . $data['scope'] . PHP_EOL;
実行結果の確認方法:
Section titled “実行結果の確認方法:”上記のPHPコードをファイルに保存し(例:get_token.php
)、コマンドラインから実行してみましょう(php get_token.php
)。正しく設定されていれば、ターミナル上にアクセストークンとその他情報が表示されるはずです。例えば:
Access Token: abcdefghijklmnopqrstuvwxyz123456Token Type: BearerExpires In: 3600Scope: pos.stores:read
このようにアクセストークン(Access Token)が取得できています。expires_in
は有効期限(秒)で、通常3600秒(1時間)となっています。
表示されたアクセストークン文字列をコピーして、実際にAPIを呼び出す際の認証に使用することができます。
コード中では echo
で出力していますが、実際のアプリケーションでは $data['access_token']
を変数に保持したり、他の関数に渡したりして利用します。
補足: セキュリティのため、上記コードではプレーンな文字列でIDやシークレットを記述しましたが、実際の開発では環境変数や設定ファイルから読み込むことを推奨します。
phpdotenvを用いれば .env
ファイルにID/シークレットを保存し、コード中で $_ENV
や getenv()
を通じて参照できます。
2. 3 Node.jsでのアクセストークン取得
Section titled “2. 3 Node.jsでのアクセストークン取得”Node.jsを使ってアクセストークンを取得する方法です。
Node.js用のHTTPクライアントライブラリとしてaxiosを利用し、シンプルに実装してみます。
必要なライブラリと環境設定:
Section titled “必要なライブラリと環境設定:”まずNode.jsの環境がセットアップされていることを確認してください(Node.js自体のインストールは済んでいる前提です)。
次に、アクセストークン取得に必要なHTTPリクエストを送るため、axiosライブラリをプロジェクトに追加します。ターミナルでプロジェクトのディレクトリに移動し、以下のコマンドでaxiosをインストールしてください。
npm install axios
これで準備はOKです。なお、こちらも機密情報の管理には環境変数の利用が推奨されますが、サンプルコードでは直接埋め込む形で示します。
Node.jsサンプルコード:
Section titled “Node.jsサンプルコード:”以下はNode.js(JavaScript)でアクセストークンを取得する例です。適宜 'YOUR_CLIENT_ID'
などを書き換えて使用してください。ファイル名は例えば get_token.js
として保存します。
const axios = require('axios');
// 自分のクライアントID・シークレット・契約IDをセットconst clientId = 'YOUR_CLIENT_ID'; // あなたのクライアントIDconst clientSecret = 'YOUR_CLIENT_SECRET'; // あなたのクライアントシークレットconst contractId = 'YOUR_CONTRACT_ID'; // あなたの契約ID(サンドボックス環境)
// アクセストークンエンドポイントURLconst tokenUrl = `https://id.smaregi.dev/app/${contractId}/token`;
// アクセストークン取得処理を実行する関数(即時実行)(async () => { try { // POSTリクエスト送信 const response = await axios.post( tokenUrl, new URLSearchParams({ // フォームURLエンコードされたボディを生成 grant_type: 'client_credentials', scope: 'pos.stores:read' // 必要に応じてスコープを指定(複数は半角スペース区切り) }), { auth: { // Basic認証を簡単に指定できるオプション username: clientId, password: clientSecret }, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } ); // レスポンスデータを取得 const data = response.data; console.log("Access Token:", data.access_token); console.log("Token Type:", data.token_type); console.log("Expires In:", data.expires_in); console.log("Scope:", data.scope); } catch (error) { // エラー発生時 if (error.response) { console.error("Error Response:", error.response.status, error.response.data); } else { console.error("Request Error:", error.message); } }})();
実行結果の確認方法: 上記コードを保存したら、ターミナルから node get_token.js
を実行してみましょう。正常に処理が行われれば、コンソールにPHPの例と同様にアクセストークン情報が表示されます。
Access Token: abcdefghijklmnopqrstuvwxyz123456Token Type: BearerExpires In: 3600Scope: pos.stores:read
このようにアクセストークンが取得できれば成功です。あとは、このdata.access_token
の値を使ってスマレジの各種APIを呼び出すことができます。
なお、上記の実装では axios.post
に直接 URLSearchParams
を渡すことで application/x-www-form-urlencoded
形式のボディを送信しています
Important: JSONではなくform-urlencoded形式で送らないと「unsupported_grant_type」エラーになるので注意してください(axiosではURLSearchParams
やqs.stringify
を使ってフォーム形式にしています。
ユーザーアクセストークンの取得方法
Section titled “ユーザーアクセストークンの取得方法”仕様書: 【共通仕様】ログイン
OAuth2の認可コードフローを使用します。
これは3-legged(ユーザー介在)のフローで、エンドユーザーがスマレジの認証ページでログイン・許可を行うことでアクセストークンを取得します。
OpenID Connectにも対応しており、openid
スコープを指定することでIDトークン(ユーザー情報のJWT)も同時に得られます。
なお、ネイティブアプリのような公開クライアントではセキュリティ強化のためPKCEを必須としています。
- クライアントIDや要求スコープを付与した認可URLにユーザーをリダイレクトし、ユーザー認証後に返される「認可コード」を受け取る
- 認可コードを用いてIDプロバイダーのトークンエンドポイントにリクエストを送り、アクセストークン(および必要に応じてリフレッシュトークン)を取得
1.事前準備
Section titled “1.事前準備”1. 1 クライアントIDの確認
Section titled “1. 1 クライアントIDの確認”アプリの環境設定ページでは、サンドボックス環境用と本番環境用それぞれにクライアントIDとクライアントシークレットが表示されています。
利用したい環境のクライアントIDとクライアントシークレットを確認しましょう。
※ネイティブアプリではクライアントシークレットは発行されません。
1. 2 契約IDの確認 ※WEBアプリの場合
Section titled “1. 2 契約IDの確認 ※WEBアプリの場合”契約IDとはスマレジのアカウントごとに付与される識別子で、 APIのエンドポイントURLに含めて利用します。
開発環境でテストを行う場合、スマレジ・デベロッパーズの管理画面左上に表示されています。(sb_xxxx
)
1. 2 リダイレクトURIの設定(OpenID Connectを利用する場合)
Section titled “1. 2 リダイレクトURIの設定(OpenID Connectを利用する場合)”アプリの「環境設定」ページにある「リダイレクトURI」に、OpenID Connectを利用した認証が完了した後にユーザーがリダイレクトされるURLを設定します。
2.認可要求の送信(ユーザーログイン)
Section titled “2.認可要求の送信(ユーザーログイン)”ユーザーにスマレジの認証を行ってもらうため、ブラウザ等を使ってスマレジIDプロバイダーの認可エンドポイントにリダイレクトします。 エンドポイントURLは次の形式です。
- 開発環境:
https://id.smaregi.dev/authorize?response_type=code&client_id=
<クライアントID>&redirect_uri=<登録したリダイレクトURI>&scope=<要求するスコープ一覧>
本番環境: https://id.smaregi.jp/authorize?response_type=code&client_id=<クライアントID>&redirect_uri=<登録したリダイレクトURI>&scope=<要求するスコープ一覧>
例えば、openidによる認証と商品参照の権限を要求する場合、scope=openid pos.products:read
のように指定します。
(長期利用やリフレッシュトークンが必要な場合はここに offline_access
も含めます。)
上記URLにユーザーを誘導しログインさせることで、スマレジ側でユーザー認証とアプリへの許可確認が行われます。
ユーザーが認証および許可を完了すると、先ほど指定したリダイレクトURIに認可コード (code) が付与されてリダイレクトされます。
リダイレクト先のURLの例:
https://あなたのアプリ/callback?code=XXXXXXXXXX&state=abcdefg
(※ state
は任意で設定した場合に付与される検証用文字列です。)
3. トークンエンドポイントへの交換リクエスト:
Section titled “3. トークンエンドポイントへの交換リクエスト:”アプリケーション(自前のサーバーやクライアント)は、受け取った認可コードを用いてスマレジのトークンエンドポイントにPOSTリクエストを送ります。
エンドポイントURLは、アプリアクセストークンと同じくhttps://id.smaregi.dev/token
(本番では id.smaregi.jp/token
)になります。
リクエストには以下の情報を含めます。
- ヘッダーに
Content-Type: application/x-www-form-urlencoded
を指定 - クライアント認証の指定
- WEBアプリの場合は、Basic認証ヘッダーにクライアントIDとクライアントシークレットを含めます。
- ネイティブアプリの場合は、クライアントシークレットが無いので、Basic認証は不要です。
- ボディに
grant_type=authorization_code
、code=<認可コード>
、redirect_uri=<リダイレクトURI>
を含める
(リダイレクトURIは認可リクエスト時に指定したものと同じものです。)- ネイティブアプリの場合は
code_verifier=<コードベリファイア>
も加えます。
code_verifier
は認可リクエスト前にランダムに生成し、 認可リクエストURLに含めたcode_challenge
の元となる文字列です。
- ネイティブアプリの場合は
4.トークン受け取り
Section titled “4.トークン受け取り”正しくリクエストが行われると、レスポンスとしてアクセストークンがJSONで返されます。
ユーザーアクセストークンの場合、レスポンスには通常 access_token
に加えてrefresh_token
(リフレッシュトークン)が含まれます。
(※取得には認可リクエスト時に offline_access
スコープを指定している必要があります。)
例:
{ "access_token": "XXXXXXXX", "refresh_token": "YYYYYYYY", "scope": "openid pos.products:read offline_access", "token_type": "Bearer", "expires_in": 3600, "id_token": "ZZZZZZZZZ"}
取得した access_token
を使って、ユーザーの権限でスマレジAPIを呼び出すことができるようになります。
注意: expires_in
の示す通りアクセストークンには有効期限(例: 約1時間)があります。
期限が切れた場合、refresh_token
を用いて新たなアクセストークンを取得するか、再度ユーザー認証フローを実行する必要があります。
よくあるエラーと対処法
Section titled “よくあるエラーと対処法”アクセストークンを取得する際によく発生しがちなエラー事例と、その原因・対策をまとめます。
クライアント認証のエラー:
Section titled “クライアント認証のエラー:”アクセストークン取得APIへのリクエストで 401 Unauthorized
や invalid_client
といったエラーが発生する場合、Basic認証の設定やクライアントID/クライアントシークレットの誤りが考えられます。
対策として、以下を確認してください。
- Authorizationヘッダーで指定したBasic認証情報が正しくBase64エンコードされているか(形式は
Basic <Base64(client_id:client_secret)>
) - 開発環境と本番環境でクライアント情報や契約IDを取り違えていないか
- ネイティブアプリの場合はクライアントシークレットが存在しないため、Basic認証ヘッダー自体が不要
誤ってBasic認証を付けていないか。
ユーザー権限によるアクセス制限:
Section titled “ユーザー権限によるアクセス制限:”ユーザーアクセストークンを利用する場合、そのユーザーがスマレジで持つ権限以上の操作はAPI経由でも行えません。
例えば、ある店舗のデータ参照権限を持たないユーザーのトークンでは、その店舗の商品一覧を取得するAPIを呼び出してもデータが返ってこないかエラーになります。
また、一部のAPIはユーザーアクセストークンでは呼び出せません。
スマレジの機能によってはアプリアクセストークンでのアクセスのみ許可されており、ユーザーアクセストークンでは対応していないものがあります。
このような場合は、サーバーサイドからアプリアクセストークンを用いてAPIを呼び出すようにするなど、アプリの設計を見直す必要があります。
ユーザーアクセストークン取得時の「400 Bad Request」エラー:
Section titled “ユーザーアクセストークン取得時の「400 Bad Request」エラー:”認可コードフローで必要なパラメータが不足している可能性があります。
主に以下の3つの原因が考えられます。
それぞれの原因と対策を確認し、設定内容をご確認ください。
原因1:PKCEの実装漏れ(ネイティブアプリの場合)
Section titled “原因1:PKCEの実装漏れ(ネイティブアプリの場合)”ネイティブアプリでは、PKCEの実装が必須です。
認可リクエストで code_challenge
(S256方式)と code_challenge_method
を指定し、
トークンリクエストでそれに対応する code_verifier
を送信する必要があります。
これらが正しく設定されていない場合、認証サーバーから 400エラー が返され、リクエストは拒否されます。
対策
- 認可リクエストに
code_challenge
およびcode_challenge_method=S256
を含める - トークンリクエストで、対応する
code_verifier
を送信する
原因2:スコープ不足による権限エラー
Section titled “原因2:スコープ不足による権限エラー”アクセストークン取得時に指定したスコープに、呼び出したいAPIの必要権限が含まれていない場合、
API呼び出し時に 403 Forbidden や権限エラーが発生します。
例
- 商品一覧APIを使用するには、アクセストークンに
pos.products:read
スコープが含まれている必要があります。
対策
- アプリの環境設定で、必要なスコープが有効になっているか確認する
- トークン取得時の
scope
パラメータに漏れがないか確認する
原因3:offline_access
の未指定(リフレッシュトークンが発行されない)
Section titled “原因3:offline_access の未指定(リフレッシュトークンが発行されない)”長期間にわたってユーザーのアクセストークンを利用したい場合は、認可リクエスト時に offline_access
スコープを含める必要があります。
指定しないと、リフレッシュトークンが発行されず、アクセストークンが失効した後に再認証が必要になります。
対策
- 認可リクエストの
scope
にoffline_access
を含める
この流れを踏めば、開発用に取得したアクセストークンを使って、スマレジ・プラットフォームAPIの各エンドポイントへリクエストを送ることができます。
開発が完了し、本番リリース時には本番環境用のクライアント情報・URLに切り替えて 運用してください。
以上が「アクセストークンの取得」の概要となります。
詳細なパラメータ仕様は、スマレジ・プラットフォームAPI共通仕様書などもあわせてご参照ください。
引き続き、他のチュートリアルやドキュメントをご活用いただき、スマレジ・プラットフォームAPIの開発を進めてください。