LINEミニアプリ APIリファレンス

Markdownで表示

サービスメッセージ

認証済ミニアプリでのみ利用できます

この機能は、認証済ミニアプリでのみ利用できます。未認証ミニアプリの場合、開発用の内部チャネルではテストできますが、公開用の内部チャネルでは利用できません。

サービスメッセージAPIを使用すると、サービスからLINEミニアプリのユーザーに、サービスメッセージを送信できます。

サービスメッセージを送信するには、サービス通知トークンとテンプレートが必要です。

サービス通知トークンを発行する

サービス通知トークンを発行します。サービス通知トークンを使用すると、紐づけられたユーザーに対してサービスメッセージを送信できます。

サービス通知トークンの特徴は以下のとおりです。

  • サービス通知トークンは、発行から1年間(31,536,000秒間)有効です。有効期限が切れるまでに、最大5回サービスメッセージを送信できます。
  • サービス通知トークンを使用すると、有効期限が切れておらず、残りの送信可能回数が0でない場合は、サービス通知トークンの値が更新されます。ユーザーに対して、後続のサービスメッセージを送信する場合は、更新後のサービス通知トークンを保存してください。
1つのアクセストークンで複数のサービス通知トークンを発行しないでください

liff.getAccessToken()で取得したアクセストークン(LIFFのアクセストークン)を再利用して、複数のサービス通知トークンを発行することは許可されていません。

LIFFのアクセストークン1つにつき、発行できるサービス通知トークンは1つだけです。

注意

サービス通知トークンは、一人のユーザーに紐づいています。あるユーザーに紐づいたサービス通知トークンを利用して、ほかのユーザーにサービスメッセージを送信することはできません。

リクエストの例

HTTPリクエスト

POST https://api.line.me/message/v3/notifier/token

リクエストヘッダー

Content-Type

必須

application/json

Authorization

必須

Bearer {channel access token}
詳しくは、「チャネルアクセストークン」を参照してください。

ステートレスチャネルアクセストークンの使用を推奨します

LINEミニアプリチャネルでは、長期のチャネルアクセストークンおよび、任意の有効期間を指定できるチャネルアクセストークン(チャネルアクセストークンv2.1)は使用できません。

LINEミニアプリの開発では、ステートレスチャネルアクセストークンまたは短期のチャネルアクセストークンを使用できます。このうち、ステートレスチャネルアクセストークンの使用を推奨します。ステートレスチャネルアクセストークンは、発行数に制限がないため、アプリケーション側でトークンのライフサイクルを管理する必要がありません。

リクエストボディ

liffAccessToken

String

必須

liff.getAccessToken()で取得したアクセストークン(LIFFのアクセストークン)

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

notificationToken

String

サービス通知トークン

expiresIn

Number

サービス通知トークンの有効期限が切れるまでの秒数。サービス通知トークンは、発行から1年間(31,536,000秒間)有効です。

remainingCount

Number

発行されたサービス通知トークンで、サービスメッセージを送信できる回数

sessionId

String

セッションID。詳しくは、「サービスメッセージを送信する」を参照してください。

レスポンスの例

エラーレスポンス

以下のいずれかのステータスコードとエラーメッセージを返します。

ステータスコード説明
400 Bad request以下のいずれかです。
  • リクエストボディに問題があります。
  • liffAccessTokenプロパティに指定したLIFFのアクセストークンを使用して、サービス通知トークンの発行が短時間に連続してリクエストされました。
401 Unauthorized以下のいずれか、または両方です。
  • 有効なチャネルアクセストークンが指定されていません。
  • 有効なLIFFのアクセストークンが指定されていません。
    • ユーザーがLIFFアプリを閉じると、有効期限が切れていなくてもアクセストークンは無効化されます。
403 Forbiddenこのチャネルには、サービス通知トークンを発行する許可が与えられていません。
500 Internal Server Error内部サーバーのエラーです。

エラーレスポンスの例

サービスメッセージを送る

