ペイステーションとPlayFab認証の組み合わせ使用について
PlayFabを使用してアプリケーションにユーザー認証を実装済みの場合、PlayFab側で決済トークンを生成し、アプリケーションのクライアント側に渡して決済UIを開くことができます。
この統合オプションを使用すると、購入代金を支払うユーザーの国と通貨を決定するロジックを独自に実装する必要があります。
統合フロー:
- パブリッシャーアカウントに新規登録して、新しいプロジェクトを作成します。今後の手順で作成したプロジェクトのIDが必要です。
- カタログをセットアップします:
- エクソーラ側のアイテムカタログを作成します。アイテムを手動で追加するか、Google PlayまたはPlayFabからインポートすることができます。
- SDKを使用して、アプリケーションのクライアント側でカタログを取得して表示する機能を実装します。
- アイテム購入をセットアップします:
- アプリケーションのクライアント側で、PlayFabのクラウドスクリプトを使って、ユーザーとアイテムのデータを含む注文を作成します。
- SDKを使用して、アプリケーションのクライアント側で決済UIを開くように実装します。
統合を完了し、実際の支払いを受け付けるようにするには、エクソーラとライセンス契約を結ぶ必要があります。
ライセンス契約はいつでも統合のどのステップでも署名できますが、審査プロセスには最大で3営業日かかる可能性があることを覚えておいてください。
プロジェクトを作成する
パブリッシャーアカウントの新規登録
パブリッシャーアカウントは、エクソーラの機能を構成し、アナリティクスや取引を処理するための主要なツールです。
登録時に指定された会社とアプリケーションに関するデータは、エクソーラとのライセンス契約のドラフトを作成し、あなたに適したソリューションを提案するために使用されます。データは後で変更することができますが、新規登録時に正しいデータを提供することで、ライセンス契約締結までのプロセスが迅速化されます。
新規登録するには、パブリッシャーアカウントにアクセスし、アカウントを作成してください。
パブリッシャーアカウントのパスワードはラテン文字、数字、特殊文字で構成でき、少なくとも以下を含む必要があります:
- 8文字以上
- 1桁
- 大文字1つ
- 小文字1つ
パスワードのセキュリティを確保するために、以下をことを推奨します:
- 少なくとも90日に1回はパスワードを変更する
- アカウントの過去4回のパスワードと一致しない新しいパスワードを使用する
- 他の場所で使用されているパスワードと一致しない固有のパスワードを使用する
- 簡単にアクセスできる場所にパスワードを保存しない
- パスワードマネージャーを使用してパスワードを保存する
パブリッシャーアカウントでは2要素認証が使用され、認証を試行するたびに確認コードが送信されます。
パブリッシャーアカウントでのプロジェクト作成
複数のアプリケーションを所有している場合は、それぞれのアプリケーションに対して個別のプロジェクトを作成することをお勧めします。プロジェクト作成時に指定したデータに基づいて、エクソーラはあなたに適したソリューションを提案します。
新たしいプロジェクトを作成するには:
- パブリッシャーアカウントを開きます。
- サイドメニューで、プロジェクトの作成をクリックします。

- プロジェクト名を英語で入力してください(必須)。
- ゲームのリリースプラットフォームを1つまたは複数選択します(必須)。
- ゲームへのリンクを追加します。ゲームが独自のサイトを持っていない場合は、メインサイトまたはゲームがリストされているセクションへのリンクを提供してください(必須)。
- ゲームエンジンを選択します。
- 使用している、または使用する予定の収益化オプションを選択します。
- ゲームがすでにリリースされているかどうかを指定します。ゲームがまだリリースされていない場合は、予定公開日を指定します。
- 「プロジェクトを作成する」をクリックします。おすすめのエクソーラ製品のページが表示されます。
統合プロセスでは、パブリッシャーアカウントでプロジェクト名の横に表示されているプロジェクトIDを入力する必要があります。

