Transaction.PurchaseApprovalResult
購入の承認リクエストが解決したときに発行されます。保護者が承認した、保護者が拒否した、または回答がないまま有効期限が切れた、のいずれかです。これは/transaction/request-purchaseの呼び出しに対する回答であり、プロダクトが結果を知る唯一の手段です。
k-IDはTransaction.PurchaseApprovalResultを、購読しているエンドポイントにのみ配信します。それ以外には配信の試行もエラーもなく破棄されます。プロダクトのDeveloper Settingsページで、エンドポイントに対して選択してください。始める前にを参照してください。
1件のリクエストに対してTransaction.PurchaseApprovalResultはちょうど1回発行されます。data.idでリクエストと対応付けてください。これはプロダクトが/transaction/request-purchaseに送ったidです。
フィールド
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
eventType | string | はい | 常に"Transaction.PurchaseApprovalResult" |
data | object | はい | 購入承認結果のデータ |
data.id | string (UUID) | はい | 承認リクエストのID。プロダクトが/transaction/request-purchaseに送ったidと一致します |
data.sessionId | string (UUID) | はい | 購入がリクエストされたセッションID |
data.productId | number | はい | プロダクトID |
data.status | string | はい | approved、denied、またはexpired |
data.resolvedAt | string (date-time) | はい | リクエストがこの結果に至った日時。RFC 3339 |
例
{
"eventType": "Transaction.PurchaseApprovalResult",
"data": {
"id": "9d4e2f81-7a3b-4c56-8e90-1f2a3b4c5d6e",
"sessionId": "b1a6482d-5242-4b4a-aa88-3fa52595a672",
"productId": 42,
"status": "approved",
"resolvedAt": "2026-06-24T15:12:00Z"
}
}
ステータス
status | 意味 | 対応 |
|---|---|---|
approved | 保護者が購入を承認しました。 | 購入を完了する。 |
denied | 保護者が購入を拒否しました。 | 請求しない。保護者が拒否したことをプレイヤーに伝える。 |
expired | リクエストから24時間以内に保護者が回答しませんでした。 | 請求しない。プレイヤーには改めてその購入を提示できる。 |
expiredはエラーではなく、配信の失敗でもありません。有効期限が切れた後、プレイヤーには改めてその購入を提示できます。
請求の前に承認を求めてください
結果は購入をゲートするものであり、購入を記録するものではありません。approvedのときにのみ購入を完了し、deniedとexpiredの両方を「請求しない」として扱ってください。リクエストは24時間後に有効期限切れとなるため、Webhookを無期限に待たないでください。/transaction/request-purchaseが返すexpiresAtが、それ以降は回答が届かなくなる時点です。
配信は少なくとも1回であるため、同じ結果が2回以上届くことがあります。Webhooksの概要の説明に従い、ハンドラをdata.idについて冪等にしてください。
発行されない場合
- 購入について承認がリクエストされていない。
- プロダクトで Purchase Controls 機能(Transactions が必要)が無効であるため、
/transaction/request-purchaseがFEATURE_DISABLEDを返し、リクエストが作成されない。