サービス通知トークンで指定されたユーザーに、サービスメッセージを送信します。

サービスメッセージを送信すると、有効期限が切れておらず、残りの送信可能回数が0でない場合は、サービス通知トークンの値が更新されます。ユーザーに対して、後続のサービスメッセージを送信する予定がある場合は、更新後のサービス通知トークンを保存してください。

リクエストの例

HTTPリクエスト

POST https://api.line.me/message/v3/notifier/send

リクエストヘッダー

Content-Type

必須

application/json

Authorization

必須

Bearer {channel access token}
詳しくは、『LINEプラットフォームの基礎知識』の「チャネルアクセストークン」を参照してください。

ステートレスチャネルアクセストークンの使用を推奨します

LINEミニアプリチャネルでは、長期のチャネルアクセストークンおよび、任意の有効期間を指定できるチャネルアクセストークン(チャネルアクセストークンv2.1)は使用できません。

LINEミニアプリの開発では、ステートレスチャネルアクセストークンまたは短期のチャネルアクセストークンを使用できます。このうち、ステートレスチャネルアクセストークンの使用を推奨します。ステートレスチャネルアクセストークンは、発行数に制限がないため、アプリケーション側でトークンのライフサイクルを管理する必要がありません。

クエリパラメータ

target

必須

service

リクエストボディ

templateName

String

必須

サービスメッセージとして利用する、追加済みテンプレートの名前。テンプレートの名前はLINE Developersコンソールで確認できます。詳しくは、「送信できるサービスメッセージの種類」を参照してください。
BCP 47言語タグを末尾に追加してください。
フォーマット:{template name}_{BCP 47 language tag}
最大文字数:30

注意

サービスメッセージでサポートしている言語と言語タグは、以下のとおりです。

  • 日本語:ja
  • 英語:en
  • 中国語(繁体字):zh-TW
  • タイ語:th
  • インドネシア語:id
  • 韓国語:ko

params

object

必須

テンプレート変数と値のペアを指定するJSONオブジェクト。
テンプレートにテンプレート変数がない場合は、空のJSONオブジェクト({ })を指定します。
テンプレート変数は、テンプレートごとに定義されています。必須の要素にテンプレート変数が含まれる場合は、必ずテンプレート変数と値のペアを指定してください。
詳しくは、「サービスメッセージのテンプレートをチャネルに追加する」を参照してください。

notificationToken

String

必須

サービス通知トークン

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

notificationToken

String

更新後のサービス通知トークン。このサービス通知トークンを使用して、後続のサービスメッセージを送信します。

expiresIn

Number

更新後のサービス通知トークンの有効期限が切れるまでの秒数

remainingCount

Number

更新後のサービス通知トークンで、後続のサービスメッセージを送信できる回数

sessionId

String

セッションID。詳しくは、「サービスメッセージを送信する」を参照してください。

注意

expiresInおよびremainingCountの値が0の場合は、サービスメッセージは送信されたが、サービス通知トークンが更新できなかったことを示します。

レスポンスの例

エラーレスポンス

以下のいずれかのステータスコードとエラーメッセージを返します。

ステータスコード説明
400 Bad request以下のいずれかです。
  • リクエストボディに問題があります。
  • サービスメッセージ送信対象のユーザーが存在しません。
401 Unauthorized以下のいずれか、または両方です。
  • 有効なチャネルアクセストークンが指定されていません。
  • 有効なサービス通知トークンが指定されていません。
403 Forbidden以下のいずれかです。
  • このチャネルには、サービスメッセージを送信する許可が与えられていません。
  • 指定されたテンプレートが見つかりません。
500 Internal Server Error内部サーバーのエラーです。

エラーレスポンスの例

共通プロフィールのクイック入力

認証済ミニアプリでのみ利用できます

共通プロフィールのクイック入力を利用するには、LINEミニアプリが認証済みであり、かつクイック入力の利用申請を行う必要があります。詳しくは、「クイック入力の利用手順」を参照してください。

