Verkauf von Spielschlüsseln einrichten
Sie können Spielschlüssel über einen Direktlink, die Shop-Benutzeroberfläche oder ein Widget verkaufen.
Sie können Spielschlüssel für echte Währung nur nach Unterzeichnung der Xsolla-Lizenzvereinbarung verkaufen. Navigieren Sie dazu im Kundenportal zu Vereinbarungen und Steuern > Vereinbarungen >Lizenzvereinbarung, füllen Sie das Formular aus, und warten Sie auf die Bestätigung. Die Prüfung der Vereinbarung kann bis zu drei Geschäftstage dauern.
| Artikel | Verkaufsmethode |
|---|---|
| Ein Exemplar von einem Spiel (der Spielschlüssel). | Direktlink, Widget oder Shop-Benutzeroberfläche. Verwenden Sie beim Verkauf über die Shop-Benutzeroberfläche die Methode Schnellkauf, bei der kein Warenkorb erstellt wird. |
| Mehrere Exemplare von einem Spiel (die Spielschlüssel) oder mehrere Spiele im gleichen Warenkorb. | Shop-Benutzeroberfläche. Verwenden Sie den Site Builder oder integrieren Sie die Shop Builder APII. |
Sie können Spielschlüssel an autorisierte und nicht autorisierte Nutzer verkaufen.
Mit der Autorisierung können Sie:
- Obergrenzen für den Verkauf von Spielschlüsseln für Benutzer festlegen
- Artikelkataloge und Werbeaktionen personalisieren
- das Berechtigungssystem verwenden
- Nutzerdaten im Zahlungsportal von Xsolla speichern
Sie können Nutzer mit dem Login-Produkt oder Ihrem eigenen Berechtigungssystem autorisieren. In dieser Anleitung finden Sie alle Details zur Einrichtung.
Der Zugang zum Spiel wird nach dem Kauf des Spielschlüssels automatisch gewährt. Die Spielplattformen können jedoch eigene Regeln für Aktivierungsschlüssel festlegen.
Sie können den Anzeigezeitraum des Spielschlüsselpakets im Katalog begrenzen (z. B., um das Paket nur während bestimmter Feiertage zu verkaufen). Übermitteln Sie dazu das Start- und Enddatum des Verfügbarkeitszeitraums gemäß ISO 8601 im periods-Objekt des entsprechenden API-Aufrufs:
Wie Sie die Anzahl der Spielschlüssel begrenzen, die ein Nutzer maximal kaufen kann, erfahren Sie in dieser Anleitung.
Verkauf über Direktlink
Spielschlüssel können über einen direkten Link verkauft werden, der das Zahlungsportal im folgenden Format öffnet:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}
Zusätzlich zu den Hauptabfrageparametern können Sie auch die Parameter zur Anpassung der Zahlungsschnittstelle und den Verkauf an authentifizierte Nutzer übermitteln.
Erforderliche Parameter
Fügen Sie dem Link folgende Daten hinzu:
YOUR-ITEM-TYPE– Artikeltyp. Mögliche Werte sind:game- Spielschlüsselpaket.game_key– Spielschlüsselpaket auf einer bestimmten Plattform.bundle– Bundle mit Spielschlüsselpaketen.
YOUR-PROJECT-ID– ID Ihres Projekts, das in Ihrem Kundenportal neben dem Projektnamen steht.YOUR-ITEM-SKU– Spielschlüsselpaket-SKU, zum Beispiel:order456- SKU ohne bestimmte Plattform.pre.order123_steam– SKU mit einer bestimmten Plattform.
Wir empfehlen die Verwendung plattformspezifischer Spielschlüsselpakete. Dadurch lassen sich Kompatibilitätsprobleme bei der Verwendung oder Aktivierung der Schlüssel vermeiden. In jedem Fall muss der SKU ein plattformspezifischer Suffix hinzugefügt werden – entweder automatisch oder manuell, je nachdem, wie das Schlüsselpaket erstellt wurde:
Wenn Sie ein Schlüsselpaket im Kundenportal erstellen, fügt das System automatisch ein plattformspezifisches Suffix mit Unterstrich zur eingegebenen SKU hinzu (z. B.
_steam,_playstation).Wenn Sie ein plattformspezifische Schlüsselpakete mittels API-Aufrufe erstellen, können Sie das Plattform-Suffix in jedem beliebigen Format angeben, das nur lateinische Klein- und Großbuchstaben, alphanumerische Zeichen, Punkte, Bindestriche und Unterstriche enthält.
Liste der unterstützten Xsolla-Plattformen und ihrer Suffixe als Beispiel:
| Name | Beispiel für ein SKU-Suffix |
|---|---|
| Steam | _steam |
| PlayStation | _steam |
| 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 |
Um sicherzustellen, dass der Link korrekt funtkioniert, können Sie die genaue SKU mithilfe des API-Aufrufs Spieleliste abrufen aufrufen und als SKU-Wert in den Zahlungslink einfügen. Die Artikel-SKU wird im Parameter items.unit_items.sku zurückgegeben (in der Regel folgt diese SKU dem Format game_key_sku_drm_sku).
Beispiel-URL für den Verkauf eines Spiels auf Steam:
1https://purchase.xsolla.com/pages/buy?type=game_key&project;_id=123456&sku;=pre.order123_steam
Zahlungsportal anpassen
Um Ihr Zahlungsportal an den Stil Ihres Spiels anzupassen, konfigurieren Sie das Theme, die Größe und andere Parameter der Benutzeroberfläche wie im Leitfaden zur Anpassung der Bezahlstation beschrieben. Fügen Sie der URL den Parameter ui_settings hinzu und übermitteln Sie ein settings.ui-JSON-Object mit Base64-Kodierung als Wert.
Beispiel-URL für die Öffnung des Zahlungsportals mit einem benutzerdefinierten Theme:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&ui_settings=ewoJCQkic2l6ZSI6ICJzbWFsbCIsCgkJCSJ0aGVtZSI6ICJkYXJrIgoJCX0=
Verkauf an authentifizierte Nutzer
Um Schlüssel an authentifizierte Nutzer zu verkaufen, müssen Sie den Benutzerzugriffstoken im xsolla_login_token-Parameter übermitteln. Dieser Token hängt von der gewählten Authentifizierungsmethode ab.
Beispiel-URL für die Öffnung des Zahlungsportals mit einem Token:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR_ITEM_SKU}&xsolla_login_token={ACCESS_TOKEN}
Zahlungstest
Um den Zahlungsablauf im Sandbox-Modus zu testen, fügen Sie den Parameter mode=sandbox zur URL hinzu. Sie können Testkarten für die Abwicklung der Transaktionen verwenden.
Beispiel-URL für die Öffnung eines Zahlungsportals im Sandbox-Modus:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&mode=sandbox
Verkauf über die Shop-Benutzeroberfläche
Sie können Spielschlüssel über die Shop-Benutzeroberfläche verkaufen. Um einen Shop zu erstellen, können Sie:
- den Site Builder verwenden;
- Ihren eigenen Shop erstellen und die Shop Builder API integrieren.
Verkauf von Spielschlüsselpaketen über die Shop Builder API:
- Mit der Methode Spieleliste abrufen können Sie einen Katalog anzeigen.
Implementieren Sie den Kauf von Spielschlüsseln:
- Verwenden Sie beim Schnellkauf eines Schlüssels die Methode Bestellung mit dem angegebenen Artikel erstellen. Diese Methode antwortet mit einem Token, der zum Öffnen des Zahlungsportals verwendet werden muss.
- Um mehrere Spielschlüssel zu kaufen, verwenden Sie die Warenkorbverwaltungsmethoden:
- Warenkorbartikel aus aktuellem Warenkorb aktualisieren, um einen Spielschlüssel in den Warenkorb zu legen.
- Warenkorb des aktuellen Benutzers abrufen, um eine Liste der im Warenkorb vorhandenen Spielschlüssel abzurufen.
- Bestellung mit allen Artikeln aus dem aktuellen Warenkorb anlegen, um die Spielschlüssel im Warenkorb zu bezahlen. Die Methode antwortet mit einem Token, der zum Öffnen des Zahlungsportals verwendet werden muss.
items.unit_items.sku aus der Anfrage an die Methode Spieleliste abrufen übermitteln.Verkauf über Widget
Sie können auf Ihrer Seite ein Widget zum Verkauf von Spielschlüsseln hinzufügen und es anpassen. Öffnen Sie nach dem Erstellen des Schlüsselpakets im Kundenportal den Abschnitt Widget-Anpassung und kopieren Sie dort den Widget-Code.
Wird ein Spiel nur auf einer Plattform verkauft, zeigt das Widget den Preis des Spiels auf dieser Plattform an.
Beispiel: Jetzt kaufen für 10€.
Wird ein Spiel auf mehreren Plattformen verkauft, zeigt das Widget den niedrigsten Preis an, den es auf diesen Plattformen findet.
Beispiel: Erhältlich ab 10€.
Im Bestellfenster sieht der Nutzer die Preise für alle Plattformen und kann sich entscheiden.
Sie können auch den Preis für eine bestimmte Plattform im Widget anzeigen lassen, indem Sie im Parameter DRM die SKU der Plattform eingeben.