カタログのセットアップ
パブリッシャーアカウントでのアイテム作成
エクソーラ側でカタログを作成する必要があります。アイテムを手動で追加するか、Google PlayまたはPlayFabからインポートすることができます。Google Playからインポートする場合、一度に最大100個のアイテムをインポートできます。
これらの説明は、仮想アイテムの基本設定手順を提供します。後で、カタログに他のアイテム(仮想通貨、バンドル、ゲームキー)を追加したり、アイテムグループを作成したり、プロモーションキャンペーンや地域価格などを設定したりすることができます。
基本設定の仮想アイテムをカタログに追加するには:
- パブリッシャーアカウントでプロジェクトを開き、アイテムカタログ > 仮想アイテムセクションに移動します。
- ドロップダウンメニューで、アイテムを作成を選択します。
- 以下のフィールドでアイテムの基本設定を行います:
- イメージ(任意)
- SKU(アイテムの一意のID)
- アイテム名
- 説明(任意)
- アイテム価格を指定します:
- 「実際通貨での価格」のトグルを「オン」に設定します。
- 「デフォルト通貨」フィールドで通貨を変更し(任意)、アイテム価格を指定します。
- 「デフォルト通貨」フィールドで通貨を変更した場合は、「実際通貨での価格」フィールドで同じ通貨を選択します。
- アイテムのステータスを「利用可能」に変更します。
- 「アイテムを作成」をクリックします。
アプリケーションのクライアント側にカタログの表示
- 最新のSDKバージョンをダウンロードする(推奨)またはGitHubで必要なSDKバージョンを選択してダウンロードします。
- パッケージを解凍します。
- メインメニューで、
Assets > Import Package > Custom Package に移動し、ダウンロードしたSDKを選択します。 - メインメニューで、
Window > Xsolla > Edit Settings に移動します。 Inspector パネルに移動します。Project ID フィールドで、プロジェクト名の横のパブリッシャーアカウントにあるプロジェクトIDを指定します。