クイック入力とは、LINEミニアプリ上で[自動入力]をタップすることで、必要なプロフィール情報が自動で入力される機能です。ユーザーがアカウントセンターで設定した共通プロフィールの情報が、LINEミニアプリで簡単に利用できます。詳しくは、「共通プロフィールのクイック入力の概要」を参照してください。

liff.$commonProfile.get()

ユーザーがアカウントセンターで設定している共通プロフィールの情報を取得します。

liff.$commonProfile.get()メソッドを実行すると、ユーザーがプロフィールの情報を確認するためのモーダルが表示されます。表示されたモーダルでプロフィールを確認後、ユーザーが[自動で入力する]をタップすると、共通プロフィールの情報を取得できます。

モーダルの表示例:

構文

javascript
liff.$commonProfile.get(scopes, options);

引数

scopes

Array of strings

必須

取得したい共通プロフィールのスコープを指定します。

scopesに指定できる値については、「取得できる共通プロフィールのスコープと戻り値」を参照してください。

options

Object

任意

共通プロフィールの情報を取得するときのオプション

options.formatOptions

Object

任意

情報の形式に関するオプション。scopesプロパティで指定した各スコープに対して、formatOptionsオブジェクトを指定します。

キーには、オプションを設定したいスコープをキャメルケース形式で指定します。たとえば、スコープがgiven-nameのとき、キーはgivenNameになります。

formatOptionsオブジェクト

excludeEmojis

Boolean

任意

文字列内の絵文字を削除するかどうか。デフォルトはtrueです。以下のスコープにのみ指定できます。

  • givenName
  • familyName

excludeNonJp

Boolean

任意

12桁以上の電話番号を排除するかどうか。デフォルトはtrueです。trueの場合、電話番号が12桁以上のときは、空文字とエラー情報を返します。以下のスコープにのみ指定できます。

  • tel

digitsOnly

Boolean

任意

数字以外の郵便番号を排除するかどうか。デフォルトはtrueです。trueの場合、郵便番号に数字以外が含まれているときは、空文字とエラー情報を返します。以下のスコープにのみ指定できます。

  • postalCode

戻り値

{ data: Partial<CommonProfile>, error: Partial<CommonProfileError>}型のPromiseオブジェクトが返されます。

Promiseがresolveされると、dataプロパティにユーザーの共通プロフィール情報を含むPartial<CommonProfile>型、errorプロパティにエラー情報を含むPartial<CommonProfileError>型のオブジェクトが渡されます。

次のような場合、dataが持つプロパティはundefinedもしくはnullになります。

  • undefinedになるケース
    • 引数のscopesで対象の項目を指定していない場合
    • 引数のscopesで対象の項目を指定したが、ユーザーがその項目の権限を許可していない場合
  • nullになるケース
    • ユーザーが共通プロフィールで対象の項目に値を設定していない場合
    • 共通プロフィールで対象の項目を取得する時にエラーが発生した場合

指定したスコープに応じて取得できるプロパティの値については、「取得できる共通プロフィールのスコープと戻り値」を参照してください。

Partial<CommonProfile>型のオブジェクトの例

Partial<CommonProfileError>型のオブジェクトの例

エラーレスポンス

Promiseがrejectされたときは、LiffErrorが渡されます。

プラグインを正しくインストールせずにAPIを呼んだ場合の例

LIFFブラウザ以外でAPIが呼ばれた場合の例

liff.$commonProfile.getDummy()

共通プロフィールのダミーデータを取得します。10種類のダミーデータが用意されており、caseIdによって取得するダミーデータを指定できます。

liff.$commonProfile.getDummy()メソッドを実行すると、プロフィールの情報を確認するためのモーダルが表示されます。[自動で入力する]をタップすると、共通プロフィールのダミーデータを取得できます。

モーダルの表示例:

構文

javascript
liff.$commonProfile.getDummy(scopes, options, caseId);

引数

scopes

Array of strings

必須