Beispiel für einen Widget-Code:
- 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>
Widget-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
project_id | integer | ID des Projekts, in das Spielschlüssel oder Bundles mit Spielschlüsseln, Ingame-Items oder Bundles mit Items geladen werden. |
item_type | string | Item-Typ. Kann die Werte virtual_good,virtual_currency,game_key,unit enthalten. Der unit-Typ wird verwendet, wenn es mehrere Plattformen für die Distribution des Spiels gibt. |
sku | string | Eindeutige ID des Gegenstands. |
drm | string | SKU der Vertriebsplattform, zum Beispiel steam. Ermöglicht die Anzeige des Preises für eine bestimmte Plattform. |
api_settings | object | Konfigurationseinstellungen für Umgebung und Host:
|
user | object | Objekt mit den Benutzerdaten. |
user.auth | string | Benutzerzugriffstoken: JSON Web Token oder Zugriffstoken der Pay Station. |
user.locale | string | Regionale Benutzereinstellungen. Bestimmt die Sprache von Schaltflächentext und Zahlungsportal. Es wird ein Sprachcode mit zwei Buchstaben verwendet, der auf ISO_639-1 basiert. |
widget_ui.theme | object | Das Farbschema des Widgets, das sein Aussehen bestimmt. Es kann diese Werte annehmen: {foreground:[‘blue’,‘red’,‘green’,‘gold’], background:[’light’,‘dark’]} |
widget_ui.template | string | Vorlage. Mögliche Werte:
|
widget_ui.target_element | string | Element der Seite, wo das Widget eingebaut werden sein sollte (jQuery-Selector sollte verwendet werden, zum Beispiel #widget-example). Erforderlich |
Parameter, die das Aussehen des Zahlungsportals bestimmen
| Parameter | Typ | Beschreibung |
|---|---|---|
payment_ui | object | Parameter für das Erscheinungsbild der Zahlungsschnittstelle. |
payment_widget_ui | object | Ein Objekt, mit Parametern, das das Erscheinungsbild der Zahlungsschnittstelle bestimmt. |
payment_widget_ui.lightbox | object | Ein Objekt mit Optionen für das Modalfenster, in dem die Zahlungsschnittstelle geöffnet wird. |
payment_widget_ui.lightbox.width | string | Rahmenhöhe der Lightbox. Falls als Wert null festgelegt ist, wird die Höhe der Pay Station verwendet. Standardwert ist null. |
payment_widget_ui.lightbox.height | string | Rahmenhöhe der Lightbox. Falls als Wert null festgelegt ist, wird die Höhe der Pay Station verwendet. Standardwert ist 100%. |
payment_widget_ui.lightbox.zIndex | integer | Definiert die Stapelanordnung. Standardwert ist 1000. |
payment_widget_ui.lightbox.overlayOpacity | integer | Deckkraft des Widget-Hintergrunds (0 – völlig transparent, 1 – völlig undurchsichtig). Der Standardwert ist 60 % (.6). |
payment_widget_ui.lightbox.overlayBackground | string | Hintergrundfarbe der Einblendung. Standardwert ist #000000. |
payment_widget_ui.lightbox.contentBackground | string | Hintergrundfarbe des Rahmens. Standardwert ist #ffffff. Beachten Sie, dass diese Farbänderungen keinen Einfluss auf den iframe der Pay Station selbst haben, sondern nur auf die Einstellungen der Lightbox, in dem der iframe angezeigt wird. |
payment_widget_ui.lightbox.spinner | string | Art der animierten Ladeanzeige. Als Wert lässt sich entweder xsolla oder round festlegen. Standardwert ist xsolla. |
payment_widget_ui.lightbox.spinnerColor | string | Farbe des Ladekreises. Kein Wert voreingestellt. |
payment_widget_ui.childWindow | object | Einstellungen für das untergeordnete Fenster, in welchem die Zahlungsschnittstelle geöffnet ist. Funktioniert für die mobile Version. |
payment_widget_ui.childWindow.target | string | Die Eigenschaft, die bestimmt, wo das untergeordnete Fenster geöffnet werden soll. Es kann die Werte _blank, _self, _parent enthalten. Der Standardwert ist — _blank. |
Widget-Methoden
var widgetInstance = XBuyButtonWidget.create(options)– erstellen Sie die Widget-Instanz und bauen Sie sie in die Seite ein.widgetInstance.on(event, handler)– fügt einen Event-Handler für das Ereignis an das Widget an.event (string)– Ereignistyp.handler (function)– eine Funktion, die ausgeführt wird, wenn das Ereignis ausgelöst wird.
widgetInstance.off(event, handler)– entfernt einen Event-Handler.event (string)– Ereignistyp.handler (function)– eine Handler-Funktion, die zuvor für das Ereignis angehängt wurde.
Liste der Ereignisse:
| Parameter | Beschreibung |
|---|---|
| init | Widget initialisiert. |
| open | Widget geöffnet. |
| load | Zahlungsportal (Pay Station) geladen. |
| close | Zahlungsportal (Pay Station) geschlossen. |
| status | Benutzer befindet sich auf der Statusseite. |
| status-invoice | Benutzer befindet sich auf der Statusseite; Zahlung im Gange. |
| status-delivering | Benutzer befindet sich auf der Statusseite; Zahlung abgeschlossen; Zahlungsbestätigung wurde versendet. |
| status-done | Benutzer befindet sich auf der Statusseite, Zahlung wurde dem Benutzerkonto gutgeschrieben. |
| status-troubled | Benutzer befindet sich auf der Statusseite; Zahlung fehlgeschlagen. |
Sie können auf die Ereignisliste zugreifen, indem Sie das Objekt XBuyButtonWidget.eventTypes verwenden.
Individualisieren von Schaltflächen
- Öffnen Sie Ihr Projekt im Kundenportal, und navigieren Sie zum Menüpunkt Artikelkatalog > Spielschlüssel.
- Wählen Sie einen Spielschlüssel aus, und wechseln Sie zur Registerkarte Widget-Anpassung.
- Wählen Sie im Abschnitt Anpassen die Hintergrundfarbe aus.
theme im Code ändern, damit der Parameter background einen leeren String als Wert hat.- Wenn Sie den Widget Code zu Ihrer Seite hinzufügen, enthält er vererbte Stile. Fügen Sie die Stile unten ein, um diese Stile überschreiben zu können.
style unter dem script zu, den Sie auf der Registerkarte Widget-Anpassung aus Gründen der CSS-Vererbung/Priorität erhalten haben.- 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}
- Die obengenannten Namen und der Codeschnipsel werden in Verbindung mit dem kopierten Widget-Code (das Bild bei Schritt 5) verwendet. Deswegen ist es wichtig, dass die den kopierten Widget-Code implementieren.
- Sie können den oben genannten Code so verwenden, wie er ist, oder ihn auf Ihr Szenario anpassen. Die Code-Kommentare (Zeilen 1, 3, 5, 11, 16, 18, 22, 29) sind dazu da, um festzulegen, worauf die einzelnen CSS-Regeln ausgerichtet sind, und helfen bei der künftigen Gestaltung. Wenn Sie z. B. nur die Schaltfläche (und nicht das gesamte Widget) haben möchten, müssen Sie die Hintergrundfarbe Ihrer Seite an den folgenden Stellen ersetzen, wo die Farbe ist
white— Zeilen 20 und 27.
So erstellen Sie mehrere Schaltflächen oder SKUs.
Sie können unter Xsolla Pay2Play-Widget – einfache Integration von 4 Schaltflächen ein Code-Muster für die Erstellung mithilfe des Pay2Play Widgets finden.
Die Struktur ist ähnlich wie beim Code für das Kaufschaltflächen-Widget. Hier ein Beispiel für eine 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>
- Zeilen 1 und 2 - ein
divpro Schaltfläche, jede mit einer eindeutigen ID. - Beginnend mit Zeile 26 sind die Optionen für die zweite Schaltfläche (festgelegt im
options2-Objekt) zu finden. Sie benötigen einen Satz vonoptions, wie diejenigen im obigen Beispiel für jede Kauf-Schaltfläche. Achten Sie auf die Unterschiede imsku(Zeile 28) undtarget_element(Zeile 34, mit Ziel aufdivin Zeile 2).
Haben Sie einen Tippfehler oder einen anderen Textfehler gefunden? Wählen Sie den Text aus und drücken Sie Strg+Eingabe.