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.

ObjetMode 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 :

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.

Note
Les utilisateurs peuvent demander le remboursement des clés. Après un remboursement réussi, vous recevrez un e-mail de Xsolla contenant la liste des clés concernées. Nous vous recommandons de bloquer l’accès à ces clés sur toute plateforme tierce.
Note

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.

Le lien suivant ouvre l’interface de paiement :

Copy
Full screen
Small screen
    1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}
    
    Note

    L’achat de clés de jeu par lien direct contre des devises réelles n’est possible qu’après la signature du contrat de licence avec Xsolla. Pour ce faire, dans le Compte éditeur, accédez à la section Agreements & Taxes > Agreements, remplissez le formulaire de contrat, et attendez la confirmation. L’examen du contrat peut prendre jusqu’à 3 jours ouvrables.

    Pour tester les paiements, utilisez l’environnement de test. Pour ce faire, ajoutez le paramètre mode=sandbox au lien.

    Ajoutez les données suivantes à ce lien :

    • YOUR-ITEM-TYPE — type d’objet :
      • game — jeu ; game_key — jeu sur une plateforme spécifique.
      • bundle — lot.
    • YOUR-PROJECT-ID — ID du projet, qui se trouve dans dans le Compte éditeur à côté du nom du projet.
    • YOUR-ITEM-SKU — UGS du package de clés de jeu. Pour vendre un jeu sur une plateforme spécifique, utilisez la méthode Lire une liste de jeux (en général, cette UGS ressemble à unit_name_drm_sku) pour obtenir l’UGS.

    • Style de l'interface de paiement : thème (sombre, ou clair, par défaut), taille et autres paramètres. Spécifiez le paramètre ui_settings dans l'URL et passez un objet JSON settings.ui encodé en Base64 comme valeur. Exemple d'URL avec les paramètres de l'interface utilisateur :
    Copy
    Full screen
    Small screen
      1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&ui_settings=ewoJCQkic2l6ZSI6ICJzbWFsbCIsCgkJCSJ0aGVtZSI6ICJkYXJrIgoJCX0=
      
      • Jeton permettant de passer les données utilisateur. Utilisé lors de la vente de clés de jeu aux utilisateurs authentifiés uniquement. Ce jeton dépend de la méthode d'authentification. Exemple d'URL avec un jeton :
      Copy
      Full screen
      Small screen
        1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR_ITEM_SKU}&xsolla_login_token={ACCESS_TOKEN}
        
        Note
        Lors d’un paiement, le serveur Xsolla envoie une requête à l’URL du webhook pour vérifier que l’utilisateur existe dans le jeu. Pour éviter les erreurs lors d’un test de paiement, dans le projet dans le Compte éditeur, accédez à la section Project settings > Webhooks, et réglez la bascule sur Off. Si vous souhaitez utiliser les webhooks, implémentez le traitement réussi du webhook Validation utilisateur.
        1. Exemple d'URL de test :
        Copy
        Full screen
        Small screen
          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 :

          Pour vendre des packages de clés de jeu en utilisant Shop Builder API :

          1. Utilisez la méthode Lire une liste de jeux pour afficher le catalogue.
          2. Implémentez l’achat de clés de jeu :

          Pour le bon fonctionnement des méthodes, choisissez une option d’authentification appropriée.
          Note
          Lorsque vous vendez un jeu via Shop Builder API, vous devez implémenter une fonction permettant aux joueurs de sélectionner une plateforme spécifique sur le client. Pour obtenir l’UGS, passez la valeur du paramètre 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 :

          Copy
          Full screen
          Small screen
           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>
          
          Note
          Paramètres du widget

          ParamètreTypeDescription
          project_id
          integerID 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
          stringType 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
          stringID unique de l’objet.
          drm
          stringUGS de la plateforme de distribution, par exemple, steam. Permet d’afficher le prix pour une plateforme spécifique.
          api_settings
          objectParamètres de configuration de l’environnement et de l’hôte :
          • host — hôte pour l’exécution des requêtes. La valeur par défaut est store.xsolla.com ;
          • api_host — hôte pour l’exécution des requêtes API. La valeur par défaut est store.xsolla.com/api ;
          • sandbox — définissez la valeur true pour tester le processus de paiement. sandbox-secure.xsolla.com sera utilisée à la place de secure.xsolla.com pour traiter les paiements (voir Tester le processus de paiement).
          utilisateur
          objectUn objet contenant des données utilisateur.
          user.auth
          stringJeton d’autorisation utilisateur : Web JSON Token ou jeton d’accès Pay Station.
          user.locale
          stringLangue 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
          objectThème de couleur du widget, qui détermine son apparence. Valeurs possibles : {foreground:[‘blue’,‘red’,‘green’,‘gold’], background:[’light’,‘dark’]}.
          widget_ui.template
          stringModèle. Valeurs possibles :
          • standard (par défaut) — inclut l’image du jeu, le titre et le bouton avec style ;
          • simple — affiche uniquement le bouton sans aucun style appliqué.
          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ètreTypeDescription
          payment_ui
          objectParamètres d’apparence de l’interface de paiement.
          payment_widget_ui
          objectObjet contenant les paramètres qui déterminent l’apparence de l’interface de paiement.
          payment_widget_ui.lightbox
          objectObjet contenant les options pour la fenêtre modale dans laquelle l’interface de paiement est ouverte.
          payment_widget_ui.lightbox.width
          stringLargeur 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
          stringHauteur 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
          integerDéfinit l’ordre d’empilement. La valeur par défaut est 1000.
          payment_widget_ui.lightbox.overlayOpacity
          integerOpacité 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
          stringCouleur de fond de la superposition. La valeur par défaut est #000000.
          payment_widget_ui.lightbox.contentBackground
          stringCouleur 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
          stringType d’indicateur de chargement animé. Valeurs possibles : xsolla ou round. La valeur par défaut est xsolla.
          payment_widget_ui.lightbox.spinnerColor
          stringCouleur de l’indicateur de chargement. Aucune valeur par défaut.
          payment_widget_ui.childWindow
          objectParamètres de la fenêtre enfant dans laquelle l’interface de paiement est ouverte. Fonctionne pour la version mobile.
          payment_widget_ui.childWindow.target
          stringProprié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ètreDescription
          initWidget initialisé.
          openWidget ouvert.
          loadL’interface de paiement (Pay Station) est chargée.
          closeL’interface de paiement (Pay Station) est fermée.
          statusL’utilisateur est sur la page d’état.
          status-invoiceL’utilisateur est sur la page d’état ; le paiement est en cours.
          status-deliveringL’utilisateur a été déplacé sur la page d’état ; le paiement a été effectué ; la notification de paiement a été envoyée.
          status-doneL’utilisateur est sur la page d’état ; le paiement est crédité sur le compte de l’utilisateur.
          status-troubledL’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

          1. Ouvrez le projet dans le Compte éditeur et accédez à la section Items catalog > Game keys.
          2. Sélectionnez une clé de jeu et accédez à l'onglet Widget customization.
          Note
          S’il n’y a pas de clés de jeu, créez-en une nouvelle.
          1. Dans le bloc Customize, sélectionnez la couleur d'arrière-plan.
          Note
          Vous pouvez également modifier l’objet theme dans le code pour que le paramètre background ait une chaîne vide pour valeur.
          1. 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.
          Avis
          Pour des raisons de priorité et d’héritage CSS, il est recommandé d’ajouter les styles dans la balise style en dessous de la balise script que vous avez obtenue dans l’onglet Widget customization.
          Copy
          Full screen
          Small screen
           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}
          
          Avis
          • 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 :

          Copy
          Full screen
          Small screen
           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>
          
          Avis
          • Les lignes 1 et 2 contiennent chacune un div correspondant à 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 de options comme ceux ci-dessus pour chaque Buy Button. Notez les différents sku (ligne 28) et target_element (ligne 34, ciblant le div de la ligne 2).
          Cet article vous a été utile ?
          Merci !
          Que pouvons-nous améliorer ? Message
          Nous sommes désolés de l'apprendre
          Dites-nous pourquoi vous n'avez pas trouvé cet article utile. Message
          Merci pour votre commentaire !
          Nous examinerons votre message et l'utiliserons pour améliorer votre expérience.
          Dernière mise à jour: 19 Septembre 2025

          Faute de frappe ou autre erreur dans le texte ? Sélectionnez le texte concerné et appuyez sur Ctrl+Entrée.

          Signaler un problème
          Nous améliorons continuellement notre contenu grâce à vos commentaires.
          Indiquez votre adresse e-mail pour un suivi
          Merci pour votre commentaire !
          Impossible d'envoyer votre commentaire
          Réessayez plus tard ou contactez-nous à doc_feedback@xsolla.com.