- アプリケーションのクライアント側で、アイテムカタログを表示するUIを追加します。
- エクソーラサーバーからのアイテムカタログのリクエストを実装します。
GetCatalog
SDKメソッドを使用します。また、その他のSDKメソッドを使用して、カタログアイテムに関する情報を取得することもできます。アイテム購入のセットアップ
エクソーラ側でユーザーとアイテムのデータを使用して注文を作成するには、購入用の決済トークンを作成するAPIコールを使用するCloud Functionsをプロジェクトに追加します。このコールは決済UIを開き、購入を行うために必要な決済トークンを返します。
制限事項:
- 支払いトークンをリクエストする際に、ユーザーの国かIPアドレスを渡す必要があります。
- トークンに通貨を渡さなかった場合、通貨は国によって決定されます。
- トークンに通貨を渡すと、ユーザーはこの通貨で支払います。
PlayFabプロジェクトが作成され、PlayFab SDKがすでにUnityプロジェクトに統合されている必要があります。
PlayFabクラウドスクリプトはHTTPトリガーを持つ関数を直接サポートしていないため、Azure関数を使用してウェブフックの受信を実装します。
Azure関数を使い始めるには、Azureアカウントを作成し、開発環境の準備を行います。本説明では、以下の設定の開発環境での手順を説明します:
- Visual Studio Codeがインストールされました。
- .NET 8.0 SDKがインストールされました。
- C#の作業するための拡張機能がインストールされています。
- Azureの作業するための拡張機能の関数がインストールされました。
プロジェクトにクラウドスクリプトの追加
- Visual Studio Codeを開き
Azure タブに移動します。 Workspace セクションで、「+」アイコンをクリックしてCreate Function を選択します。
- 新規プロジェクトのディレクトリを選択します。新しいプロジェクトを作成するためのメニューが表示され、設定を選択できます。
- 新しいプロジェクトの設定を指定します:
- 関数プロジェクトの言語を選択します —
C# 。 - .NET ランタイムを選択します —
.NET 8.0 Isolated (LTS) 。 - プロジェクトの最初の関数のテンプレートを選択します —
HTTP trigger 。 - 関数名を入力します—
GetXsollaPaymentToken
。 - 名前空間を入力します —
My.Functions
。 - 認証レベルを選択します —
Anonymous 。 - プロジェクトを開く方法を選択します —
Open in current window 。
- 関数プロジェクトの言語を選択します —
- その結果、Visual Studio CodeはC#プロジェクトを生成し、生成された
GetXsollaPaymentToken.cs
ファイルを開きます。
GetXsollaPaymentToken.cs
ファイルを修正します:
- C#
1using System.Text;
2using System.Net.Http.Headers;
3using Microsoft.AspNetCore.Http;
4using Microsoft.AspNetCore.Mvc;
5using Microsoft.Azure.Functions.Worker;
6using Microsoft.Extensions.Logging;
7using Newtonsoft.Json;
8
9namespace My.Function
10{
11 public class GetXsollaPaymentToken
12 {
13 private readonly ILogger<GetXsollaPaymentToken> _logger;
14
15 private const int PROJECT_ID = ""; // Your Xsolla project ID
16 private const string API_KEY = ""; // Your Xsolla API key
17
18 public GetXsollaPaymentToken(ILogger<GetXsollaPaymentToken> logger)
19 {
20 _logger = logger;
21 }
22
23 [Function("GetXsollaPaymentToken")]
24 public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
25 {
26 _logger.LogInformation("GetXsollaPaymentToken function processed a request.");
27
28 // Reading the request body
29 string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
30 _logger.LogInformation("Request body: " + requestBody);
31
32 // Deserializing request body JSON
33 dynamic data = JsonConvert.DeserializeObject(requestBody);
34
35 // Extracting necessary data from JSON
36 string uid = data.FunctionArgument.uid;
37 string sku = data.FunctionArgument.sku;
38 string returnUrl = data.FunctionArgument.returnUrl;
39
40 // Creating payload for Xsolla API
41 var payload = new
42 {
43 user = new
44 {
45 id = new { value = uid },
46 country = new { value = "US", allow_modify = false }
47 },
48 purchase = new
49 {
50 items = new[]
51 {
52 new { sku = sku, quantity = 1 }
53 }
54 },
55 sandbox = true,
56 settings = new
57 {
58 language = "en",
59 currency = "USD",
60 return_url = returnUrl,
61 ui = new { theme = "63295aab2e47fab76f7708e3" }
62 }
63 };
64
65 // Constructing Xsolla API URL
66 string url = $"https://store.xsolla.com/api/v3/project/{PROJECT_ID}/admin/payment/token";
67
68 // Sending request to Xsolla API
69 using (HttpClient client = new HttpClient())
70 {
71 // Adding authorization header
72 string headerValue = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{PROJECT_ID}:{API_KEY}"));
73 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", headerValue);
74
75 // Serializing payload to JSON
76 var jsonPayload = JsonConvert.SerializeObject(payload);
77 var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
78
79 // Making POST request to Xsolla API
80 var xsollaRes = await client.PostAsync(url, content);
81
82 // Checking response from Xsolla API
83 if (xsollaRes.IsSuccessStatusCode)
84 {
85 // Reading successful response content
86 string responseContent = await xsollaRes.Content.ReadAsStringAsync();
87 return new OkObjectResult(responseContent);
88 }
89 else
90 {
91 // Returning status code in case of failure
92 return new StatusCodeResult((int)xsollaRes.StatusCode);
93 }
94 }
95 }
96 }
97}
- スクリプトの中で、定数の値を指定します:
PROJECT_ID
— パブリッシャーアカウントのプロジェクト名の横にあるプロジェクトID。

