注文状況追跡のセットアップ
ユーザーにアイテムを付与するには、支払いが成功したことを確認する必要があります。
注文状況を追跡する方法を選択します:
エクソーラデータにアクセスするために、プロジェクトに最も適した方法を選択してください:
サーバーがない場合、またはクライアント側で購入処理のロジックを実装している場合は、次のメソッドを使用できます:
エクソーライベントAPI
エクソーライベントAPIはウェブフックに代わる機能です。これを利用すると、エクソーラのサーバーへリクエストを送信することで、アプリケーションのクライアント側で決済イベントに関する情報を直接受け取ることができます。この方法により、ウェブフックを処理するためのサーバーを独自に構築または保守する必要がなくなります。エクソーライベントAPIの利用に関する詳細については、ドキュメントを参照してください。
WebSocket APIを使用してクライアント側で注文状況の取得
このソリューションでは、websocketを使用して、注文の詳細情報を取得せずに注文状況を取得します。このメソッドが推奨されます:クライアント(例えば、ウェブサイトやモバイルアプリケーション)とエクソーラサーバー間には1つの接続しか作成されないため、クライアントやサーバーへの追加の負荷は発生しません。
以下の手順を完了してください:
- エクソーラのwebsocketサーバーとクライアントが注文状況メッセージを識別できるようにするために、接続を作成します:
- javascript
1const client = new Centrifuge(
2connectionURL,
3{
4data: {
5 user_external_id: user_external_id,
6 auth: auth,
7 project_id: project_id
8}
9}
10)
11connectionURL - wss://ws-store.xsolla.com/connection/websocket
12auth - user JWT token
- 注文状況に関する新しいメッセージを受信するには、
client.on関数を使用してイベントを登録します:
- javascript
1client.on('publication', (ctx) => {
2 //handle the status
3});
- 実際の接続確立をトリガーします:
- javascript
1client.connect()
- 注文状況の変更履歴を受信するには、API履歴メソッドに接続してください。
- javascript
1client.on('subscribed', function (ctx) {
2 client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
3resp.publications.forEach((ctx) => {
4 /handle the status
5});
6
7 }, function (err) {
8 //handle the status
9 });
10});
メッセージ本文の例:
- javascript
1{
2order_id: 59614241,
3status: "new"
4}
以下の注文状況があります:
New— オーダーは作成されたが未払いであるPaid— 注文は支払われるDone— 注文が配信されたこと(すべての領収書の送付、エクソーラ側での配信、外部プラットフォームでの配信、など)Canceled— 注文がキャンセルされ、代金がユーザーに返金される
Websocketの使用に関する推奨事項:
- Websocket経由の応答待ち時間は最大5分です。
- 決済UIを開くときに接続を確立する必要があります。
- 最終的な注文ステータスが
CanceledまたはDoneになったら、接続を中止する必要があります。 - WebSocketの寿命が切れた場合、または接続に問題がある場合は、ショートポーリングを使用します。
ショートポーリング
ステータスを切り替えた後のオーダーのアイテムの詳細情報を取得するには、注文を取得するAPIを呼び出します。
XsollaCatalog.Purchaseメソッドは、注文状況を追跡するためのいくつかのメソッドをカプセル化しています。追跡メカニズムは、Unity向けのSDKに関するドキュメントに詳しく記載されています。
さらに、購入メソッドのonSuccessコールバック関数に渡される注文状況と内容の処理を実装することができます。
CheckPendingOrder SDKメソッドを使用して注文状況を追跡することができます。メソッドに以下のパラメータを渡します:
AccessToken— 商品を購入する時に受け取った決済トークン。OrderId— 商品を購入する時に受け取った注文ID。SuccessCallback— 決済成功時のコールバック。ErrorCallback— リクエストエラー時のコールバック。bIsUserInvolvedToPayment— ユーザーが支払いプロセスに関与しているかどうか。実際通貨で購入する場合はtrueを、無料アイテム購入と仮想通貨で購入する場合はfalseを渡します。
追跡メカニズムは、Unreal Engine向けエンタープライズレベルSDKに関するドキュメントに詳しく記載されています。
注文状況と内容をリクエストするには、CheckOrder SDKメソッドを呼び出し、次のパラメータを渡します:
作成された注文のステータスを追跡して検証するには、アプリケーションのサーバー側でウェブフック処理を構成する必要があります。
エクソーラ側では、アイテムの購入や返金が発生した際にウェブフックを受信する方法として、2つのオプションが用意されています:決済およびトランザクションデータと、購入済みアイテムに関する情報を、別々に受信するか、1つのウェブフックに統合して受信するかを選択できます。デフォルトでは、すべての新規プロジェクトで統合されたウェブフックが受信される設定になっています。
組み込みのウェブフックを受信する新しいオプションに切り替えるには、カスタマーサクセスマネージャーに連絡するか、csm@xsolla.comに電子メールを送信してください。
ウェブフック受信オプションの詳細情報
組み込みのウェブフックで情報を受信します:
2025年1月22日以降にパブリッシャーアカウントに登録した、またはプロジェクトを作成した場合、注文支払い完了(order_paid)と注文のキャンセル(order_canceled)のウェブフックですべての情報を受け取ります。この場合、支払い(payment)と返金(refund)ウェブフックを処理する必要はありません。
個別のウェブフックで情報を受信します:
2025年1月22日以前にパブリッシャーアカウントに登録した、またはプロジェクトを作成した場合、以下のウェブフックを受け取ります:
- 支払いデータや取引の詳細に関する情報を含む支払い(
payment)と返金(refund)ウェブフック。 - 購入したアイテムに関する情報を含む注文支払い完了(
order_paid)と注文のキャンセル(order_canceled)ウェブフック。
すべての受信ウェブフックを処理する必要があります。
インゲームストアと決済管理を完全に操作するには、メインのウェブフックの処理を実装する必要があります:
| ウェブフック名 | 説明 |
|---|---|
ユーザー検証 > ユーザー検証(user_validation) | ユーザーがゲームに登録されていることを確認するため、支払いプロセスのさまざまな段階で送信されます。 |
ゲームサービス > 組み込みのウェブフック > 注文支払い完了(order_paid) | 支払いデータ、トランザクションの詳細、購入した商品に関する情報が含まれます。ウェブフックのデータを使用して、ユーザーにアイテムを追加します。 |
ゲームサービス > 組み込みのウェブフック > 注文のキャンセル(order_canceled) | キャンセルされた支払いのデータ、取引の詳細、購入した商品に関する情報が含まれます。ウェブフックのデータを使用して、購入したアイテムを削除します。 |
以下のスキームは、集約ウェブフックを使用してアイテムを購入して返品するプロセスを示しています。
sequenceDiagram
participant User
participant GameClient as Game Client
participant Xsolla
participant GameServer as Game Server
%% Item Purchase
Note over User, GameServer: Item purchase
User ->> GameClient: Logs in
GameClient ->> Xsolla: Sends user authentication request
Xsolla -->> GameClient: Returns JWT / OAuth 2.0 token
GameClient ->> Xsolla: Sends JWT, project ID, pagination parameters
Xsolla -->> GameClient: Returns array of items
GameClient -->> User: Displays storefront
User ->> GameClient: Selects item and clicks Buy
GameClient ->> Xsolla: Creates order request
Xsolla -->> GameClient: Returns payment token
GameClient ->> Xsolla: Opens payment UI URL with received token
Xsolla ->> GameServer: Sends User validation webhook
GameServer -->> Xsolla: Returns success status code
Xsolla -->> User: Displays payment UI
User ->> Xsolla: Chooses payment method and clicks Pay
Xsolla ->> GameServer: Sends Successful payment for order webhook
GameServer ->> GameServer: Grants purchases to user
GameServer -->> Xsolla: Returns success status code
Xsolla -->> User: Shows successful purchase screen
%% Refund / Chargeback
Note over User, GameServer: Refund / Chargeback
User ->> Xsolla: Requests refund or chargeback
Xsolla ->> GameServer: Sends Order cancellation webhook
GameServer ->> GameServer: Removes items from user inventory
GameServer -->> Xsolla: Returns success status code
Xsolla -->> User: Refunds the payment
アイテムカタログのパーソナライゼーションがアプリケーション側で実装されている場合は、パートナー側でカタログのパーソナライゼーションの処理を設定します。
ウェブフックの完全なリストと、ウェブフックの操作に関する一般情報については、ウェブフックに関するドキュメントを参照してください。
ウェブフックの送信を設定する
エクソーラ側でウェブフックを構成するには:
- パブリッシャーアカウント内のプロジェクトで、設定 >ウェブフックセクションに移動します。
- ウェブフックサーバーフィールドに、ウェブフックを受信したいサーバーのURLを
https://example.com形式で指定します。ウェブフックテストツールで見つけたURLを指定することもできます。
- プロジェクトのウェブフックに署名するための秘密鍵は、デフォルトで生成されます。新しい秘密鍵を生成したい場合は、更新アイコンをクリックします。
- 「ウェブフックを有効にする」をクリックします。
ウェブフックリスナーを追加する
ウェブフックリスナーは、指定されたURLアドレスで受信したウェブフックを受信し、署名を生成し、エクソーラウェブフックサーバーに応答を送信できるようにするプログラムコードです。
署名の生成
ウェブフックを受信する場合、データ伝送のセキュリティを確保する必要があります。そのためには、ウェブフックのデータから署名を生成し、それがHTTPリクエストヘッダで送信された署名と一致することを検証する必要があります。
署名を生成するには:
- リクエスト本文のJSONとプロジェクトの秘密鍵を連結します。
- 最初のステップで取得した文字列にSHA-1暗号化ハッシュ関数を適用します。
ウェブフックへの応答の送信
ウェブフックの受信を確認するには、サーバーが以下のことを返す必要があります:
- 成功した応答の場合は
200、201、または204HTTPコード。 - 指定したユーザーが見つからなかったり、無効な署名が渡された場合、問題に関する説明が記載された
400HTTPコードが表示されます。
ウェブフックハンドラーは、サーバーに一時的な問題が発生した場合に5xxコードを返すこともあります。
エクソーラサーバーが「注文支払い完了」と「注文のキャンセル」のウェブフックで応答を受信しなかった場合、または5xxコードの応答を受信した場合、以下のスケジュールでウェブフックを再送信します:
- 5分間隔で2回再試行
- 15分間隔で7回再試行
- 60分間隔で10回再試行
ウェブフックの送信は、最初の試行から12時間以内に最大20回まで試行されます。
決済および返金のウェブフックにおけるリトライロジックについては、それぞれのウェブフック詳細ページに記載されています。
エクソーラサーバーがユーザー検証ウェブフックに対する応答が受信されなかった場合、400または5xxのコードを含む応答が受信された場合、ユーザー検証ウェブフックは再送信されません。
この場合、ユーザーにはエラーが表示され、「決済」と「注文支払い完了」のウェブフックは送信されません。
ウェブフックにおけるアイテム情報の構成
注文支払い完了と注文のキャンセルのウェブフックで送信されるアイテムデータは、items配列を通じて設定できます。
追加パラメータの包含の有効化
以下の情報を示す追加パラメータの包含を有効にします:
- アイテムが無料かどう(
is_free) - アイテムがボーナスかどうか(
is_bonus) - アイテムがバンドルの一部かどうか(
is_bundle_content)
これらのパラメータを受け取るには、ウェブフック設定に関する情報を更新するAPIコールを使用してウェブフックのバージョンを2に変更してください。バージョン1(デフォルト)では、これらのパラメータは提供されていません。
追加パラメータを含むアイテム配列の例:
- json
1"items": [
2 {
3 "sku": "com.xsolla.item_new_1",
4 "type": "bundle",
5 "is_pre_order": false,
6 "is_free": false,
7 "is_bonus": false,
8 "is_bundle_content": false,
9 "quantity": 1,
10 "amount": "1000",
11 "promotions": []
12 },
13 {
14 "sku": "com.xsolla.gold_1",
15 "type": "virtual_currency",
16 "is_pre_order": false,
17 "is_free": false,
18 "is_bonus": false,
19 "is_bundle_content": true,
20 "quantity": 1500,
21 "amount": "[null]",
22 "promotions": []
23 }
24 ]
バンドルコンテンツ包含の無効化
デフォルトでは、ウェブフックはバンドルのすべてのアイテムを個別のアイテムのリストとして含めます。ウェブフックのコンテンツをリスト化せずに、バンドルそのもののみを含めるように設定することができます。
この場合、バンドルに含まれるアイテムはitems配列には含まれません。上記の配列で示されているように、バンドルの一部であるSKUcom.xsolla.gold_1のアイテムは除外されます。
バンドルコンテンツが無効になっている場合のアイテム配列の例:
- json
1
2"items": [
3 {
4 "sku": "com.xsolla.item_new_1",
5 "type": "bundle",
6 "is_pre_order": false,
7 "is_free": false,
8 "is_bonus": false,
9 "is_bundle_content": false,
10 "quantity": 1,
11 "amount": "1000",
12 "promotions": []
13 }
14 ]
バンドルコンテンツ包含を無効にするには、カスタマーサクセスマネージャーまでお問い合わせるか、csm@xsolla.comに電子メールを送信してください。
誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。