取得したい共通プロフィールのスコープを指定します。

scopesに指定できる値については、「取得できる共通プロフィールのスコープと戻り値」を参照してください。

options

Object

任意

共通プロフィールの情報を取得するときのオプション

options.formatOptions

Object

任意

情報の形式に関するオプション。scopesプロパティで指定した各スコープに対して、formatOptionsオブジェクトを指定します。

キーには、オプションを設定したいスコープをキャメルケース形式で指定します。たとえば、スコープがgiven-nameのとき、キーはgivenNameになります。

caseId

number

必須

取得したいダミーデータのIDを指定します。IDが1から10までのダミーデータが用意されています。

caseIdごとのダミーデータについては、「取得できる共通プロフィールのダミーデータ」を参照してください。

戻り値

{ data: Partial<CommonProfile>, error: Partial<CommonProfileError>}型のPromiseオブジェクトが返されます。

Promiseがresolveされると、dataプロパティにダミーデータを含むPartial<CommonProfile>型、errorプロパティにエラー情報を含むPartial<CommonProfileError>型のオブジェクトが渡されます。

次のような場合、dataが持つプロパティはundefinedもしくはnullになります。

  • undefinedになるケース
    • 引数のscopesで対象の項目を指定していない場合
  • nullになるケース
    • ダミーデータで対象の項目に値が設定されていない場合

指定したIDに応じて取得できるダミーデータについては、「取得できる共通プロフィールのダミーデータ」を参照してください。

Partial<CommonProfile>型のオブジェクトの例

Partial<CommonProfileError>型のオブジェクトの例

エラーレスポンス

Promiseがrejectされたときは、LiffErrorが渡されます。

プラグインを正しくインストールせずにAPIを呼んだ場合の例

LIFFブラウザ以外でAPIが呼ばれた場合の例

liff.$commonProfile.fill()

取得した共通プロフィールの情報をフォームに自動入力します。それぞれのプロフィール情報とフォームの紐づけには、data-liff-autocomplete属性を用います。

スコープと一致しないフォームへの自動入力

liff.$commonProfile.fill()による自動入力は、フォームのdata-liff-autocomplete属性を用いて行います。このとき、フォームのdata-liff-autocomplete属性に指定する値は、取得したプロフィール情報のスコープ(family-nametelbday-yearなど)と一致している必要があります。

たとえば、誕生年(bday-year)、誕生月(bday-month)、誕生日(bday-day)の情報をそれぞれ取得した後、20110623のような形式に加工した上でフォームに自動入力させたい場合は、liff.$commonProfile.fill()の代わりに、document.getElementById().valuedocument.querySelector().valueを用いることができます。

取得した姓、電話番号、性別をそのまま自動入力する例

取得した共通プロフィール情報の形式を一部変更して自動入力する場合

構文

javascript
liff.$commonProfile.fill(profile);

引数

profile

Partial<CommonProfile>

必須

フォームに自動入力させるプロフィール情報を、Partial<CommonProfile>型で指定します。

指定できるスコープについては、「取得できる共通プロフィールのスコープと戻り値」を参照してください。

戻り値

なし

アプリ内課金(クライアント)

アプリ内課金機能を利用するには申請が必要です

アプリ内課金機能を利用するには、利用申請を行う必要があります。詳しくは、『LINEミニアプリドキュメント』の「アプリ内課金の概要」を参照してください。

liff.iap.getPlatformProducts()

アプリ内課金で購入可能なアイテムの一覧を取得します。

構文

javascript
liff.iap.getPlatformProducts({ productIds });

引数

productIds

Array of strings

必須

取得したいアイテムのプロダクトIDの配列

戻り値

Promiseオブジェクトが返されます。Promiseオブジェクトがresolveされると、プロダクトIDをキーとし、以下のプロパティを持つオブジェクトが渡されます。

currency

String

ISO 4217形式の通貨コード。ユーザーが使用しているアプリストアのリージョンにローカライズされた通貨で返されます。

price

Number

