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 표준에 따라 인코딩된 판매자 ID:API 키 쌍. 회사 설정 > 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를 이용해 자체적으로 작업하거나 엑솔라 SDK를 이용해 작업할 메서드를 구현합니다.

이 기사가 도움이 되었나요?
감사합니다!
개선해야 할 점이 있을까요? 메시지
유감입니다
이 기사가 도움이 안 된 이유를 설명해 주세요. 메시지
의견을 보내 주셔서 감사드립니다!
메시지를 검토한 후 사용자 경험 향상에 사용하겠습니다.
이 페이지 평가
이 페이지 평가
개선해야 할 점이 있을까요?

답하기 원하지 않습니다

의견을 보내 주셔서 감사드립니다!

유용한 링크

마지막 업데이트: 2021년 10월 18일

오자 또는 기타 텍스트 오류를 찾으셨나요? 텍스트를 선택하고 컨트롤+엔터를 누릅니다.

문제 보고
콘텐츠를 항상 검토합니다. 여러분의 피드백은 콘텐츠를 개선에 도움이 됩니다.
후속 조치를 위해 이메일을 제공해 주세요
의견을 보내 주셔서 감사드립니다!