API_KEY
― APIキー。作成時に一度だけパブリッシャーアカウントに表示され、ユーザー側に保存する必要があります。次のセクションで新しいキーを作成できます:
クラウドスクリプトを追加した後、ローカルでGetXsollaPaymentToken
関数のコールをテストすることができます。
クラウドスクリプトのデプロイ
- Visual Studio Codeで
Azure > Resources セクションに移動し、「+」アイコンをクリックします。 - リソースとして
Create Function App in Azure を選択します。新しいアプリケーションを作成するためのメニューが表示され、設定を選択できます。 - アプリケーションの設定を行います:
- 新しいファンクションアプリの名前を入力します —
XsollaFunctions
。 - ランタイムスタックを選択します —
.NET 8 Isolated 。 - 新しいリソースの場所を選択します(任意のオプションを選択できる)。
- 新しいファンクションアプリの名前を入力します —
- リソースグループが作成されるまで待ちます。
- リソースのリストで、
XsollaFunctions
を選択し、コンテキストメニューを呼び出し、Deply to Function App を選択します。
クラウドスクリプトを追加した後、リモートでGetXsollaPaymentToken
関数のコールをテストすることができます。
クラウドスクリプトのテスト
クラウドスクリプトを(ローカルまたはリモートで)テストするには、Postmanまたは他のツールを使ってGetXsollaPaymentToken
関数を呼び出します。これを行うには:
- Visual Studio Codeで、
Azure > Workspace > Local Project > Functions セクションに移動してStart debugging to update this list をクリックします。 関数のコンテキストメニューを呼び出し、
Copy Function Url を選択します。ローカルでテストする場合、URLは次のようになります —http://localhost:7071/api/getXsollaPaymentToken
。リモートテストの場合 —https://xsollafunctions.azurewebsites.net/api/GetXsollaPaymentToken
。
- コピーしたURLを使用して、指定されたパラメータで関数を呼び出します。Postmanから関数を呼び出すには:
- 新しい
GET
リクエストを作成します。 - ステップ2でコピーしたURLを入力します。
Body タブに移動してリクエストパラメータを指定します。
- 新しい
リクエスト本文の例:
- json
1{
2
3 "FunctionArgument": {
4
5 "uid": "1D384D9EF12EAB8B",
6
7 "sku": "booster_max_1",
8
9 "returnUrl": "https://login.xsolla.com/api/blank"
10
11 }
12
13}
Send をクリックします。応答では、次のパラメータを含むJSONを受け取る必要があります:token
— 支払いトークン。決済UIを開くためには必須です。order_id
— 作成された注文のID。注文状況を追跡するためには必須です。
応答本文の例:
- json
1{"token":"xsnpCF8tS4ox7quoibgTgPFVFxG9gTvS_lc_en_bg_2C2640_tb_6E7BF7","order_id":90288613}
PlayFabで決済トークンを取得するための登録関数
- PlayFabでプロジェクトを開きます。
- サイドメニューで
Automation をクリックします。 Register New Cloud Script Function セクションでRegister Function をクリックします。- 関数名を入力します —
GetXsollaPaymentToken
。 - Visual Code Studioにコピーした関数のURLを入力します(クラウドスクリプトのテストのステップ1-2を参照)。
Unityプロジェクトで注文を作成し、決済UIを開く
- Unityプロジェクトを開きます。
- 以下のコンテンツで
XsollaPlayfabSample.cs
スクリプトを作成します:
- C#
1using System;
2using PlayFab;
3using PlayFab.ClientModels;
4using PlayFab.CloudScriptModels;
5using UnityEngine;
6using Xsolla.Core;
7
8public class XsollaPlayfabSample : MonoBehaviour
9{
10 private void Start()
11 {
12 // Logging in anonymously
13 LoginAnonymous(
14 // Callback function invoked after successful login
15 userId => {
16 // Requesting Xsolla payment token
17 GetXsollaPaymentToken(
18 userId, // PlayFab user ID received after login
19 "booster_max_1", // SKU of the product
20 orderData => {
21 // Creating Xsolla token and opening purchase UI
22 XsollaToken.Create(orderData.token);
23 XsollaWebBrowser.OpenPurchaseUI(orderData.token);
24
25 // Adding order for tracking
26 OrderTrackingService.AddOrderForTracking(
27 orderData.order_id,
28 true,
29 () => Debug.Log("Payment completed"),
30 onError => Debug.LogError(onError.errorMessage));
31 });
32 });
33 }
34
35 private static void LoginAnonymous(Action<string> onSuccess)
36 {
37 // Logging in with custom ID
38 PlayFabClientAPI.LoginWithCustomID(
39 new LoginWithCustomIDRequest {
40 CustomId = SystemInfo.deviceUniqueIdentifier, // Unique ID generated based on the device
41 CreateAccount = true
42 },
43 result => {
44 // Logging the result
45 Debug.Log("Logged with playfab id: " + result.PlayFabId);
46
47 // Invoking onSuccess callback with PlayFab ID
48 onSuccess?.Invoke(result.PlayFabId);
49 },
50 error => { Debug.LogError(error.GenerateErrorReport()); }); // Handling login error
51 }
52
53 private static void GetXsollaPaymentToken(string userId, string sku, Action<OrderData> onSuccess)
54 {
55 // Creating request data for Xsolla payment token
56 var tokenRequestData = new PaymentTokenRequestData {
57 uid = userId, // User ID
58 sku = sku, // Product SKU
59 returnUrl = $"app://xpayment.{Application.identifier}" // Return URL
60 };
61
62 // Executing a function in the PlayFab cloud to get payment token
63 PlayFabCloudScriptAPI.ExecuteFunction(
64 new ExecuteFunctionRequest {
65 FunctionName = "GetXsollaPaymentToken", // Name of Azure function
66 FunctionParameter = tokenRequestData, // Data passed to the function
67 GeneratePlayStreamEvent = false // Setting true if call should show up in PlayStream
68 },
69 result => {
70 // Logging the result
71 Debug.Log($"GetXsollaPaymentToken result: {result.FunctionResult}");
72
73 // Parsing JSON result to OrderData object
74 OrderData orderData = JsonUtility.FromJson<OrderData>(result.FunctionResult.ToString());
75
76 // Invoking onSuccess callback with order data
77 onSuccess?.Invoke(orderData);
78 },
79 error => Debug.LogError($"Error: {error.GenerateErrorReport()}")); // Handling error
80 }
81
82 // Class for payment token request data
83 public class PaymentTokenRequestData
84 {
85 public string uid; // User ID
86 public string sku; // Product SKU
87 public string returnUrl; // Return URL
88 }
89}
- 新しいシーンを作成します。
- 空のゲームオブジェクトを作成します。これを行うには、メインメニューに移動して
GameObject > Create Empty を選択します。
- ゲームオブジェクトにスクリプトを追加します:
Hierarchy パネルで、オブジェクトを選択します。Inspector パネルで、Add Component をクリックし、XsollaPlayfabSample
スクリプトを選択します。
Hierarchy パネルで、コンテキストメニューを呼び出し、UI > EventSystem を選択します。
注文作成をテストするには、
UnityプロジェクトのソースコードはGitHubで公開されています。
注文状況追跡のセットアップ
注文状況の追跡は、支払いが成功したことを確認し、ユーザーにアイテムを付与するために必要です。
クライアント側で注文状況の取得
注文追跡ロジックはGetXsollaPaymentToken
メソッドに含まれています。成功した購入を処理するには、注文ステータスがdone
に変わったときに呼び出される関数を渡す必要があります。
AddOrderForTracking
SDKメソッドは追跡に使用されます。このメソッドがどのように動作するかの詳細については、注文状況の追跡を参照してください。
サーバー側で注文状況の取得
SDKはアプリケーションのクライアント側で注文状況を追跡することを可能にします。ただし、完了した購入の追加の検証を実装するために、アプリケーションのバックエンドで支払いウェブフックハンドラを設定することをお勧めします。これにより、注文情報を受け取ることができます
ウェブフックの完全なリストと、ウェブフックの操作に関する一般情報については、ウェブフックに関するドキュメントを参照してください。
エクソーラ側でウェブフックを構成するには:
- パブリッシャーアカウントでプロジェクトを開き、プロジェクト設定 >ウェブフックセクションに移動します。
- 「ウェブフックサーバー」フィールドに、エクソーラがウェブフックを送信するURLを入力します。
ウェブフックをテストするには、webhook.siteなどの専門サイトや、ngrokなどのプラットフォームを選択することもできます。
テスト用に、ウェブフック処理の成功をシミュレートするクラウドスクリプトを追加することもできます。スクリプトのコードはGitHubにあります。
実際のプロジェクトでは、購入検証ロジックを追加する必要があります。
- 「秘密鍵」フィールドの値をコピーして保存します。このキーはデフォルトで生成され、ウェブフックの署名に使用されます。変更したい場合は、更新アイコンをクリックします。
- 「ウェブフックを有効にする」をクリックします。

誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。