ペイステーションとPlayFab認証の組み合わせ使用について

PlayFabを使用してアプリケーションにユーザー認証を実装済みの場合、PlayFab側で決済トークンを生成し、アプリケーションのクライアント側に渡して決済UIを開くことができます。

この統合オプションを使用すると、購入代金を支払うユーザーの国と通貨を決定するロジックを独自に実装する必要があります。

統合フロー:

  1. プロジェクトを作成します
  1. パブリッシャーアカウントに新規登録して、新しいプロジェクトを作成します。今後の手順で作成したプロジェクトのIDが必要です。

  1. カタログをセットアップします:
    • エクソーラ側のアイテムカタログを作成します。アイテムを手動で追加するか、Google PlayまたはPlayFabからインポートすることができます。
    • SDKを使用して、アプリケーションのクライアント側でカタログを取得して表示する機能を実装します。

  1. アイテム購入をセットアップします
    • アプリケーションのクライアント側で、PlayFabのクラウドスクリプトを使って、ユーザーとアイテムのデータを含む注文を作成します。
    • SDKを使用して、アプリケーションのクライアント側で決済UIを開くように実装します。

  1. 注文状況の追跡をセットアップします

注意

統合を完了し、実際の支払いを受け付けるようにするには、エクソーラとライセンス契約を結ぶ必要があります。

ライセンス契約はいつでも統合のどのステップでも署名できますが、審査プロセスには最大で3営業日かかる可能性があることを覚えておいてください。

プロジェクトを作成する

パブリッシャーアカウントの新規登録

パブリッシャーアカウントは、エクソーラの機能を構成し、アナリティクスや取引を処理するための主要なツールです。

登録時に指定された会社とアプリケーションに関するデータは、エクソーラとのライセンス契約のドラフトを作成し、あなたに適したソリューションを提案するために使用されます。データは後で変更することができますが、新規登録時に正しいデータを提供することで、ライセンス契約締結までのプロセスが迅速化されます。

新規登録するには、パブリッシャーアカウントにアクセスし、アカウントを作成してください。

お知らせ

パブリッシャーアカウントのパスワードはラテン文字、数字、特殊文字で構成でき、少なくとも以下を含む必要があります:

  • 8文字以上
  • 1桁
  • 大文字1つ
  • 小文字1つ

パスワードのセキュリティを確保するために、以下をことを推奨します:

  • 少なくとも90日に1回はパスワードを変更する
  • アカウントの過去4回のパスワードと一致しない新しいパスワードを使用する
  • 他の場所で使用されているパスワードと一致しない固有のパスワードを使用する
  • 簡単にアクセスできる場所にパスワードを保存しない
  • パスワードマネージャーを使用してパスワードを保存する

パブリッシャーアカウントでは2要素認証が使用され、認証を試行するたびに確認コードが送信されます。

パブリッシャーアカウントでのプロジェクト作成

複数のアプリケーションを所有している場合は、それぞれのアプリケーションに対して個別のプロジェクトを作成することをお勧めします。プロジェクト作成時に指定したデータに基づいて、エクソーラはあなたに適したソリューションを提案します。

新たしいプロジェクトを作成するには:

  1. パブリッシャーアカウントを開きます。
  2. サイドメニューで、プロジェクトの作成をクリックします。

  1. プロジェクト名を英語で入力してください(必須)。

お知らせ
プロジェクトを作成した後、プロジェクト設定セクションで言語やローカライズされたプロジェクト名を追加することができます。

  1. ゲームのリリースプラットフォームを1つまたは複数選択します(必須)。
  2. ゲームへのリンクを追加します。ゲームが独自のサイトを持っていない場合は、メインサイトまたはゲームがリストされているセクションへのリンクを提供してください(必須)。
  3. ゲームエンジンを選択します。
  4. 使用している、または使用する予定の収益化オプションを選択します。
  5. ゲームがすでにリリースされているかどうかを指定します。ゲームがまだリリースされていない場合は、予定公開日を指定します。
  6. プロジェクトを作成する」をクリックします。おすすめのエクソーラ製品のページが表示されます。