アイテムの価格。ユーザーが使用しているアプリストアのリージョンにローカライズされた通貨で返されます。

productName

String

アイテムの名前。ユーザーが使用しているアプリストアのリージョンにローカライズされた表記で返されます。

戻り値の例

エラーレスポンス

Promiserejectされたときは、LiffErrorが渡されます。

発生する可能性があるエラーには、次のようなものがあります。

エラーメッセージ説明
Need access_token for api call, Please login firstユーザーがログインしていません。
In-App Purchase is not allowed in external browserメソッドが外部ブラウザで実行されました。
In-App Purchase is not allowed in this LIFF appユーザーが実行したLINEミニアプリがアプリ内課金をサポートしていません。

liff.iap.requestConsentAgreement()

ユーザーに対して、LINEアプリ内課金利用規約への同意を求めます。

ユーザーがLINEアプリ内課金利用規約に対し未同意の場合や、新たな同意が必要な場合は同意画面が表示されます。

常に最新の同意状況を確認してください

LINEアプリ内課金利用規約が更新された場合、再度の同意が必要になります。アプリ内課金を開始する前には、必ずこのメソッドを呼び出して最新の同意状況を確認してください。

構文

javascript
await liff.iap.requestConsentAgreement();

引数

なし

戻り値

Promiseオブジェクトが返されます。

  • ユーザーが同意するとresolveされます。
  • ユーザーが同意しない場合や失敗した場合は、エラーオブジェクトを伴ってrejectされます。

エラーレスポンス

Promiserejectされたときは、LiffErrorが渡されます。

発生する可能性があるエラーには、次のようなものがあります。

エラーメッセージ説明
The user did not agree to the terms.ユーザーがLINEアプリ内課金利用規約に同意しませんでした。
Need access_token for api call, Please login firstユーザーがログインしていません。
In-App Purchase is not allowed in external browserメソッドが外部ブラウザで実行されました。
In-App Purchase is not allowed in this LIFF appユーザーが実行したLINEミニアプリがアプリ内課金をサポートしていません。

エラーレスポンスの例

liff.iap.createPayment()

アプリストア(App Store、Google Play)の決済確認画面を起動し、購入処理を開始します。

構文

javascript
liff.iap.createPayment({ productId, orderId });

引数

productId

string

必須

事前に定義済みのプロダクトID

orderId

String

必須

購入処理を予約する」エンドポイントで取得した注文ID

戻り値

Promise<void>オブジェクトが返されます。

  • 購入が正常に完了するとresolveされます。
  • キャンセルされた場合や失敗した場合は、エラーオブジェクトを伴ってrejectされます。

エラーレスポンス

Promiserejectされたときは、LiffErrorが渡されます。

発生する可能性があるエラーには、次のようなものがあります。

エラーメッセージ説明
Need access_token for api call, Please login firstユーザーがログインしていません。
In-App Purchase is not allowed in external browserメソッドが外部ブラウザで実行されました。
In-App Purchase is not allowed in this LIFF appユーザーが実行したLINEミニアプリがアプリ内課金をサポートしていません。

アプリ内課金(サーバー)

アプリ内課金機能を利用するには申請が必要です

アプリ内課金機能を利用するには、利用申請を行う必要があります。詳しくは、『LINEミニアプリドキュメント』の「アプリ内課金の概要」を参照してください。

レスポンスヘッダー

アプリ内課金のレスポンスには、以下のHTTPヘッダーが含まれます。将来の弊社への問い合わせの際に参照できるよう、ログに保存してください。

レスポンスヘッダー説明
x-line-request-idリクエストID。各リクエストごとに発行されるIDです。

エラーレスポンス

HTTPステータスコードが400番台または500番台の場合、以下のJSONデータを含むレスポンスボディが返されます。

errorCode

String

必須

エラーコード

message

String

必須

エラーメッセージ

details

array

含まれないことがあります

エラーの詳細

details[].message

String

含まれないことがあります

詳細メッセージ

