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.

Note

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.

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.

Vous pouvez vendre les clés de jeu via un lien direct ouvrant l’interface de paiement au format suivant :

Copy
Full screen
Small screen
    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.

    Ajoutez les données suivantes à ce lien :

    • YOUR-ITEM-TYPE — type d’objet. Valeurs possibles :

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

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

    Copy
    Full screen
    Small screen
      1https://purchase.xsolla.com/pages/buy?type=game_key&project;_id=123456&sku;=pre.order123_steam
      

      Pour que l’interface de paiement reflète le style de votre jeu&#39, 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é :

      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=
        

        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 :

        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}
          

          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 :

          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
            
            Avis
            En mode bac à sable, les clés téléchargées ne sont pas utilisées. Le système simule un achat réussi sans fournir de clés réelles.

            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: 24 Novembre 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.