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 In-Game Store 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.

Le lien suivant ouvre l’interface de paiement :

Copy
Full screen
Small screen
https://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 de bien :
    • game — jeu ; game_key — jeu sur une plateforme spécifique.
    • bundle — lot.
  • YOUR-PROJECT-ID — ID de votre projet, qui se trouve dans la section Project settings > General settings > Project ID dans Compte éditeur.
  • YOUR-ITEM-SKU — UGS du package de clés de jeu. Pour vendre un jeu sur une plateforme spécifique, utilisez la méthode Get games list (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
https://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
https://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, accédez au Compte éditeur dans 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
https://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 In-Game Store API :

  1. Utilisez la méthode Get games list 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 In-Game Store 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
    <div id="xsolla-buy-button-widget"></div>
          <script>
              var options = {
                  project_id: "101010",
                  sku: "my_key",
                  user: {
                      auth: "9qs9VyCIQQXBlzJQcfETIKWZDvhi4Sz1"
                  },
                  drm: "steam",
                  item_type: "unit",
                  api_settings: {
                      sandbox: true,
                  },
                  widget_ui: {
                      target_element: "#xsolla-buy-button-widget",
                      theme: {
                          foreground: "green",
                          background: "light"
                      },
                  },
    
                 payment_widget_ui: {
                      lightbox: {
                          height: '700px',
                          spinner: 'round'
                      }
                }
              };
              var s = document.createElement('script');
              s.type = "text/javascript";
              s.async = true;
              s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.8/widget.min.js";
              s.addEventListener('load', function (e) {
                  var widgetInstance = XBuyButtonWidget.create(options);
              }, false);
              var head = document.getElementsByTagName('head')[0];
              head.appendChild(s);
          </script>
          <style>
              #xsolla-buy-button-widget {
    
              /* place code for button positioning here */
                margin: 10px  
              }
    
              /* Styles the button itself */
              .x-buy-button-widget.x-buy-button-widget__tiny
                .x-buy-button-widget-payment-button {
                background-color: #ff005b;
                color: black;
              }     
          </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 votre projet dans le Compte éditeur.
    2. Dans le menu latéral, cliquez sur Store.
    3. Dans le volet Game Keys, cliquez sur Configure.
    4. 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
    /* This should be used for button positioning but note this technically repositions the entire widget */
    #xsolla-buy-button-widget {
      /* place code for button positioning here */
    }
    
    /* Styles the button itself */
    .x-buy-button-widget.x-buy-button-widget__tiny
      .x-buy-button-widget-payment-button {
      background-color: #ff005b;
      color: black;
    }
    
    /* Button on hover */
    .x-buy-button-widget.x-buy-button-widget__tiny
      .x-buy-button-widget-payment-button:hover {
      background-color: #ff005b;
    }
    
    /* The following are style overrides to leave you with just the button */
    
    /* space immediately surrounding button */
    .x-buy-button-widget-button-block.x-buy-button-widget-button-block__light {
      background-color: white;
    }
    
    /* space above button (including game title area) */
    .x-buy-button-widget.x-buy-button-widget__tiny
      .x-buy-button-widget-game-logo {
      height: 200px;
      background-image: none !important;
      background-color: white;
    }
    
     /* Game title (located right above button) */
    .x-buy-button-widget-game-name.x-buy-button-widget-game-name__light {
      display: none !important;
    }
    
    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
    <div id="xsolla-buy-button-widget"></div>
    <div id="xsolla-buy-button-widget-2"></div>
        <script>
          var options = {
            project_id: "191204",
            sku: "789",
            item_type: "unit",
            api_settings: {
              sandbox: false,
            },
            widget_ui: {
              target_element: "#xsolla-buy-button-widget",
              theme: {
                foreground: "gold",
                background: "",
              },
            },
            payment_widget_ui: {
              lightbox: {
                height: "700px",
                spinner: "round",
              },
            },
          };
          // options for second buy button - note the different SKU and target_element
          var options2 = {
            project_id: "191204",
            sku: "123",
            item_type: "unit",
            api_settings: {
              sandbox: false,
            },
            widget_ui: {
              target_element: "#xsolla-buy-button-widget-2",
              theme: {
                foreground: "gold",
                background: "",
              },
            },
            payment_widget_ui: {
              lightbox: {
                height: "700px",
                spinner: "round",
              },
            },
          };
          var s = document.createElement("script");
          s.type = "text/javascript";
          s.async = true;
          s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.4/widget.min.js";
    
    // one event listener per widget instance. repeat for more buttons, passing in different SKUs
          s.addEventListener(
            "load",
            function (e) {
              var widgetInstance = XBuyButtonWidget.create(options);
            },
            false
          );
          s.addEventListener(
            "load",
            function (e) {
              var widgetInstance2 = XBuyButtonWidget.create(options2);
            },
            false
          );
          var head = document.getElementsByTagName("head")[0];
          head.appendChild(s);
        </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: 8 Novembre 2024

    Faute de frappe ou autre erreur dans le texte ? Sélectionnez le texte concerné et appuyez sur Ctrl+Enté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 !