Configurer la vente de clés de jeu
Vous pouvez vendre des clés de jeu par lien direct, via une interface de magasin ou un widget.
Vous ne pouvez vendre des clés de jeu contre de l’argent réel qu’après avoir signé un contrat de licence avec Xsolla. Pour ce faire, dans le Compte éditeur, accédez à la section Agreements & Taxes > Agreements > Licensing Agreement, remplissez le formulaire de contrat, et attendez la confirmation. L’examen du contrat peut prendre jusqu’à 3 jours ouvrés.
| Objet | Mode de vente |
|---|---|
| Une copie du jeu (clé de jeu). | Lien direct, widget, ou interface de magasin. Lorsque vous vendez via une interface de magasin, utilisez la méthode d’achat rapide sans créer de panier. |
| Plusieurs copies du jeu (clés de jeu) ou plusieurs jeux dans un panier. | Interface de magasin. Utilisez Site Builder ou intégrez Shop Builder API. |
Vous pouvez vendre des clés de jeu à tous les utilisateurs, autorisés ou non.
L’autorisation permet de :
- fixer des limites à la vente de clés de jeu pour l’utilisateur ;
- personnaliser les catalogues des objets et les offres promotionnelles ;
- utiliser le système de droits ;
- stocker les données utilisateur dans l’interface de paiement Xsolla.
Pour autoriser les utilisateurs, utilisez le produit Login ou votre propre système d’autorisation. Des informations détaillées sur la configuration sont fournies dans les instructions.
L’accès au jeu est automatiquement accordé après l’achat d’une clé. Cependant, les plateformes de jeu peuvent appliquer leurs propres règles en matière de clés d’activation.
Vous pouvez limiter la durée d’affichage du package de clés de jeu dans le catalogue, par exemple, pendant les promos saisonnières. Pour ce faire, passez les dates de début et de fin de la période de disponibilité au format ISO 8601 dans l’objet periods de l’appel API correspondant :
Pour limiter le nombre de clés de jeu disponibles à l’achat par l’utilisateur, suivez les instructions.
Vendre par lien direct
Vous pouvez vendre les clés de jeu via un lien direct ouvrant l’interface de paiement au format suivant :
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}
En plus des paramètres de requête principaux, vous pouvez passe des paramètres pour personnaliser l’interface de paiement et vendre aux utilisateurs connectés.
Paramètres requis
Ajoutez les données suivantes à ce lien :
YOUR-ITEM-TYPE— type d’objet. Valeurs possibles :game— package de clés de jeu.game_key— package de clés de jeu sur une plateforme spécifique.bundle— lot avec packages de clés de jeu.
YOUR-PROJECT-ID— ID du projet, que vous trouverez dans le Compte éditeur à côté du nom du projet.YOUR-ITEM-SKU— UGS du package de clés de jeu, par exemple :order456— UGS sans plateforme spécifique.pre.order123_steam— UGS pour une plateforme spécifique.
Nous recommandons d’utiliser des packages de clés de jeu spécifiques à chaque plateforme. Cela évite les problèmes de compatibilité lors de l’utilisation ou de l’activation des clés. Dans tous les cas, un suffixe propre à la plateforme doit être ajouté à l’UGS, automatiquement ou manuellement selon la méthode de création du package :
Lorsque vous créez des packages de clés dans le Compte éditeur, le système ajoute automatiquement un suffixe spécifique à la plateforme avec un tiret bas (par exemple
_steam,_playstation) à la référence que vous indiquez.Lorsque vous créez des packages de clés spécifiques à une plateforme via des appels API, vous pouvez définir le suffixe de la plateforme dans n’importe quel format, en utilisant uniquement des caractères alphanumériques latins, des points, des tirets et des tirets bas.
Liste des plateformes prises en charge par Xsolla et exemples de suffixes :
| Nom | Exemple de suffixe UGS |
|---|---|
| Steam | _steam |
| PlayStation | _playstation |
| Xbox | _xbox |
| Uplay | _uplay |
| Origin | _origin |
| DRM Free | _drmfree |
| GOG | _gog |
| Epic Games | _epicgames |
| Nintendo Switch eShop | _nintendo_eshop |
| Discord Game Store | _discord_game_store |
| Oculus | _oculus |
| Viveport | _viveport |
| Google Stadia | _stadia |
| MY.GAMES Store | _my_game |
Pour garantir le bon fonctionnement du lien, récupérez l’UGS exacte via l’appel API Get games list et utilisez-la dans le lien de paiement comme valeur SKU. L’UGS de l’objet se trouve dans le paramètre items.unit_items.sku et suit généralement le format game_key_sku_drm_sku.
Exemple d’URL pour vendre un jeu sur Steam :
1https://purchase.xsolla.com/pages/buy?type=game_key&project;_id=123456&sku;=pre.order123_steam
Personnalisation de l'interface de paiement
Pour que l’interface de paiement reflète le style de votre jeu', configurez le thème, la taille et les autres paramètres d’interface comme indiqué dans le guide sur la personnalisation de Pay Station. Ajoutez le paramètre ui_settings à l’URL et passez un objet JSON settings.ui encodé en Base64 en tant que valeur.
Exemple d’URL pour ouvrir l’interface de paiement avec un thème personnalisé :
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&ui_settings=ewoJCQkic2l6ZSI6ICJzbWFsbCIsCgkJCSJ0aGVtZSI6ICJkYXJrIgoJCX0=
Vendre à des utilisateurs authentifiés
Pour vendre des clés aux utilisateurs authentifiés, passez un jeton d’accès utilisateur dans le paramètre xsolla_login_token. Ce jeton dépend de la méthode d’authentification choisie.
Exemple d’URL pour ouvrir l’interface de paiement avec un jeton :
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR_ITEM_SKU}&xsolla_login_token={ACCESS_TOKEN}
Test de paiement
Pour tester le flux de paiement en mode bac à sable, ajoutez le paramètre mode=sandbox à l’URL. Utilisez ensuite des cartes bancaires de test pour effectuer les transactions.
Exemple d’URL pour ouvrir l’interface de paiement en mode bac à sable :
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&mode=sandbox
Vendre via une interface de magasin
Vous pouvez vendre des clés de jeu via une interface de magasin. Pour créer un magasin, vous pouvez :
- utiliser Site Builder ;
- créer votre propre version de magasin et intégrer Shop Builder API.
Pour vendre des packages de clés de jeu en utilisant Shop Builder API :
- Utilisez la méthode Lire une liste de jeux pour afficher le catalogue.
Implémentez l’achat de clés de jeu :
- Pour un achat rapide d’une clé, utilisez la méthode Créer une commande à partir d’un objet spécifique. En réponse à cette méthode, vous recevrez un jeton qui doit être utilisé pour ouvrir l’interface de paiement.
- Pour acheter plusieurs clés de jeu, utilisez les méthodes de gestion du panier :
- Mettre à jour un objet du panier actuel pour ajouter une clé de jeu au panier ;
- Lire le panier de l’utilisateur actuel pour récupérer la liste des clés de jeu dans le panier ;
- Créer une commande à partir de tous les objets du panier actuel pour payer les clés de jeu dans le panier. En réponse à cette méthode, vous recevrez un jeton qui doit être utilisé pour ouvrir l’interface de paiement.
items.unit_items.sku de la requête d’obtention de la liste des jeux.Vendre via un widget
Vous pouvez ajouter un widget à votre page pour vendre des clés de jeu et le customiser. Pour copier le code du widget, accédez à la section Widget customization après avoir créé le package de clés dans votre Compte éditeur.
Si un jeu est vendu sur une seule plateforme, le widget affichera le prix du jeu spécifique à cette plateforme.
Exemple : Acheter maintenant pour 10 $.
Si un jeu est vendu sur plusieurs plateformes, le widget affichera le prix le plus bas parmi les plateformes.
Exemple : Obtenir à partir de 10 $.
Dans la fenêtre de création de la commande, l’utilisateur peut voir les prix pour toutes les plateformes et faire son choix.
Pour afficher le prix pour une plateforme spécifique dans le widget, spécifiez l’UGS de la plateforme dans le paramètre drm.

