BaaS認証によるゲーム内ストアを利用する

ゲーム内ストアとBaaSオーソリゼーションシステムを併用することで、ゲーム内アイテムを販売することができます。この場合、相互作用は次のようになります:

  1. ユーザーはBaaSの認証システムを介してあなたのアプリケーションにログインします。
  2. BaaSサービスは、エクソラサーバーにユーザーIDを渡して、決済ステーションアクセストークンを要求します。
  3. エクソラのサーバーは、決済ステーションアクセストークンをBaaSサービスに返します。
  4. BaaSサービスは、決済ステーションアクセストークンをアプリケーションに渡します。
  5. アプリケーションは、決済ステーションアクセストークンを使用して、APIを使用してエクソラサーバーと相互作用します。

決済ステーションアクセストークンを取得するには、FirebasePlayFabの指示に従って、既製の機能をプロジェクトに追加します。

Firebaseプロジェクトにクラウド機能を追加する

  1. Firebaseプロジェクトを初期化します
  2. 決済ステーションアクセストークンの受信機能の取り込みと設定を行います。そこで:
    • <MerchantID>マーチャントIDプロジェクト設定> ウェブフックセクションでのパブリッシャーアカウントで見つかります。
    • <ProjectID>プロジェクトIDプロジェクト設定> プロジェクトIDセクションでのパブリッシャーアカウントで見つかります。
    • <ApiKey>APIキー会社設定 > API キーセクションでのパブリッシャーアカウントで見つかります。

決済ステーションアクセストークンを受け取るための機能ード:

Copy
Full screen
Small screen
const merchantId = "<MerchantID>";
const projectId = "<ProjectID>";
const apiKey = "<ApiKey>";

exports.getXsollaAccessToken = functions.https.onCall((data, context) => {
  if (!context.auth) {
    throw new functions.https.HttpsError(
        "failed-precondition",
        "The function must be called while authenticated."
    );
  }

  const userId = context.auth.uid;
  const userEmail = context.auth.token.email || null;

  const authHeader = Buffer.from(`${merchantId}:${apiKey}`).toString("base64");

  const postData = JSON.stringify(
      {
        "user": {
          "id": {
            "value": userId,
          },
          "email": {
            "value": userEmail,
          },
        },
        "settings": {
          "project_id": Number(projectId),
        },
      }
  );

  const options = {
    hostname: "api.xsolla.com",
    port: 443,
    path: `/merchant/v2/merchants/${merchantId}/token`,
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Content-Length": postData.length,
      "Authorization": `Basic ${authHeader}`,
    },
  };

  return new Promise( (resolve, reject) => {
    const req = https.request(options, (res) => {
      if (res.statusCode != 200) {
        reject(
            new functions.https.HttpsError("internal", "Token not received")
        );
      }
      let body = [];
      res.on("data", (d) => {
        body.push(d);
      });
      res.on("end", () => {
        try {
          body = JSON.parse(Buffer.concat(body).toString());
        } catch (e) {
          reject(
              new functions.https.HttpsError("internal", "Malformed response")
          );
        }
        resolve({
          "token": body.token,
        });
      });
    });
    req.on("error", (e) => {
      reject(new functions.https.HttpsError("internal", "Internal error"));
    });

    req.write(postData);
    req.end();
  });
});

  1. この例のように、機能を実際の使用環境に展開します。
  2. アプリケーションから機能を呼び出すため、クライアントサイドロジックを追加します。機能名にはgetXsollaAccessTokenを指定します。パラメータを渡す必要はありません。
  3. アプリケーションでは、APIを操作するためのメソッドを自分で実装するか、エクソラSDKを使用します。

PlayFabプロジェクトにクラウドスクリプトを追加する

  1. 決済ステーションアクセストークンを受信するための機能コードを使用してJSファイルを作成します。そこで:
    • <MerchantID>マーチャントIDプロジェクト設定> ウェブフックセクションでのパブリッシャーアカウントで見つかります。
    • <ProjectID>プロジェクトIDプロジェクト設定> プロジェクトIDセクションでのパブリッシャーアカウントで見つかります。
    • <your_authorization_basic_key> — Base64標準に従ってエンコードされたMerchant ID:API keyペア。APIキー会社設定 > API キーセクションでのパブリッシャーアカウントで見つかります。

