最低技術要件
実装が必要なWebhook
Webhook | ||||||
---|---|---|---|---|---|---|
提供プラン形態 | インストール | アンインストール | トライアル終了後の自動更新処理 成功/失敗 | 月額自動更新処理 成功/失敗 | プラン変更 | サブスクリプションキャンセル |
無料 | 〇 | 〇 | - | - | - | - |
サブスクリプション | 〇 | 〇 | - | 〇 | 〇※複数プラン提供の場合のみ | 〇 |
サブスクリプション 初期費用あり |
〇 | 〇 | - | 〇 | 〇※複数プラン提供の場合のみ | 〇 |
サブスクリプション トライアルあり |
〇 | 〇 | 〇 | 〇 | 〇※複数プラン提供の場合のみ | 〇 |
サブスクリプション 初期費用・トライアルあり |
〇 | 〇 | 〇 | 〇 | 〇※複数プラン提供の場合のみ | 〇 |
makeshop apps外での独自決済 (遷移先のアプリ側にて決済) |
〇 | 〇 | - | - | - | - |
詳細はシーケンス図をご確認ください。
アプリ側で必要な制御
サブスクリプションプランを提供される場合のアプリの利用制限の制御
サブスクリプションステータスに応じて、アプリの利用制限をアプリ側で制御してください。
「利用終了」の際、アプリの利用制限はアプリ側で制御してください。
「決済失敗」の際、アプリを利用可能とするか利用制限をかけるかはアプリ側で制御してください。
- ※ショップ様の状況によっては、料金が未収のまま強制的に利用停止となることがあります。
- ※利用規約に支払い等に関する事項を含めていただくようお願いいたします。
その他必須要件
アプリ内データのショップオーナーへの提供
アプリ利用の中で生成 または連携されたデータのうち、ショップオーナーに所有権があるデータはご要望があった場合には提供のご対応をお願いいたします。
提供形態は自由ですが、ダウンロード機能の設定や運用におけるデータ提供等のご対応をご準備いただきますようお願いいたします。
インストール
インストールとは
ショップ管理画面にて、アプリを追加する処理が「インストール」となります。
インストールによって行われる処理
ショップオーナーによってアプリがインストールされた際、以下の処理が行われます。
- ・インストールフックURLの呼び出し
アンインストール
アンインストールとは
ショップ管理画面にて、アプリを削除する処理が「アンインストール」となります。
アンインストールによって行われる処理
ショップオーナーによってアプリがアンインストールされた際、以下の処理が行われます。
- ・アンインストールフックURLの呼び出し
提供可能なアプリパターン
無料プラン | 有料プラン(サブスクリプション) | makeshop apps外での独自決済 (遷移先のアプリ側にて決済) |
|
---|---|---|---|
1アプリ複数プラン | ✕ | 〇 | ✕ |
0円プランの設置 | 〇 ※0円のみ |
✕ | 〇 ※0円のみ |
トライアルの設置 | ✕ | 〇 | ✕ |
初期費用の設置 | ✕ | 〇 | ✕ |
※提供アプリの種類によって実装するWebhookに差異がございます。
詳細は「最低技術要件」をご確認ください。
無料プラン
- ・1プラン(0円プラン)のみ設置可能
- ・後から有料プランへの変更不可
- ・同一アプリ内に有料プランとの併設不可
※有料プランを作成する場合、別途アプリの新規登録(アプリ開発申請)が必要となります
有料プラン(サブスクリプション)
- ・0円の設定不可
- ・月額利用料を設定し、料金を支払うことで利用可能
- ・決済時のクレカ登録が必須(翌月以降自動更新を行うため)
トライアルについて
- ・トライアル期間中はプラン変更不可
- ・トライアル期間終了日の翌日に自動決済
- ・自動決済を回避したい場合はトライアル期間中であれば、キャンセルを行うことが可能
- ・キャンセル後もトライアル期間が残っている場合は期間終了日までは無料で利用可能
初期費用について
- ・初期費用の請求タイミングは、初回決済時のみ
- ・複数プランがある場合、プラン別に初期費用を設置可能
料金の計算方法
決済タイミング | 計算方法 |
---|---|
初回インストール時 | 登録初月は月末までの日割りで即時決済、翌月以降は毎月1日に自動更新 |
自動更新時 | 毎月1日に自動更新 |
トライアルから自動更新へ移行時 |
・トライアル期間終了日の翌日に、その月の日割り価格で(初期費用がある場合は合わせて)決済 ・翌月以降は毎月1日に自動更新 |
再インストール時 |
キャンセル後の当月中 ・当月中は料金支払い済みのため月額料金は発生しない ・翌月以降は自動更新となる キャンセル後の翌月以降 ・(新規契約時と同様) 登録初月は月末までの日割りで即時決済 ・翌月以降は毎月1日に自動更新 |
プラン変更時 |
プラン変更後の月額料金が、現在利用中のプランよりも高い場合 ・当月はプラン変更後の月額料金から当月支払い済みの金額を引き、さらに日割り(30日)した金額を当月残りの日数分掛けた金額を決済します ・翌月はプラン変更後の料金で自動更新されます プラン変更後の月額料金が、現在利用中のプランよりも低い場合 ・当月は差分額0円とし、決済、返金は行いません ・翌月はプラン変更後の料金で自動更新されます |
※日割りの計算方法
- ・プラン価格(税抜)×残日数÷30日(少数切り上げ)
- ・消費税計算では少数切り捨て
-
・日割り+消費税を合計金額とする
例: 10月10日に1,000円のプランでインストールする場合
[プラン料金] 1,000円 × 22日(10月残日数) ÷ 30日 = 734円(733.33..円の切り上げ)
[消費税] 734円 × 10% = 73円(73.4円の切り捨て)
[合計] 734円(プラン料金) + 73円(消費税) = 807円
サブスクリプションステータス
サブスクリプションステータス | 状態説明 | APIの利用可否 | ショップオーナーが可能な操作 |
---|---|---|---|
利用中 | サブスクリプションの利用中 | 利用可 |
・プラン変更(有効なプランが複数ある場合) ・キャンセル |
キャンセル |
サブスクリプションの自動更新がキャンセルされた状態。 トライアル期間内または有効期限内は利用可能。 |
利用可 |
・プラン変更(有効なプランが複数ある場合) ・アンインストール |
利用終了 | キャンセル後、トライアル期間または有効期限が切れた状態。 |
利用可 ※ただし、30日を経過した場合、APIへのアクセスは自動停止 |
・アンインストール |
決済失敗 | サブスクリプションの決済に失敗している状態 | 利用可 |
・アンインストール ※決済失敗のアプリが残っている場合は、他のアプリのインストール・プラン変更は不可 |
キャンセル後の自動更新、返金、アンインストール
- ・翌月以降の自動更新が停止
- ・当月の残期間の返金は不可
-
・キャンセル後もアプリ自体は残るため、アンインストールはショップオーナー自身で行う必要がある
※インストール状態のままであっても自動更新はされません
キャンセル後のプラン変更
- ・複数プランある場合は、別プランへのプラン変更は可能
- ・同プランで利用再開したい場合は、アンインストール後に再インストールが必要
利用終了後のアンインストール
-
・利用終了後もアプリ自体は残るため、アンインストールはショップオーナー自身で行う必要がある
※インストール状態のままであっても自動更新はされません
利用終了後のプラン変更
- ・アンインストール後に再インストールが必要
アンインストール後に再インストールした場合のデータ使用の制御
- アプリをアンインストール後、同ショップIDから再インストールがあった場合、ショップIDにて一意に識別し過去のデータを紐づけることによって、以前のデータを使用可能とするかはアプリ側でご判断ください。
決済失敗への状態移行の対象
- ・トライアルから自動更新移行時の決済に失敗した場合
- ・毎月1日のサブスクリプション自動更新時の決済に失敗した場合
アプリ/プランの制約
- ・無料プラン/サブスクリプションプランの混在は不可
- ・一度設定したプラン形態の変更は不可
- ・一度設定したプランの価格変更は不可
SSO(シングルサインオン)
SSOについて
makeshopのユーザ認証(ログイン)を行うことでアプリケーションのユーザー認証も行うための仕組みです。
また、makeshop apps APIを利用するための一時トークンを払い出すための仕組みとしても提供されます。
事前準備
redirect_uriの登録申請
「アプリ開発申請」及び「アプリ公開申請」にてredirect_uriの登録申請をお願いします。
SSO実行時に必要な情報
クライアントID | redirect_uri 登録時に発行されたクライアントID |
---|---|
クライアント シークレット | redirect_uri 登録時に発行されたクライアントシークレット |
SSO ログインURL |
アプリケーションがSSOログインをする URLhttps://console.makeshop.jp/apps/sso |
一時トークン発行 URL |
認可コードから一時トークン、IDトークン及びリフレッシュトークンを発行する URLhttps://app-auth.makeshop.jp/oauth2/token ※一時トークンの有効期限は5分となります |
APIエンドポイント |
API実行時のエンドポイント 「アプリ開発申請」及び「アプリ公開申請」の手続き完了メールで通知しています |
API キー | アプリケーション登録時に発行されたAPIキー |
トークンリフレッシュ URL |
新しい一時トークン、IDトークン及びリフレッシュトークンを発行する URLhttps://app-auth.makeshop.jp/oauth2/token ※リフレッシュトークンの有効期限は12時間となります |
シーケンス図
1. 一時トークンの有無を判定
アプリケーション起動で一時トークンが発行されているか判定し、発行されていればその一時トークンを利用できます。
一時トークンが発行されていない場合、SSOログインへリダイレクトをします。
一時トークンの有効期限を超えている場合、トークンリフレッシュを実行してください。
※APIリクエスト方法は、以下でご確認ください。
https://developers.makeshop.jp/api/graphql/index.html#introduction-item-1
2. SSOログインへリダイレクト
パラメータを付与してSSOログインへリダイレクトします。
リダイレクト先URL
https://console.makeshop.jp/apps/sso
クエリ
パラメータ | 必須 | 説明 |
---|---|---|
response_type | 必須 |
code固定 |
client_id | 必須 | redirect_uri 登録時に発行されたクライアントID |
redirect_uri | 必須 | 登録申請したredirect_uri |
state | 必須 |
クロスサイトリクエストフォージェリ防止用の固有な英数字の文字列(8文字以上)。 ログインセッションごとにWebアプリでランダムに生成してください。 なお、URLエンコードされた文字列は使用できません。 |
code_challenge | 任意 |
PKCE対応するために必要なパラメータ。 一意のcode_verifierをSHA256でハッシュ化したうえで、Base64URL形式にエンコードした値。 デフォルト値はnullです。 (値を指定しない場合、リクエストはPKCE対応されません) |
code_challenge_method | 任意 |
S256固定 ※code_challengeを設定する場合は必須となります。 |
nonce | 任意 |
リプレイアタックを防止するための文字列。 この値はレスポンスで返されるIDトークンに含まれます。 |
3. 認可コードの受け取り
redirect_uriに認可コード等のクエリパラメータが付与された状態でリクエストされます。
クエリ
パラメータ | 説明 |
---|---|
code | 一時トークン発行で使用する認可コードです。 |
scope | アプリケーションに設定されているAPIの利用権限を返します。 |
state | SSOログインURLのstateパラメータを返却します。 |
エラー
エラーが発生した場合、error及びerror_descriptionをパラメータに付与しredirect_uriへリダイレクトします。
4. 一時トークン発行
認可コードを利用し、一時トークンを取得します。
以降、APIへアクセスする際に一時トークンを利用します。
一時トークンの有効期限を超えた場合、「5. トークンリフレッシュ」をご参照ください。
リクエスト
POST
https://app-auth.makeshop.jp/oauth2/token
ヘッダー
名前 | 値 |
---|---|
Authorization |
Basic クライアントID:クライアントシークレット ※クライアントIDとクライアントシークレットはBase64エンコード |
Content-Type |
application/x-www-form-urlencoded固定 |
ボディ
パラメータ | 必須 | 説明 |
---|---|---|
grant_type | 必須 |
authorization_code固定 |
client_id | 必須 | redirect_uri 登録時に発行されたクライアントID |
code | 必須 | リダイレクトのパラメータ 認可コード |
redirect_uri | 必須 | 登録申請したredirect_uri |
code_verifier | 任意 | SSOログインURL code_challenge の基となる code_verifier |
レスポンス
リクエストが認可されるとJSONフォーマットでトークン情報を返します。
フィールド名 | 値 |
---|---|
token_type |
bearer固定 |
access_token |
リソースへのアクセスを認可するための一時トークンです。 makeshop apps APIを実行する際に使用します。 |
id_token |
ユーザが認証されたことを証明するためのトークンです。 nonceの検証はこのトークンをJWTデコードしたJSON の nonce と SSO ログイン URLのnonce と一致するか確認します。 ※JWSの検証をする場合、以下のURLよりJWK Setを取得してください。 auth-facadeのurl/.well-known/jwks.json |
refresh_token | トークンをリフレッシュする際に使用します。 |
scope | アプリケーションに設定されているAPIの利用権限を返します。 |
expires_in | 一時トークンの有効期限を返します。 |
エラー
HTTPステータス | 値 |
---|---|
400 Bad Request 401 Unauthorized 500 Internal Server Error |
[レスポンス例] { "error": "internal server error", "error_description": "The server encountered an error and could not complete your request" } |
5. トークンリフレッシュ
一時トークンの有効期限が切れた際に、リフレッシュトークンを利用して新たな一時トークンの要求をします。
リクエスト
POST
https://app-auth.makeshop.jp/oauth2/token
ヘッダー
名前 | 値 |
---|---|
Authorization |
Basic クライアントID:クライアントシークレット ※クライアントIDとクライアントシークレットはBase64エンコード |
Content-Type |
application/x-www-form-urlencoded |
ボディ
パラメータ | 必須 | 説明 |
---|---|---|
grant_type | 必須 |
refresh_token固定 |
client_id | 必須 | redirect_uri 登録時に発行されたクライアントID |
refresh_token | 必須 | リフレッシュトークン |
レスポンス
リフレッシュトークンが有効であれば、JSONフォーマットでトークン情報を返します。
フィールド名 | 説明 |
---|---|
token_type |
bearer固定 |
access_token |
リソースへのアクセスを認可するための一時トークンです。 makeshop apps APIを実行する際に使用します。 |
id_token |
ユーザが認証されたことを証明するためのトークンです。 nonceの検証はこのトークンをJWTデコードしたJSON の nonce と SSO ログイン URLのnonce と一致するか確認します。 ※JWSの検証をする場合、以下のURLよりJWK Setを取得してください。 auth-facadeのurl/.well-known/jwks.json |
refresh_token | 一時トークンをリフレッシュする際に使用します |
scope | アプリケーションに設定されているAPIの利用権限を返します。 |
expires_in | 一時トークンの有効期限を返します |
エラー
HTTPステータス | 値 |
---|---|
400 Bad Request 401 Unauthorized 500 Internal Server Error |
[レスポンス例] { "error": "internal server error", "error_description": "The server encountered an error and could not complete your request" } |
ユースケース
アプリを起動したショップが新規ショップか、既存ショップかを判別し、ユーザに合わせた画面を表示するユースケース