details[].property

String

含まれないことがあります

エラーの発生箇所

エラーレスポンスの例

HTTPステータスコードが400番台の場合

HTTPステータスコードが500番台の場合

購入処理を予約する

アプリストア決済を開始する前に、購入処理を予約します。

レスポンスに含まれる注文ID(orderId)は購入完了イベントにも含まれます。注文IDは弊社への問い合わせや調査で必要になるため、必ず保存してください。

また、予約成功は購入完了を保証しないため、アイテム付与は購入完了イベントを起点に行ってください。

リクエストの例

HTTPリクエスト

POST https://api.line.me/iap/v1/product/reserve

リクエストヘッダー

Authorization

必須

Bearer {user access token}

現在のユーザーのアクセストークン。liff.getAccessToken()メソッドで取得できます。

Content-Type

必須

application/json

リクエストボディ

clientIp

String

必須

サーバーで取得したユーザー端末のIPアドレス。IPv4またはIPv6形式で指定してください。

clientOs

String

必須

liff.getOS()メソッドで取得した値。iosまたはandroid

productId

String

必須

購入対象のプロダクトID

shopProductName

String

必須

購入履歴に表示されるアイテム名。

絵文字や記号は使用できません。ユーザーが購入したアイテムを認識できるように適切な値を設定してください。

最大文字数:20(UTF-16)

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

orderId

String

注文ID。

レスポンスの例

エラーレスポンス

エラーレスポンスの形式については、エラーレスポンスを参照してください。

一般的なもの以外で発生する可能性があるエラーには、次のようなものがあります。

errorCode説明
VALIDATION_ERRORリクエスト制約が守られていません。例として、clientOsiosまたはandroid以外の値が渡されています。
WEBHOOK_URL_IS_NOT_SET支払い完了通知を受け取るWebhook URLが設定されていません。
PRODUCT_ID_NOT_FOUNDリクエストされたプロダクトIDが存在しません。
BLOCKED_USERLINEプラットフォームにより、このユーザーが不正利用者と判断されました。このユーザーに関連するリクエストは処理できません。
INTERNAL_SERVER_ERRORLINEプラットフォームに一時的な問題が発生しています。再試行が可能なエンドポイントについては、指数バックオフや類似の方法で再試行してください。
TERMS_AGREEMENT_ERRORユーザーからアプリ内課金利用の同意を取得する」において、このユーザーから最新の規約に対して同意を得ることができていない場合に発生します。

エラーレスポンスの例

Webhookイベントの履歴を取得する

LINEプラットフォームが送信したWebhookイベントの履歴を取得します。カーソルベースのページネーションで、1回に最大100件取得できます。

ソート順は、LINEプラットフォームでWebhookイベントの送信を開始した日時の昇順となります。

取得できるWebhookイベントは過去7日間に送信されたものに限られます。現時点では購入完了イベントのみ取得可能で、返金イベントは今後対応予定です。

リクエストの例

HTTPリクエスト

GET https://api.line.me/iap/v1/webhook/events

リクエストヘッダー

Authorization

必須

Bearer {channel access token}
詳しくは、『LINEプラットフォームの基礎知識』の「チャネルアクセストークン」を参照してください。

クエリパラメータ

startEpochSeconds

Number

必須

Webhookイベントの履歴を取得する期間の開始日時を指定します。指定した日時も取得対象に含まれます。過去7日以内のUNIX時間(秒)で指定してください。

endEpochSeconds

Number

必須

Webhookイベントの履歴を取得する期間の終了日時を指定します。指定した日時も取得対象に含まれます。過去7日以内のUNIX時間(秒)で指定してください。

cursor

String

Webhookイベントのページのカーソル。
初回のリクエストでは指定しないでください。2回目以降のリクエストでは、前回のリクエスト時のレスポンスに含まれていたnextCursorを指定することで、続きのWebhookイベントを取得できます。

pageSize

Number

必須

1ページあたりのWebhookイベントの件数。

  • 最小値:1
  • 最大値:100