Note
既にプロジェクトでクラウドスクリプトを使用している場合は、決済ステーションアクセストークンを受け取るための機能をコードの最後に追加してください。

決済ステーションのアクセストークンを受け取るためのファンクションコード:

Copy
Full screen
Small screen
handlers.GetXsollaAccessToken = function (args) {

    // TODO replace with production credentials
    const merchantId = <MerchantID>; // Merchant ID from the Publisher Account
    const projectId = <ProjectID>; // Project ID from the Publisher Account
    const authHeader = '<your_authorization_basic_key>' // Base64(merchant_id:api_key)

    const headers = {
        "Authorization": `Basic ${authHeader}`
    };

    const body = {
        user: {
            id: {
                value: currentPlayerId
            },
            playfab_id: {
                value: currentPlayerId
            }
        },
        settings: {
            project_id: projectId
        }
    };

    const url = `https://api.xsolla.com/merchant/v2/merchants/${merchantId}/token`;
    const httpMethod = "post";
    const content = JSON.stringify(body);
    const contentType = "application/json";

    const response = JSON.parse(http.request(url, httpMethod, content, contentType, headers));

    if ('token' in response) {
        return {
            "token" : response.token
        }
    } else {
        return {
            "error_message" : response.message
        }
    }
}

  1. PlayFabプロジェクト設定に移動します。
  2. クラウドスクリプトファイルをアップロードします。
  3. 使用環境でクラウドスクリプトを実行します。
  4. アプリケーションから機能を呼び出すため、クライアントサイドロジックを追加します。機能名にはGetXsollaAccessTokenを指定します。パラメータを渡す必要はありません。

決済ステーションアクセストークンの受信機能を呼び出す例:

Copy
Full screen
Small screen
kotlin
  • kotlin
  • C#
  • C++
val tokenRequest = PlayFabClientModels.ExecuteCloudScriptRequest()
tokenRequest.FunctionName = "GetXsollaAccessToken"
val res = PlayFabClientAPI.ExecuteCloudScript(tokenRequest)
val result = res.Result.FunctionResult as Map<*, *>
val token = result["token"]
val errorMessage = result["error_message"]
var tokenRequest = new ExecuteCloudScriptRequest{
  FunctionName = "GetXsollaAccessToken"
};

PlayFabClientAPI.ExecuteCloudScript(
  tokenRequest,
  scriptResult =>
  {
     var functionResult = scriptResult.FunctionResult as Dictionary<string, string>;
     var token = functionResult["token"];
  },
  playfabError => { Debug.LogError($"GetXsollaAccessToken error: {playfabError.ErrorMessage}"); });
void UMyClass::GetXsollaToken()
{
    FClientExecuteCloudScriptRequest tokenRequest;
    tokenRequest.FunctionName = TEXT("GetXsollaAccessToken");

    UPlayFabClientAPI::FDelegateOnSuccessExecuteCloudScript onSuccess;
    onSuccess.BindUFunction(this, "OnTokenRecieved");

    UPlayFabClientAPI::FDelegateOnFailurePlayFabError onFailure;
    onSuccess.BindUFunction(this, "OnError");

    UPlayFabClientAPI::ExecuteCloudScript(tokenRequest, onSuccess, onFailure, nullptr);
}

void UMyClass::OnTokenRecieved(FClientExecuteCloudScriptResult result, UObject* customData)
{
    const FString& token = result.FunctionResult->GetStringField(TEXT("token"));

    // do something with a token
}

void UMyClass::OnError(FPlayFabError error, UObject* customData)
{
    // handle errors
}

Note
この例では、PlayFab SDKのメソッドを使用してクラウドスクリプトへのリクエストを行います。PlayFab SDKをプロジェクトに追加しなくても、リクエストとレスポンスの処理を自分で実装することができます。

  1. アプリケーションで、APIを自分で操作するためのメソッドを実装するか、Xsolla SDKを使用します。

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

答えたくない

ご意見ありがとうございました!

お役立ちリンク

最終更新日: 2021年10月18日

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

問題を報告する
当社は常にコンテンツを見直しています。お客様のご意見は改善に役立ちます。
フォローアップ用のメールをご提供してください
ご意見ありがとうございました!