Utiliser Shop Builder avec l’autorisation BaaS
Vous pouvez utiliser Shop Builder avec le système d’autorisation BaaS pour vendre des objets en jeu. Dans ce cas, l’interaction est comme suit :
- L'utilisateur se connecte à votre application via le système d'autorisation BaaS.
- Le service BaaS demande le JSON Web Token (JWT) de l'utilisateur aux serveurs Xsolla en passant l'ID de l'utilisateur.
- Les serveurs Xsolla renvoient le JWT de l'utilisateur au service BaaS.
- Le service BaaS passe le JWT de l'utilisateur à l'application.
- L'application utilise le JWT de l'utilisateur pour interagir avec les serveurs Xsolla à l'aide de l'API.
Note
Si vous n’avez pas implémenté la logique d’autorisation utilisateur, vous pouvez intégrer Xsolla Login et configurer le stockage des données utilisateur dans PlayFab ou Firebase. Cela vous permet d’utiliser l’API Login pour authentifier les utilisateurs et obtenir des JWT afin d’interagir avec les API d’autres produits Xsolla.
- Dans le Compte éditeur, connectez le projet de connexion standard à votre projet.
- Configurer le client OAuth 2.0 serveur.
- Ajoutez des fonctions préprogrammées à votre projet en suivant les instructions Firebase et PlayFab.
Configurer le client OAuth 2.0 du serveur
- Ouvrez le projet dans le Compte éditeur et accédez à la section Players > Login.
- Dans le volet du projet de Login, appuyez sur Configure.
- Accédez au bloc Security et sélectionnez la section OAuth 2.0.
- Appuyez sur Add OAuth 2.0.
- Spécifiez les OAuth 2.0 redirect URIs.
- Cochez la case Server (server-to-server connection).
- Appuyez sur Connect.
- Copiez et enregistrez l'ID client et la clé secrète.
Ajouter une fonction cloud au projet Firebase
- Initialisez le projet Firebase.
- Importez et configurez la fonction d'obtention du JWT utilisateur, où :
<ProjectID>
est l'ID de projet, qui se trouve dans le Compte éditeur à côté du nom du projet ;<LoginID>
est l'ID de Login. Pour l'obtenir, accédez au Compte éditeur, et, sous la section Players >Login > Dashboard > votre projet de Login, appuyez sur Copy ID à côté du nom du projet de Login ;<OAuthClientID>
est l'ID client obtenu lors de la configuration du client OAuth 2.0 du serveur ;<OAuthSecretKey>
est la clé secrète obtenue lors de la configuration du client OAuth 2.0 du serveur.
Code de la fonction de réception du JWT de l’utilisateur :
Copy
- javascript
1const projectId = "<ProjectID>";
2const loginProjectId = "<LoginID>";
3
4const serverOauthClientId = <OAuthClientID>;
5const serverOauthClientSecret = "<OAuthSecretKey>";
6
7exports.getXsollaLoginToken = functions.https.onCall((data, context) => {
8 if (!context.auth) {
9 throw new functions.https.HttpsError(
10 "failed-precondition",
11 "The function must be called while authenticated."
12 );
13 }
14
15 const postData =
16 "grant_type=client_credentials" +
17 `&client_secret=${serverOauthClientSecret}`+
18 `&client_id=${serverOauthClientId}`;
19
20 const options = {
21 hostname: "login.xsolla.com",
22 port: 443,
23 path: "/api/oauth2/token",
24 method: "POST",
25 headers: {
26 "Content-Type": "application/x-www-form-urlencoded",
27 "Content-Length": postData.length,
28 },
29 };
30
31 return new Promise( (resolve, reject) => {
32 const req = https.request(options, (res) => {
33 if (res.statusCode !== 200) {
34 reject(
35 new functions.https.HttpsError(
36 "internal",
37 "Server token not received"
38 )
39 );
40 }
41 let body = [];
42 res.on("data", (d) => {
43 body.push(d);
44 });
45 res.on("end", () => {
46 try {
47 body = JSON.parse(Buffer.concat(body).toString());
48 } catch (e) {
49 reject(
50 new functions.https.HttpsError(
51 "internal",
52 "Malformed server token response"
53 )
54 );
55 }
56 getClientToken(context.auth.uid, body.access_token, resolve, reject);
57 });
58 });
59 req.on("error", (e) => {
60 reject(new functions.https.HttpsError(
61 "internal",
62 "Internal error while server token flow"
63 ));
64 });
65
66 req.write(postData);
67 req.end();
68 });
69});
70
71// eslint-disable-next-line require-jsdoc
72function getClientToken(userId, serverToken, resolve, reject) {
73 const postData = JSON.stringify(
74 {
75 "server_custom_id": userId,
76 }
77 );
78
79 const path =
80 "/api/users/login/server_custom_id?" +
81 `projectId=${loginProjectId}&` +
82 `publisher_project_id=${projectId}`;
83
84 const options = {
85 hostname: "login.xsolla.com",
86 port: 443,
87 path: path,
88 method: "POST",
89 headers: {
90 "Content-Type": "application/json",
91 "Content-Length": postData.length,
92 "X-Server-Authorization": serverToken,
93 },
94 };
95
96 const req = https.request(options, (res) => {
97 if (res.statusCode !== 200) {
98 reject(
99 new functions.https.HttpsError(
100 "internal",
101 "Client token not received"
102 )
103 );
104 }
105 let body = [];
106 res.on("data", (d) => {
107 body.push(d);
108 });
109 res.on("end", () => {
110 try {
111 body = JSON.parse(Buffer.concat(body).toString());
112 } catch (e) {
113 reject(
114 new functions.https.HttpsError(
115 "internal",
116 "Malformed client token response"
117 )
118 );
119 }
120 resolve({
121 "token": body.token,
122 });
123 });
124 });
125 req.on("error", (e) => {
126 reject(new functions.https.HttpsError(
127 "internal",
128 "Internal error while client token flow"
129 ));
130 });
131
132 req.write(postData);
133 req.end();
134}
- Déployez la fonction dans un environnement de production conformément à cet exemple.
- Ajoutez une logique côté client pour appeler la fonction depuis votre application. Spécifiez
getXsollaLoginToken
nom de fonction. Il n'est pas nécessaire de passer des paramètres. - Dans l'application, implémentez vous-même des méthodes pour utiliser l'API ou utilisez les SDK Xsolla.
Ajouter un script cloud au projet PlayFab
- Créez un fichier JS avec le code de la fonction d'obtention du JWT utilisateur, où :
<ProjectID>
est l'ID de projet, qui se trouve dans le Compte éditeur à côté du nom du projet ;<LoginID>
est l'ID de Login. Pour l'obtenir, accédez au Compte éditeur, et, sous la section Players > Login > Dashboard > votre projet de Login, appuyez sur Copy ID à côté du nom du projet de Login ;<OAuthClientID>
est l'ID client obtenu lors de la configuration du client OAuth 2.0 du serveur ;<OAuthSecretKey>
est la clé secrète obtenue lors de la configuration du client OAuth 2.0 du serveur.
Note
Si vous utilisez déjà des scripts cloud dans votre projet, ajoutez la fonction d’obtention du JWT de l’utilisateur à la fin du code.
Copy
- javascript
1handlers.GetXsollaLoginToken = function (args) {
2
3 // TODO replace with production credentials
4 const projectId = <ProjectID>;
5 const loginProjectId = "<LoginID>";
6 const serverOauthClientId = <OAuthClientID>;
7 const serverOauthClientSecret = "<OAuthSecretKey>";
8
9 const getServerTokenBody =
10 "grant_type=client_credentials" +
11 `&client_secret=${serverOauthClientSecret}` +
12 `&client_id=${serverOauthClientId}`;
13
14 const serverTokenResponse = JSON.parse(
15 http.request(
16 "https://login.xsolla.com/api/oauth2/token",
17 "post",
18 getServerTokenBody,
19 "application/x-www-form-urlencoded",
20 {})
21 );
22
23 let serverToken = ""
24 if ('access_token' in serverTokenResponse) {
25 serverToken = serverTokenResponse.access_token;
26 } else {
27 return {
28 "error_message": "Server token not received"
29 }
30 }
31
32 const getUserTokenHeaders = {
33 "X-Server-Authorization": serverToken
34 }
35
36 const getUserTokenBody = JSON.stringify(
37 {
38 "server_custom_id": currentPlayerId,
39 }
40 );
41
42 const getUserTokenPath =
43 "/api/users/login/server_custom_id?" +
44 `projectId=${loginProjectId}&` +
45 `publisher_project_id=${projectId}`;
46
47 const userTokenResponse = JSON.parse(
48 http.request(
49 "https://login.xsolla.com" + getUserTokenPath,
50 "post",
51 getUserTokenBody,
52 "application/json",
53 getUserTokenHeaders)
54 );
55
56 if ('token' in userTokenResponse) {
57 return {
58 "token": userTokenResponse.token
59 }
60 } else {
61 return {
62 "error_message": "User token not received"
63 }
64 }
65}
- Accédez aux paramètres du projet PlayFab.
- Chargez le fichier du script cloud.
- Exécutez le script cloud dans un environnement de production.
- Ajoutez une logique côté client pour appeler la fonction depuis votre application. Spécifiez
GetXsollaLoginToken
comme nom de fonction. Il n'est pas nécessaire de passer des paramètres.
Exemple d’appel de la fonction d’obtention du JWT de l’utilisateur :
Copy
kotlin
- kotlin
- C#
- C++
1val tokenRequest = PlayFabClientModels.ExecuteCloudScriptRequest()
2tokenRequest.FunctionName = "GetXsollaLoginToken"
3val res = PlayFabClientAPI.ExecuteCloudScript(tokenRequest)
4val result = res.Result.FunctionResult as Map<*, *>
5val token = result["token"]
6val errorMessage = result["error_message"]
1var tokenRequest = new ExecuteCloudScriptRequest{
2 FunctionName = "GetXsollaLoginToken"
3};
4
5PlayFabClientAPI.ExecuteCloudScript(
6 tokenRequest,
7 scriptResult =>
8 {
9 var functionResult = scriptResult.FunctionResult as Dictionary<string, string>;
10 var token = functionResult["token"];
11 },
12 playfabError => { Debug.LogError($"GetXsollaAccessToken error: {playfabError.ErrorMessage}"); });
1void UMyClass::GetXsollaToken()
2{
3 FClientExecuteCloudScriptRequest tokenRequest;
4 tokenRequest.FunctionName = TEXT("GGetXsollaLoginToken");
5
6 UPlayFabClientAPI::FDelegateOnSuccessExecuteCloudScript onSuccess;
7 onSuccess.BindUFunction(this, "OnTokenRecieved");
8
9 UPlayFabClientAPI::FDelegateOnFailurePlayFabError onFailure;
10 onSuccess.BindUFunction(this, "OnError");
11
12 UPlayFabClientAPI::ExecuteCloudScript(tokenRequest, onSuccess, onFailure, nullptr);
13}
14
15void UMyClass::OnTokenRecieved(FClientExecuteCloudScriptResult result, UObject* customData)
16{
17 const FString& token = result.FunctionResult->GetStringField(TEXT("token"));
18
19 // do something with a token
20}
21
22void UMyClass::OnError(FPlayFabError error, UObject* customData)
23{
24 // handle errors
25}
Note
Dans cet exemple, nous utilisons les méthodes SDK PlayFab pour envoyer une requête au script cloud. Vous pouvez implémenter vous-même le traitement des requêtes et des réponses sans ajouter le SDK PlayFab à votre projet.
- Dans l'application, implémentez vous-même des méthodes pour utiliser l' API ou utilisez les SDK Xsolla.
Cet article vous a été utile ?
Merci pour votre commentaire !
Nous examinerons votre message et l'utiliserons pour améliorer votre expérience.Liens utiles
Dernière mise à jour: 19 Septembre 2025Faute de frappe ou autre erreur dans le texte ? Sélectionnez le texte concerné et appuyez sur Ctrl+Entrée.