status

String

取得したいWebhookイベントのステータス。次のいずれかを指定します。

  • SUCCESS:受け取りに成功したWebhookイベントの履歴を取得します。
  • FAILED:受け取りに失敗したWebhookイベントの履歴を取得します。

未指定の場合、受け取りの成否に関わらず、すべてのWebhookイベントの履歴を取得します。

ページネーション中はcursor以外のパラメータを変更しないでください

ページネーション中は、cursor以外のパラメータを変更せずにリクエストしてください。パラメータを変更したい場合、最初のページからリクエストし直してください。

レスポンス

成功した場合、ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

events

Array

Webhookイベントのリスト。

events[].transactionType

String

常にPRODUCTが返されます。

events.event

Array

nextCursor

String

含まれないことがあります

次のページのカーソル。
次のページが存在しない場合、nullとなります。

レスポンスの例

エラーレスポンス

エラーレスポンスの形式については、エラーレスポンスを参照してください。

一般的なもの以外で発生する可能性があるエラーには、次のようなものがあります。

errorCode説明
VALIDATION_ERRORリクエスト制約が守られていません。例として、statusSUCCESSまたはFAILED以外の値が渡されています。
INTERNAL_SERVER_ERRORLINEプラットフォームに一時的な問題が発生しています。再試行が可能なエンドポイントについては、指数バックオフや類似の方法で再試行してください。

アプリ内課金 Webhookイベントオブジェクト

アプリ内課金機能を利用するには申請が必要です

アプリ内課金機能を利用するには、利用申請を行う必要があります。詳しくは、『LINEミニアプリドキュメント』の「アプリ内課金の概要」を参照してください。

署名を検証する

LINEミニアプリのサーバーにWebhookのリクエストが届いたら、Webhookイベントを処理する前に、リクエストヘッダーに含まれる署名を検証してください。署名の検証は、LINEミニアプリのサーバーに届いたリクエストが「LINEプラットフォームから送信されたWebhookか」および「通信経路で改ざんされていないか」などを確認するための重要な手順です。

詳しくは、『Messaging APIドキュメント』の「Webhookの署名を検証する」を参照してください。

購入完了イベント

このイベントは、ユーザーがアプリストア(App Store、Google Play)で予約アイテムを購入し、弊社が精算したときに発生します。Webhookのペイロードには購入されたアイテムの情報が含まれます。

Webhookペイロード

type

String

Webhookイベントのタイプ。
purchaseCompleteが指定されます。

orderId

String

ユーザーが購入した注文のID。「購入処理を予約する」エンドポイントのレスポンスに含まれます。

productId

String

ユーザーが購入したアイテムのプロダクトID(productId)。

userId

String

購入を行ったユーザーのユーザーID。

purchaseTimestamp

number

LINEプラットフォームで決済を完了した時間。単位はUNIX時間(秒)です。

この時間は購入を行ったユーザーが実際に支払いを完了した時間ではありません。

channelId

String

LINEミニアプリチャネルのチャネルID。

返金イベント

このイベントは、ユーザーがアプリストア(App Store、Google Play)で購入したアイテムに対して返金が行われた場合に発生します。イベントには返金対象となったアイテムの情報が含まれます。

Webhookペイロード

type

String

Webhookイベントのタイプ。
refundCompleteが指定されます。

orderId

String

ユーザーが購入後にキャンセルした注文のID。「購入処理を予約する」エンドポイントのレスポンスに含まれます。

productId

String

ユーザーが購入後にキャンセルしたアイテムのプロダクトID(productId)。

userId

String

購入後にキャンセルを行ったユーザーのユーザーID。

purchaseTimestamp

number

キャンセルされたアイテムが購入された際の時間。単位はUNIX時間(秒)です。

購入完了イベントpurchaseTimestampと一致します。この時間はユーザーが実際に返金を完了した時間ではありません。

channelId

String

LINEミニアプリチャネルのチャネルID。