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 표준에 따라 인코딩된 판매자 ID:API 키 쌍. 회사 설정 > 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를 추가하지 않고 자체적으로 하실 수 있습니다.
이 기사가 도움이 되었나요?
의견을 보내 주셔서 감사드립니다!
메시지를 검토한 후 사용자 경험 향상에 사용하겠습니다.이 페이지 평가
이 페이지 평가
답하기 원하지 않습니다
의견을 보내 주셔서 감사드립니다!
유용한 링크
마지막 업데이트: 2021년 10월 18일오자 또는 기타 텍스트 오류를 찾으셨나요? 텍스트를 선택하고 컨트롤+엔터를 누릅니다.