BaaS認証によるゲーム内ストアを利用する
ゲーム内ストアとBaaSオーソリゼーションシステムを併用することで、ゲーム内アイテムを販売することができます。この場合、相互作用は次のようになります:
- ユーザーはBaaSの認証システムを介してあなたのアプリケーションにログインします。
- BaaSサービスは、エクソラサーバーにユーザーIDを渡して、決済ステーションアクセストークンを要求します。
- エクソラのサーバーは、決済ステーションアクセストークンをBaaSサービスに返します。
- BaaSサービスは、決済ステーションアクセストークンをアプリケーションに渡します。
- アプリケーションは、決済ステーションアクセストークンを使用して、APIを使用してエクソラサーバーと相互作用します。
決済ステーションアクセストークンを取得するには、FirebaseとPlayFabの指示に従って、既製の機能をプロジェクトに追加します。
Firebaseプロジェクトにクラウド機能を追加する
- Firebaseプロジェクトを初期化します。
- 決済ステーションアクセストークンの受信機能の取り込みと設定を行います。そこで:
<MerchantID>
— マーチャントIDはプロジェクト設定> ウェブフックセクションでのパブリッシャーアカウントで見つかります。<ProjectID>
— プロジェクトIDはプロジェクト設定> プロジェクトIDセクションでのパブリッシャーアカウントで見つかります。<ApiKey>
— APIキーは会社設定 > API キーセクションでのパブリッシャーアカウントで見つかります。
決済ステーションアクセストークンを受け取るための機能ード:
Copy
- js
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();
});
});
- この例のように、機能を実際の使用環境に展開します。
- アプリケーションから機能を呼び出すため、クライアントサイドロジックを追加します。機能名には
getXsollaAccessToken
を指定します。パラメータを渡す必要はありません。 - アプリケーションでは、APIを操作するためのメソッドを自分で実装するか、エクソラSDKを使用します。
PlayFabプロジェクトにクラウドスクリプトを追加する
- 決済ステーションアクセストークンを受信するための機能コードを使用してJSファイルを作成します。そこで:
<MerchantID>
— マーチャントIDはプロジェクト設定> ウェブフックセクションでのパブリッシャーアカウントで見つかります。<ProjectID>
— プロジェクトIDはプロジェクト設定> プロジェクトIDセクションでのパブリッシャーアカウントで見つかります。<your_authorization_basic_key>
— Base64標準に従ってエンコードされたMerchant ID:API keyペア。APIキーは会社設定 > API キーセクションでのパブリッシャーアカウントで見つかります。
Note
既にプロジェクトでクラウドスクリプトを使用している場合は、決済ステーションアクセストークンを受け取るための機能をコードの最後に追加してください。
決済ステーションのアクセストークンを受け取るためのファンクションコード:
Copy
- js
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
}
}
}
- PlayFabプロジェクト設定に移動します。
- クラウドスクリプトファイルをアップロードします。
- 使用環境でクラウドスクリプトを実行します。
- アプリケーションから機能を呼び出すため、クライアントサイドロジックを追加します。機能名には
GetXsollaAccessToken
を指定します。パラメータを渡す必要はありません。
決済ステーションアクセストークンの受信機能を呼び出す例:
Copy
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をプロジェクトに追加しなくても、リクエストとレスポンスの処理を自分で実装することができます。
- アプリケーションで、APIを自分で操作するためのメソッドを実装するか、Xsolla SDKを使用します。
この記事は役に立ちましたか?
ご意見ありがとうございました!
あなたのメッセージを確認し、体験を向上させるために利用させていただきます。このページを評価する
このページを評価する
答えたくない
ご意見ありがとうございました!
お役立ちリンク
最終更新日: 2021年10月18日誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。