Exemple de code de widget :
- html
1<div id="xsolla-buy-button-widget"></div>
2
3<script>
4 var options = {
5 project_id: "101010",
6 sku: "my_key",
7 user: {
8 auth: "9qs9VyCIQQXBlzJQcfETIKWZDvhi4Sz1"
9 },
10 drm: "steam",
11 item_type: "unit",
12 api_settings: {
13 sandbox: true
14 },
15 widget_ui: {
16 target_element: "#xsolla-buy-button-widget",
17 theme: {
18 foreground: "green",
19 background: "light"
20 }
21 },
22 payment_widget_ui: {
23 lightbox: {
24 height: "700px",
25 spinner: "round"
26 }
27 }
28 };
29
30 var s = document.createElement("script");
31 s.type = "text/javascript";
32 s.async = true;
33 s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.8/widget.min.js";
34 s.addEventListener("load", function () {
35 var widgetInstance = XBuyButtonWidget.create(options);
36 });
37 document.getElementsByTagName("head")[0].appendChild(s);
38</script>
39
40<style>
41 #xsolla-buy-button-widget {
42 /* place code for button positioning here */
43 margin: 10px;
44 }
45
46 /* Styles the button itself */
47 .x-buy-button-widget.x-buy-button-widget__tiny .x-buy-button-widget-payment-button {
48 background-color: #ff005b;
49 color: black;
50 }
51</style>
Paramètres du widget
| Paramètre | Type | Description |
|---|---|---|
project_id | integer | ID du projet dans lequel sont téléchargés les clés de jeu ou les lots contenant des clés de jeu, des objets en jeu ou les lots contenant des biens. |
item_type | string | Type bien. Peut prendre les valeurs suivantes : virtual_good, virtual_currency, game_key ou unit. Le type unit est utilisé lorsque le jeu est disponible sur plusieurs plateformes de distribution. |
ugs | string | ID unique de l’objet. |
drm | string | UGS de la plateforme de distribution, par exemple, steam. Permet d’afficher le prix pour une plateforme spécifique. |
api_settings | object | Paramètres de configuration de l’environnement et de l’hôte :
|
utilisateur | object | Un objet contenant des données utilisateur. |
user.auth | string | Jeton d’autorisation utilisateur : Web JSON Token ou jeton d’accès Pay Station. |
user.locale | string | Langue locale de l’utilisateur. Détermine la langue du texte des boutons et de l’interface de paiement. Il s’agit d’un code de langue à deux lettres selon la norme ISO_639-1. |
widget_ui.theme | object | Thème de couleur du widget, qui détermine son apparence. Valeurs possibles : {foreground:[‘blue’,‘red’,‘green’,‘gold’], background:[’light’,‘dark’]}. |
widget_ui.template | string | Modèle. Valeurs possibles :
|
widget_ui.target_element | string | Élément de la page où le widget doit être affiché (le sélecteur jQuery doit être utilisé, par exemple #widget-example). Obligatoire |
Paramètres qui déterminent l’apparence de l’interface de paiement
| Paramètre | Type | Description |
|---|---|---|
payment_ui | object | Paramètres d’apparence de l’interface de paiement. |
payment_widget_ui | object | Objet contenant les paramètres qui déterminent l’apparence de l’interface de paiement. |
payment_widget_ui.lightbox | object | Objet contenant les options pour la fenêtre modale dans laquelle l’interface de paiement est ouverte. |
payment_widget_ui.lightbox.width | string | Largeur du cadre de la lightbox. Si définie sur null, elle correspondra à la largeur de la Pay Station. La valeur par défaut est null. |
payment_widget_ui.lightbox.height | string | Hauteur du cadre de la lightbox. Si définie sur null, elle correspondra à la hauteur de Pay Station. La valeur par défaut est 100%. |
payment_widget_ui.lightbox.zIndex | integer | Définit l’ordre d’empilement. La valeur par défaut est 1000. |
payment_widget_ui.lightbox.overlayOpacity | integer | Opacité de l’arrière-plan du widget (0 — complètement transparent, 1 — complètement opaque). La valeur par défaut est 60 % (.6). |
payment_widget_ui.lightbox.overlayBackground | string | Couleur de fond de la superposition. La valeur par défaut est #000000. |
payment_widget_ui.lightbox.contentBackground | string | Couleur de fond du cadre. La valeur par défaut est #ffffff. Notez que ce changement de couleur n’affecte pas l’iframe Pay Station, mais uniquement la lightbox qui le contient. |
payment_widget_ui.lightbox.spinner | string | Type d’indicateur de chargement animé. Valeurs possibles : xsolla ou round. La valeur par défaut est xsolla. |
payment_widget_ui.lightbox.spinnerColor | string | Couleur de l’indicateur de chargement. Aucune valeur par défaut. |
payment_widget_ui.childWindow | object | Paramètres de la fenêtre enfant dans laquelle l’interface de paiement est ouverte. Fonctionne pour la version mobile. |
payment_widget_ui.childWindow.target | string | Propriété qui détermine l’endroit où la fenêtre enfant doit être ouverte. Elle peut prendre les valeurs suivantes : _blank, _self ou _parent. La valeur par défaut est _blank. |
Méthodes du widget
var widgetInstance = XBuyButtonWidget.create(options)— crée l'instance du widget et l'affiche sur la page.widgetInstance.on(event, handler)— lie une fonction de gestionnaire d'événements au widget.event (string)— type d'événement.handler (function)— fonction à exécuter lorsque l'événement est déclenché.
widgetInstance.off(event, handler)— supprime un gestionnaire d'événement.event (string)— type d'événement.handler (function)— fonction de gestion précédemment liée à l'événement.
Liste des événements :
| Paramètre | Description |
|---|---|
| init | Widget initialisé. |
| open | Widget ouvert. |
| load | L’interface de paiement (Pay Station) est chargée. |
| close | L’interface de paiement (Pay Station) est fermée. |
| status | L’utilisateur est sur la page d’état. |
| status-invoice | L’utilisateur est sur la page d’état ; le paiement est en cours. |
| status-delivering | L’utilisateur a été déplacé sur la page d’état ; le paiement a été effectué ; la notification de paiement a été envoyée. |
| status-done | L’utilisateur est sur la page d’état ; le paiement est crédité sur le compte de l’utilisateur. |
| status-troubled | L’utilisateur a été déplacé sur la page d’état, mais le paiement a échoué. |
Pour accéder à la liste des événements, utilisez l’objet XBuyButtonWidget.eventTypes.
Customisation des boutons
- Ouvrez le projet dans le Compte éditeur et accédez à la section Items catalog > Game keys.
- Sélectionnez une clé de jeu et accédez à l'onglet Widget customization.
- Dans le bloc Customize, sélectionnez la couleur d'arrière-plan.
theme dans le code pour que le paramètre background ait une chaîne vide pour valeur.- Lorsque vous ajoutez le code du widget à votre page, il inclut des styles hérités. Ajoutez les styles ci-dessous pour remplacer ces styles.
style en dessous de la balise script que vous avez obtenue dans l’onglet Widget customization.- css
1/* This should be used for button positioning but note this technically repositions the entire widget */
2#xsolla-buy-button-widget {
3 /* place code for button positioning here */
4}
5
6/* Styles the button itself */
7.x-buy-button-widget.x-buy-button-widget__tiny
8 .x-buy-button-widget-payment-button {
9 background-color: #ff005b;
10 color: black;
11}
12
13/* Button on hover */
14.x-buy-button-widget.x-buy-button-widget__tiny
15 .x-buy-button-widget-payment-button:hover {
16 background-color: #ff005b;
17}
18
19/* The following are style overrides to leave you with just the button */
20
21/* space immediately surrounding button */
22.x-buy-button-widget-button-block.x-buy-button-widget-button-block__light {
23 background-color: white;
24}
25
26/* space above button (including game title area) */
27.x-buy-button-widget.x-buy-button-widget__tiny
28 .x-buy-button-widget-game-logo {
29 height: 200px;
30 background-image: none !important;
31 background-color: white;
32}
33
34 /* Game title (located right above button) */
35.x-buy-button-widget-game-name.x-buy-button-widget-game-name__light {
36 display: none !important;
37}
- Les noms d'id/classes ci-dessus et l'extrait de code sont utilisés en conjonction avec le code du widget copié (image à l'étape 5). C'est pourquoi il est important que vous implémentez le code du widget copié.
- Vous pouvez utiliser le code ci-dessus tel quel ou le modifier en fonction de votre scénario. Les commentaires du code (lignes 1, 3, 5, 11, 16, 18, 22, 29) sont là pour aider à déterminer ce que chaque règle CSS cible et définir les styles futurs. Par exemple, si vous souhaitez conserver uniquement le bouton (et non l'ensemble du widget), vous devrez remplacer la couleur d'arrière-plan de votre page aux endroits ci-dessous où la couleur est
white— lignes 20 et 27.
Comment créer plusieurs boutons ou UGS
Référez-vous au Xsolla Pay2Play Widget Simple Integration 4 buttons pour un exemple de code démontrant comment cela est mis en œuvre en utilisant le widget Pay2Play.
La structure est similaire au code du widget Buy Button. Exemple de migration :
- html
1<div id="xsolla-buy-button-widget"></div>
2<div id="xsolla-buy-button-widget-2"></div>
3
4<script>
5 var options = {
6 project_id: "191204",
7 sku: "789",
8 item_type: "unit",
9 api_settings: {
10 sandbox: false
11 },
12 widget_ui: {
13 target_element: "#xsolla-buy-button-widget",
14 theme: {
15 foreground: "gold",
16 background: ""
17 }
18 },
19 payment_widget_ui: {
20 lightbox: {
21 height: "700px",
22 spinner: "round"
23 }
24 }
25 };
26
27 // options for second buy button - note the different SKU and target_element
28 var options2 = {
29 project_id: "191204",
30 sku: "123",
31 item_type: "unit",
32 api_settings: {
33 sandbox: false
34 },
35 widget_ui: {
36 target_element: "#xsolla-buy-button-widget-2",
37 theme: {
38 foreground: "gold",
39 background: ""
40 }
41 },
42 payment_widget_ui: {
43 lightbox: {
44 height: "700px",
45 spinner: "round"
46 }
47 }
48 };
49
50 var s = document.createElement("script");
51 s.type = "text/javascript";
52 s.async = true;
53 s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.4/widget.min.js";
54
55 // one event listener per widget instance. repeat for more buttons, passing in different SKUs
56 s.addEventListener("load", function () {
57 var widgetInstance = XBuyButtonWidget.create(options);
58 });
59 s.addEventListener("load", function () {
60 var widgetInstance2 = XBuyButtonWidget.create(options2);
61 });
62
63 document.getElementsByTagName("head")[0].appendChild(s);
64</script>
- Les lignes 1 et 2 contiennent chacune un
divcorrespondant à un bouton, chacun avec un ID unique. - À partir de la ligne 26 se trouvent les options pour le deuxième bouton (présentées dans l'objet
options2). Vous aurez besoin d'un ensemble deoptionscomme ceux ci-dessus pour chaque Buy Button. Notez les différentssku(ligne 28) ettarget_element(ligne 34, ciblant ledivde la ligne 2).
Faute de frappe ou autre erreur dans le texte ? Sélectionnez le texte concerné et appuyez sur Ctrl+Entrée.