統合プロセスでは、パブリッシャーアカウントでプロジェクト名の横に表示されているプロジェクトIDを入力する必要があります。

カタログのセットアップ

パブリッシャーアカウントでのアイテム作成

注意

エクソーラ側でカタログを作成する必要があります。アイテムを手動で追加するか、Google PlayまたはPlayFabからインポートすることができます。Google Playからインポートする場合、一度に最大100個のアイテムをインポートできます。

これらの説明は、仮想アイテムの基本設定手順を提供します。後で、カタログに他のアイテム(仮想通貨、バンドル、ゲームキー)を追加したり、アイテムグループを作成したり、プロモーションキャンペーンや地域価格などを設定したりすることができます。

基本設定の仮想アイテムをカタログに追加するには:

  1. パブリッシャーアカウントでプロジェクトを開き、アイテムカタログ > 仮想アイテムセクションに移動します。
  2. ドロップダウンメニューで、アイテムを作成を選択します。

  1. 以下のフィールドでアイテムの基本設定を行います:
    • イメージ(任意)
    • SKU(アイテムの一意のID)
    • アイテム名
    • 説明(任意)

  1. アイテム価格を指定します:
    1. 実際通貨での価格」のトグルを「オン」に設定します。
    2. デフォルト通貨」フィールドで通貨を変更し(任意)、アイテム価格を指定します。
    3. デフォルト通貨」フィールドで通貨を変更した場合は、「実際通貨での価格」フィールドで同じ通貨を選択します。

お知らせ
カタログを取得するためのAPIコールが正しく機能するようにするには、デフォルト通貨と価格が指定されている通貨リストがすべてのアイテムで一致していることを確認してください。

  1. アイテムのステータスを「利用可能」に変更します。

  1. アイテムを作成」をクリックします。

アプリケーションのクライアント側にカタログの表示

  1. 最新のSDKバージョンをダウンロードする(推奨)またはGitHubで必要なSDKバージョンを選択してダウンロードします。
  2. パッケージを解凍します。
  3. メインメニューで、Assets > Import Package > Custom Packageに移動し、ダウンロードしたSDKを選択します。
  4. メインメニューで、Window > Xsolla > Edit Settingsに移動します。
  5. Inspectorパネルに移動します。Project IDフィールドで、プロジェクト名の横のパブリッシャーアカウントにあるプロジェクトIDを指定します。

  1. アプリケーションのクライアント側で、アイテムカタログを表示するUIを追加します。
  2. エクソーラサーバーからのアイテムカタログのリクエストを実装します。

お知らせ
仮想アイテムのリストを取得するには、GetCatalog SDKメソッドを使用します。また、その他のSDKメソッドを使用して、カタログアイテムに関する情報を取得することもできます。

アイテム購入のセットアップ

エクソーラ側でユーザーとアイテムのデータを使用して注文を作成するには、購入用の決済トークンを作成するAPIコールを使用するCloud Functionsをプロジェクトに追加します。このコールは決済UIを開き、購入を行うために必要な決済トークンを返します。

制限事項:

  • 支払いトークンをリクエストする際に、ユーザーの国かIPアドレスを渡す必要があります。
  • トークンに通貨を渡さなかった場合、通貨は国によって決定されます。
  • トークンに通貨を渡すと、ユーザーはこの通貨で支払います。

お知らせ

PlayFabプロジェクトが作成され、PlayFab SDKがすでにUnityプロジェクトに統合されている必要があります。

PlayFabクラウドスクリプトはHTTPトリガーを持つ関数を直接サポートしていないため、Azure関数を使用してウェブフックの受信を実装します。

Azure関数を使い始めるには、Azureアカウントを作成し、開発環境の準備を行います。本説明では、以下の設定の開発環境での手順を説明します:

プロジェクトにクラウドスクリプトの追加

  1. Visual Studio Codeを開きAzureタブに移動します。
  2. Workspaceセクションで、「+」アイコンをクリックしてCreate Functionを選択します。

  1. 新規プロジェクトのディレクトリを選択します。新しいプロジェクトを作成するためのメニューが表示され、設定を選択できます。

  1. 新しいプロジェクトの設定を指定します:
    1. 関数プロジェクトの言語を選択します — C#
    2. .NET ランタイムを選択します — .NET 8.0 Isolated (LTS)
    3. プロジェクトの最初の関数のテンプレートを選択します — HTTP trigger
    4. 関数名を入力します— GetXsollaPaymentToken
    5. 名前空間を入力します — My.Functions
    6. 認証レベルを選択します — Anonymous
    7. プロジェクトを開く方法を選択します — Open in current window

  1. その結果、Visual Studio CodeはC#プロジェクトを生成し、生成されたGetXsollaPaymentToken.csファイルを開きます。

  1. GetXsollaPaymentToken.csファイルを修正します:

Copy
Full screen
Small screen
 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}

  1. スクリプトの中で、定数の値を指定します:

    • PROJECT_ID — パブリッシャーアカウントのプロジェクト名の横にあるプロジェクトID。

クラウドスクリプトを追加した後、ローカルでGetXsollaPaymentToken関数のコールをテストすることができます。

クラウドスクリプトのデプロイ

  1. Visual Studio CodeでAzure > Resourcesセクションに移動し、「+」アイコンをクリックします。
  2. リソースとしてCreate Function App in Azureを選択します。新しいアプリケーションを作成するためのメニューが表示され、設定を選択できます。
  3. アプリケーションの設定を行います:

    1. 新しいファンクションアプリの名前を入力します — XsollaFunctions
    2. ランタイムスタックを選択します — .NET 8 Isolated
    3. 新しいリソースの場所を選択します(任意のオプションを選択できる)。

  1. リソースグループが作成されるまで待ちます。

  1. リソースのリストで、XsollaFunctionsを選択し、コンテキストメニューを呼び出し、Deply to Function Appを選択します。

クラウドスクリプトを追加した後、リモートでGetXsollaPaymentToken関数のコールをテストすることができます。

クラウドスクリプトのテスト

クラウドスクリプトを(ローカルまたはリモートで)テストするには、Postmanまたは他のツールを使ってGetXsollaPaymentToken関数を呼び出します。これを行うには:

  1. Visual Studio Codeで、Azure > Workspace > Local Project > Functionsセクションに移動してStart debugging to update this listをクリックします。
  2. 関数のコンテキストメニューを呼び出し、Copy Function Urlを選択します。ローカルでテストする場合、URLは次のようになります — http://localhost:7071/api/getXsollaPaymentToken。リモートテストの場合 — https://xsollafunctions.azurewebsites.net/api/GetXsollaPaymentToken

  1. コピーしたURLを使用して、指定されたパラメータで関数を呼び出します。Postmanから関数を呼び出すには:
    1. 新しいGETリクエストを作成します。
    2. ステップ2でコピーしたURLを入力します。
    3. Bodyタブに移動してリクエストパラメータを指定します。

リクエスト本文の例:

Copy
Full screen
Small screen
 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}
お知らせ
ユーザーID(uid)には任意の値を指定できます。アイテムのSKU(sku)には、以前にパブリッシャーアカウントで追加した仮想アイテムのSKUを指定します。

  1. Sendをクリックします。応答では、次のパラメータを含むJSONを受け取る必要があります:
    • token — 支払いトークン。決済UIを開くためには必須です。
    • order_id — 作成された注文のID。注文状況を追跡するためには必須です。

応答本文の例:

Copy
Full screen
Small screen
1{"token":"xsnpCF8tS4ox7quoibgTgPFVFxG9gTvS_lc_en_bg_2C2640_tb_6E7BF7","order_id":90288613}

PlayFabで決済トークンを取得するための登録関数

  1. PlayFabでプロジェクトを開きます。
  2. サイドメニューでAutomationをクリックします。
  3. Register New Cloud Script FunctionセクションでRegister Functionをクリックします。
  4. 関数名を入力します — GetXsollaPaymentToken
  5. Visual Code Studioにコピーした関数のURLを入力します(クラウドスクリプトのテストのステップ1-2を参照)。

Unityプロジェクトで注文を作成し、決済UIを開く

  1. Unityプロジェクトを開きます。
  2. 以下のコンテンツでXsollaPlayfabSample.csスクリプトを作成します:

Copy
Full screen
Small screen
 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}

  1. 新しいシーンを作成します。
  2. 空のゲームオブジェクトを作成します。これを行うには、メインメニューに移動してGameObject > Create Emptyを選択します。

  1. ゲームオブジェクトにスクリプトを追加します:
    1. Hierarchyパネルで、オブジェクトを選択します。
    2. Inspectorパネルで、Add Componentをクリックし、XsollaPlayfabSampleスクリプトを選択します。

  1. Hierarchyパネルで、コンテキストメニューを呼び出し、UI > EventSystemを選択します。

注文作成をテストするには、Playをクリックしてシーンを実行してください。その結果、注文情報を含む決済UIが表示されます。

UnityプロジェクトのソースコードはGitHubで公開されています。

注文状況追跡のセットアップ

注文状況の追跡は、支払いが成功したことを確認し、ユーザーにアイテムを付与するために必要です。

クライアント側で注文状況の取得

注文追跡ロジックはGetXsollaPaymentTokenメソッドに含まれています。成功した購入を処理するには、注文ステータスがdoneに変わったときに呼び出される関数を渡す必要があります。

AddOrderForTrackingSDKメソッドは追跡に使用されます。このメソッドがどのように動作するかの詳細については、注文状況の追跡を参照してください。

サーバー側で注文状況の取得

注意

SDKはアプリケーションのクライアント側で注文状況を追跡することを可能にします。ただし、完了した購入の追加の検証を実装するために、アプリケーションのバックエンドで支払いウェブフックハンドラを設定することをお勧めします。これにより、注文情報を受け取ることができます

ウェブフックの完全なリストと、ウェブフックの操作に関する一般情報については、ウェブフックに関するドキュメントを参照してください。

エクソーラ側でウェブフックを構成するには:

  1. パブリッシャーアカウントでプロジェクトを開き、プロジェクト設定 >ウェブフックセクションに移動します。
  2. ウェブフックサーバー」フィールドに、エクソーラがウェブフックを送信するURLを入力します。

お知らせ

ウェブフックをテストするには、webhook.siteなどの専門サイトや、ngrokなどのプラットフォームを選択することもできます。

テスト用に、ウェブフック処理の成功をシミュレートするクラウドスクリプトを追加することもできます。スクリプトのコードはGitHubにあります。

実際のプロジェクトでは、購入検証ロジックを追加する必要があります。

  1. 秘密鍵」フィールドの値をコピーして保存します。このキーはデフォルトで生成され、ウェブフックの署名に使用されます。変更したい場合は、更新アイコンをクリックします。
  2. ウェブフックを有効にする」をクリックします。

この記事は役に立ちましたか?
ありがとうございます!
改善できることはありますか? メッセージ
申し訳ありません
この記事が参考にならなかった理由を説明してください。 メッセージ
ご意見ありがとうございました!
あなたのメッセージを確認し、体験を向上させるために利用させていただきます。
最終更新日: 2025年8月29日

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

問題を報告する
当社は常にコンテンツを見直しています。お客様のご意見は改善に役立ちます。
フォローアップ用のメールをご提供してください
ご意見ありがとうございました!
フィードバックを送信できませんでした
後でもう一度お試しいただくか、doc_feedback@xsolla.comまでお問い合わせください。