Katalog importieren

Erstellen und aktualisieren Sie einen Artikelkatalog durch einen JSON-Import

Sie können Artikel aus einer JSON-Datei importieren und so die Artikel erstellen, aktualisieren oder deaktivieren.

Hinweis
Sie können Artikel durch API-Aufrufe oder manuell im Kundenportal erstellen, aktualisieren oder deaktivieren. Allerdings müssen Sie für jeden Artikel eine separate Anfrage stellen oder Aktion durchführen. Beim Import können Sie diese Aktionen für mehrere Artikel gleichzeitig durchführen, indem Sie die Artikel in einer einzigen JSON-Datei angeben.

Dadurch können Sie:

Merkmale:

  • Unterstützung für die folgenden Artikeltypen:
    • virtuelle Gegenstände
    • virtuelle Währung
    • virtuelle Währungspakete
    • Bundles
  • Datenüberprüfung. Wenn die Dateistruktur oder das Datenformat den Anforderungen nicht entspricht, wird beim Importieren eine Liste mit Fehlern angezeigt.

Einschränkungen:

Hinweis
Für vorab erstellte Artikel können Sie regionale Preise aus einer CSV-Datei importieren.

Artikelkatalog importieren

So importieren Sie einen Artikel aus einer Datei:

  1. Öffnen Sie das Projekt im Kundenportal.
  2. Klicken Sie in der Seitenleiste auf Store und dann auf Virtuelle Währung, Virtuelle Gegenstände oder Bundles.
  3. Klicken Sie auf Artikel importieren.

  1. Wählen Sie eine Aktion:
    • Neue Artikel hinzufügen – nur Artikel mit neuen SKUs werden hinzugefügt.
    • Neue Artikel hinzufügen und vorhandene Artikel aktualisieren – Artikel mit neuen SKUs werden hinzugefügt und die Daten vorhandener Artikel werden aktualisiert.
    • Neue Artikel hinzufügen, vorhandene Artikel aktualisieren und fehlende Artikel deaktivieren – Artikel mit SKUs aus der Datei werden hinzugefügt/aktualisiert. Wenn ein Artikel im Katalog vorhanden ist, aber keine SKU in der Datei hinterlegt ist, wird der Status des Artikels im Kundenportal in Teilweise verfügbar geändert, d. h., der Artikel kann nicht einzeln gekauft werden, ist aber als Teil eines Bundles oder eines Bonus erhältlich.

  1. Vervollständigen Sie die Datei für den Import:
    • Laden Sie die Dateivorlage im Download-Fenster herunter und vervollständigen Sie diese gemäß dem unten stehenden Beispiel.
    • Exportieren Sie die Artikel und verwenden Sie die exportierte Datei als Vorlage.
    • Erstellen Sie Ihre eigene JSON-Datei und vervollständigen Sie diese gemäß dem unten stehenden Beispiel.

Vervollständigte JSON-Datei (Beispie):

Copy
Full screen
Small screen

{
    "virtual_currency": [
        {
            "sku": "Gem_test_import",
            "name": {
                "en": "Gem_test_import"
            },
            "type": "virtual_currency",
            "description": {
                "en": "my test imported currency"
            },
            "image_url": "https://cdn3.xsolla.com/img/misc/merchant/default-dc-image.png",
            "description": {
                "en": "my test imported currency",
                "de": "meine importierte Testwährung"
            },
            "attributes": [],
            "is_free": false,
            "order": 1,
            "groups": [],
            "regional_prices": [],
            "prices": [
                {
                    "amount": 2,
                    "currency": "USD",
                    "is_default": true,
                    "is_enabled": true
                }
            ],
            "media_list": [],
            "vc_prices": [],
            "is_enabled": true,
            "is_show_in_store": true,
            "regions": [],
            "limits": {
                "per_user": null,
                "per_item": null,
                "recurrent_schedule": null
            },
            "periods": [],
            "inventory_options": {
                "consumable": true,
                "expiration_period": null
            },
            "is_hard": false
        }
    ],
    "virtual_items": [
        {
            "sku": "event_access_test_import",
            "name": {
                "en": "Special Event Access_test_import"
            },
            "type": "virtual_good",
            "description": {
                "en": "Get special event access as a bonus only on your first purchase. Find the right doggy at the Robo-Dog Exhibition!"
            },
            "image_url": "https://cdn3.xsolla.com/img/misc/images/1e3ef1a96cc9dd8d98bc124d5d6fad79.png",
            "long_description": null,
            "attributes": [],
            "is_free": false,
            "order": 1,
            "groups": [
                "my_test_group"
            ],
            "regional_prices": [],
            "prices": [
                {
                    "amount": 35,
                    "currency": "USD",
                    "is_default": true,
                    "is_enabled": true
                }
            ],
            "media_list": [],
            "vc_prices": [],
            "is_enabled": true,
            "is_show_in_store": true,
            "regions": [],
            "limits": {
                "per_user": null,
                "per_item": null,
                "recurrent_schedule": null
            },
            "periods": [],
            "inventory_options": {
                "consumable": true,
                "expiration_period": null
            }
        }
    ],
    "virtual_currency_packages": [
        {
            "item_id": 441982,
            "sku": "small_gold_pack_test_import",
            "type": "bundle",
            "name": {
                "en": "Small gold pack"
            },
            "bundle_type": "virtual_currency_package",
            "description": {
                "en": "Gold x100"
            },
            "image_url": "https://cdn3.xsolla.com/img/misc/images/ba43c46ea75fd5713c210f5736993a92.png",
            "vc_prices": [],
            "regional_prices": [],
            "prices": [
                {
                    "amount": 5,
                    "currency": "USD",
                    "is_default": true,
                    "is_enabled": true
                }
            ],
            "is_enabled": true,
            "is_show_in_store": true,
            "regions": [],
            "limits": {
                "per_user": null,
                "per_item": null,
                "recurrent_schedule": null
            },
            "periods": [],
            "attributes": [],
            "long_description": null,
            "media_list": [],
            "order": 100000000,
            "is_free": false,
            "groups": [],
            "content": [
                {
                    "sku": "Gem_test_import",
                    "quantity": 100
                }
            ]
        }
    ],
    "bundles": [
        {
            "item_id": 684024,
            "sku": "start_pack_test_import_test_import",
            "type": "bundle",
            "name": {
                "en": "Legendary Start Pack"
            },
            "bundle_type": "standard",
            "description": {
                "en": "Crystal x 1\nGem x 1"
            },
            "image_url": "https://cdn3.xsolla.com/img/misc/merchant/default-dc-image.png",
            "regional_prices": [],
            "prices": [
                {
                    "amount": 20,
                    "currency": "USD",
                    "is_default": true,
                    "is_enabled": true
                }
            ],
            "virtual_prices": [],
            "is_enabled": true,
            "is_show_in_store": true,
            "regions": [],
            "limits": {
                "per_user": null,
                "per_item": null,
                "recurrent_schedule": null
            },
            "periods": [],
            "attributes": [],
            "long_description": null,
            "media_list": [],
            "order": 5,
            "is_free": false,
            "groups": [
                "my_test_group"
            ],
            "content": [
                {
                    "sku": "Gem_test_import",
                    "quantity": 1
                },
                {
                    "sku": "event_access_test_import",
                    "quantity": 1
                }
            ]
        }
    ]
}

  1. Laden Sie die vervollständigte Datei in das entsprechende Feld im Importfenster hoch.
  2. Wenn beim Import Fehler auftreten, wird im Importfenster eine Liste dieser Fehler mitsamt Korrekturmaßnahmen angezeigt. Nehmen Sie die erforderlichen Änderungen an der Datei vor, und laden Sie diese erneut hoch.

Nach erfolgreichem Upload werden die Artikel mit den angegebenen SKUs erstellt, aktualisiert oder deaktiviert.

Artikelkatalog exportieren

So exportieren Sie einen Artikel oder den Artikelkatalog als JSON-Datei:

  1. Öffnen Sie das Projekt im Kundenportal.
  2. Klicken Sie in der Seitenleiste auf Store und dann auf Virtuelle Währung, Virtuelle Gegenstände oder Bundles.
  3. Klicken Sie auf Artikel exportieren.

  1. Wählen Sie eine Aktion:
    • Alle Artikel exportieren – der gesamte Katalog mit allen Projektartikeln wird exportiert. Wenn Sie zum Beispiel zum Abschnitt Virtuelle Währung navigieren und alle Artikel exportieren, werden die virtuellen Währungen, die virtuellen Währungspakete, die virtuellen Gegenstände und die Spielschlüsselpakete des Projekts in die JSON-Datei geschrieben.
    • Nur ausgewählte Artikel exportieren – wählen Sie in dem sich öffnenden Fenster die zu exportierenden Artikel aus.

  1. Klicken Sie auf Exportieren.

Daraufhin startet automatisch der Download der JSON-Datei.

Katalog aus externen Plattformen importieren

Sie können Artikel und Abonnements aus externen Plattformen importieren und das Benutzerinventar synchronisieren.

Achtung
Nach dem Import können Sie die getätigten Änderungen am Artikelkatalog und den Abonnements in der Importquelle und in Xsolla auf folgende Weise synchronisieren:Lässt sich der Katalog nicht importieren, konfigurieren Sie den Artikel- und Abonnementkatalog im Kundenportal oder mithilfe von API-Methoden.

Katalog aus Google Play importieren

Achtung

Prüfen Sie, ob die Google Play Android Developer API in Ihrem Google Play-Projekt aktiviert ist, bevor Sie den Import starten. Besuchen Sie https://console.developers.google.com/apis/api/androidpublisher.googleapis.com/overview?project={project_id}, wobei project_id Ihre Projekt-ID in Google Play ist. Falls die API deaktiviert ist, müssen Sie diese aktivieren. Es dauert eine Weile, bis die Einstellungen übernommen sind. Daher kann der Import fehlschlagen, wenn Sie sofort nach der Aktivierung versuchen, den Import zu starten. Warten Sie einige Minuten, und versuchen Sie es dann erneut.

  1. Öffnen Sie Ihr Projekt im Kundenportal.
  2. Klicken Sie im seitlichen Menü auf Online-Shop.
  3. Klicken Sie im Bereich Katalogverwaltung auf Konfigurieren.
  4. Klicken Sie im Bereich Integration in externe Plattformen auf Konfigurieren.
  5. Klicken Sie im Bereich Google Play auf Konfigurieren.
  6. Geben Sie Ihre Anwendungs-ID an – die ID Ihrer Anwendung aus Google Play.
Hinweis
Die Anwendungs-ID finden Sie in der Google Play Console. Klicken Sie dazu im seitlichen Menü auf Alle Apps. Suchen Sie in der Tabelle nach der gewünschten Anwendung. Die zugehörige ID ist in der Spalte App, neben dem Namen und dem Logo, angegeben.
  1. Laden Sie einen privaten Schlüssel als JSON hoch.
Hinweis
Ein privater Schlüssel wird generiert, wenn Sie Ihr Dienstkonto erstellen.

  1. Wechseln Sie zur Google Play Console, klicken Sie in der Seitenleiste auf Nutzer und Berechtigungen, und fügen Sie ein Dienstkonto als neuer Nutzer hinzu.

  1. Klicken Sie auf Speichern.
  2. Klicken Sie auf Import starten. Daraufhin beginnt der Katalogimport.
Hinweis
Die SKU entspricht der Produkt-ID aus der Importquelle.
  1. Um virtuelle Gegenstände in dem über den Site Builder erstellten Web Shop zu verkaufen, konfigurieren Sie Gegenstandsgruppen im Kundenportal und weisen Sie jedem Gegenstand mindestens eine der konfigurierten Gruppen zu.
  2. Um die Gegenstandsbilder anzuzeigen, müssen Sie sie im Kundenportal zunächst hochladen.
Hinweis
Für Nutzer aus Bangladesch werden die Katalogpreise in der Standardwährung (USD) anstatt in BDT angezeigt.

Katalog aus PlayFab importieren

Achtung
Unterstützte PlayFab-API-Version: Economy v1.

PlayFab bietet Spieleentwicklern fertige Serverlösungen für die Verwaltung von Katalogen und für die Monetarisierung. Nach der Integration von PlayFab können Sie einen Katalog aus PlayFab in Xsollas Store-Lösung importieren.

Hinweis
Sie benötigen eine Projekt-ID und einen geheimen Schlüssel in PlayFab. Außerdem sollte der Katalog, den Sie in Xsolla importieren möchten, in PlayFab als “Base” eingerichtet sein.

  1. Öffnen Sie Ihr Projekt im Kundenportal.
  2. Klicken Sie im seitlichen Menü auf Online-Shop.
  3. Klicken Sie im Bereich Katalogverwaltung auf Konfigurieren.
  4. Klicken Sie im Bereich Integration in externen Plattformen auf Konfigurieren.
  5. Klicken Sie im Bereich PlayFab auf Konfigurieren.
  6. Geben Sie auf der Registerkarte Artikelimport Folgendes an:
  7. Klicken Sie auf Speichern.
  8. Synchronisieren Sie das Benutzerinventar mit PlayFab (optional):
    1. Wechseln Sie zur Registerkarte Inventarsynchronisierung und geben Sie Folgendes an:
    2. Stellen Sie den Umschalter Benutzerinventar mit PlayFab synchronisieren auf Ein.
    3. Klicken Sie auf Speichern.
  9. Wechseln Sie zur Registerkarte Artikelimport, und klicken Sie auf Import starten. Daraufhin beginnt der Katalogimport.
  10. Um virtuelle Gegenstände in dem über den Site Builder erstellten Web Shop zu verkaufen, konfigurieren Sie Gegenstandsgruppen im Kundenportal und weisen Sie jedem Gegenstand mindestens eine der konfigurierten Gruppen zu.
  11. Um die Gegenstandsbilder anzuzeigen, müssen Sie sie im Kundenportal zunächst hochladen.

Um zu prüfen, ob der Import erfolgreich abgeschlossen wurde, wechseln Sie über das seitliche Menü zum Abschnitt Online-Shop, und stellen Sie sicher, dass Gegenstände, Währungen und Bundles auf den Registerkarten Virtuelle Währung, Virtuelle Gegenstände und Bundles aktiviert sind.

Achtung
Bedenken Sie bitte beim Überprüfen der Importergebnisse, dass ein virtuelles Währungspaket einem Bundle entspricht, das nur eine Währung enthält. PlayFab verwendet die virtuelle Währung RM (Real Money), die der realen Währung entspricht: 1 Cent (100 RM = 1 USD). Wenn Sie beispielsweise 400 RM aus PlayFab importieren, werden 4 USD im Kundenportal angezeigt.

Katalog neu importieren

Wenn Sie einen Katalog neu importieren, ist Folgendes zu beachten:

  • Bereits im Online-Shop befindliche Artikel werden aktualisiert.
  • Noch nicht im Online-Shop befindliche Artikel werden hinzugefügt.
  • Aus der Importquelle entfernte Artikel verbleiben im Online-Shop. Solche Artikel können Sie im Kundenportal oder über die API löschen.

Artikel automatisch über API erstellen

Wenn Sie eine Vielzahl von Artikeln auf der Grundlage von Daten aus Ihrem System erstellen müssen, können Sie den Vorgang mithilfe der API automatisieren.

Dazu müssen Sie:

Wenn Sie Gegenstandsgruppen verwenden möchten, müssen Sie diese im Voraus im Kundenportal erstellen.

Wenn Sie mehrere Artikeltypen verwenden möchten, sollten diese in der folgenden Reihenfolge erstellt werden:

  1. Gegenstandsgruppen im Kundenportal
  2. virtuelle Währungen
  3. virtuelle Gegenstände
  4. virtuelle Währungspakete
  5. Bundles

Nachfolgend sehen Sie ein Beispielskript, das wiederholt die Methode Virtuellen Gegenstand erstellen aufruft, um virtuelle Gegenstände zu erstellen.

Das Skript wurde mit JavaScript und Node.js, der JavaScript-Laufzeitumgebung, entwickelt.

  1. Importieren Sie die fetch-Funktion des Moduls “node-fetch”, um HTTP-Anfragen an den Xsolla-Server senden zu können.
Copy
Full screen
Small screen
import fetch from "node-fetch";
  1. Legen Sie die für die Anfrageautorisierung benötigten Konstanten fest. Fügen Sie anstelle von <your project_id from PA> und <your api key from PA> Ihre Werte für die Projekt-ID und den API-Schlüssel ein, die für die spätere Verwendung in API-Anfragen mit Base64 kodiert werden.
Copy
Full screen
Small screen
const projectId = <your project_id from PA>;

const apiKey = <your api key from PA>;

const buff = new Buffer(`${projectId}:${apiKey}`);

const basicAuth = buff.toString('base64')
  1. Implementieren Sie die Hilfsfunktion sleep. Diese dient dazu, das Senden von Anfragen zu verzögern. Das ist notwendig, um die Ratenbegrenzung bei API-Anfragen nicht zu überschreiten.
Copy
Full screen
Small screen
function sleep(ms) {

   return new Promise(resolve => setTimeout(resolve, ms));

}
  1. Implementieren Sie die Funktion getItems, um Artikeldaten aus Ihrem System abzurufen.
Copy
Full screen
Small screen
async function getItems() {

   // receive items from the original system or read from a pre-prepared file

   return items;

}
  1. Implementieren Sie die für Ihr System spezifische Funktion prepareData, um die Artikeldaten gemäß dem erforderlichen Datenformat des API-Aufrufs Virtuellen Gegenstand erstellen zu formatieren.
Copy
Full screen
Small screen
function prepareData(items) {

   // format items in accordance with API requirements

   return formattedItems;

}
  1. Ergänzen Sie die Funktion createItem. Diese Funktion sendet eine POST-Anfrage an die Xsolla-API, um einen virtuellen Gegenstand zu erstellen.
Copy
Full screen
Small screen
async function createItem(item) {

   const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items`;



   return await fetch(url, {

       method: "POST",

       headers: {

           Authorization: "Basic " + basicAuth,

           "Content-Type": "application/json"

       },

       body: JSON.stringify(item),

   });

}
  1. Ergänzen Sie die Funktion checkItemExist, um zu prüfen, ob ein virtueller Gegenstand mit der angegebenen SKU existiert. Die Funktion sendet eine GET-Anfrage an die Xsolla-API:
    • Enthält die Antwort den HTTP-Statuscode 404, wurde der Gegenstand mit der angegebenen SKU nicht gefunden und muss erstellt werden.
    • Enthält die Antwort den HTTP-Statuscode 200, wurde der Gegenstand mit der angegebenen SKU gefunden und muss nicht erstellt werden.
Copy
Full screen
Small screen
async function checkItemExist(sku) {

   const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items/sku/${sku}`;

   const response = await fetch(url, {

       method: "GET",

       headers: {

           Authorization: "Basic " + basicAuth

       }

   });

   return response.status !== 404;

}
  1. Ergänzen Sie die Funktion createItems, die die Liste der Gegenstände durchgeht und prüft, ob es aufseiten von Xsolla einen Gegenstand mit einer SKU aus Ihrem System gibt. Wurde kein Gegenstand mit einer solchen SKU gefunden, erstellt die Funktion einen Gegenstand. Der Fortschritt wird in der Konsole angezeigt.
Copy
Full screen
Small screen
async function createItems(items) {

   let success = 0;

   let alreadyCreated = 0;

   for (let i = 0; i < items.length; i++) {

       const item = items[i];

       if (item['sku'] === undefined) {

           console.log(`${i} Field "sku" not specified`);

           continue;

       }

       const sku = item['sku'];

       if (await checkItemExist(sku)) {

           console.log(`${i} Item with sku "${sku}" already created`);

           alreadyCreated++;

           continue;

       }

       const response = await createItem(item);

       if (response.status === 201) {

           console.log(`${i} Item with sku "${sku}" successfully created`)

           success++;

       } else {

           const jsonData = await response.json();

           console.log(`${i} An error occurred while creating the items with sku "${sku}"`);

           console.log(jsonData);

       }

       // add a delay so as not to run into rate limits

       await sleep(500);

   }

   console.log(`${success} items out of ${items.length} created. ${alreadyCreated} items already existed`);

}
  1. Ergänzen Sie die Funktion run. Diese Funktion ruft alle oben genannten Funktionen in der richtigen Reihenfolge auf.
Copy
Full screen
Small screen
async function run() {

 const items = await getItems();

 const formattedItems = prepareData(items);

 await createItems(formattedItems);

}

Der vollständige Code:

Copy
Full screen
Small screen
import fetch from "node-fetch";

const projectId = <your project_id from PA>;
const apiKey = <your api key from PA>;
const buff = new Buffer(`${projectId}:${apiKey}`);
const basicAuth = buff.toString('base64')

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function getItems() {
    // receive items from the original system or read from a pre-prepared file
    return items;
}

function prepareData(items) {
    // format items in accordance with API requirements
    return formatedItems;
}

async function createItem(item) {
    const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items`;

    return await fetch(url, {
        method: "POST",
        headers: {
            Authorization: "Basic " + basicAuth,
            "Content-Type": "application/json"
        },
        body: JSON.stringify(item),
    });
}

async function isItemExisted(sku) {
    const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items/sku/${sku}`;
    const response = await fetch(url, {
        method: "GET",
        headers: {
            Authorization: "Basic " + basicAuth
        }
    });
    return response.status !== 404;
}

async function createItems(items) {
    let success = 0;
    let alreadyCreated = 0;
    for (let i = 0; i < items.length; i++) {
        const item = items[i];
        if (item['sku'] === undefined) {
            console.log(`${i} Field "sku" not specified`);
            continue;
        }
        const sku = item['sku'];
        if (await isItemExisted(sku)) {
            console.log(`${i} Item with sku "${sku}" already created`);
            alreadyCreated++;
            continue;
        }
        const response = await createItem(item);
        if (response.status === 201) {
            console.log(`${i} Item with sku "${sku}" successfully created`)
            success++;
        } else {
            const jsonData = await response.json();
            console.log(`${i} An error occurred while creating the items with sku "${sku}"`);
            console.log(jsonData);
        }
        // add a delay so as not to run into rate limits
        await sleep(500);
    }
    console.log(`${success} items out of ${items.length} created. ${alreadyCreated} items already existed`);
}

async function run() {
  const items = await getItems();
  const formattedItems = prepareData(items);
  await createItems(formattedItems);
}

run(); 
War dieser Artikel hilfreich?
Vielen Dank!
Gibt es etwas, das wir verbessern können? Nachricht
Das tut uns leid
Bitte erläutern Sie, weshalb dieser Artikel nicht hilfreich ist. Nachricht
Vielen Dank für Ihr Feedback!
Wir werden Ihr Feedback aufgreifen und dazu nutzen, Ihr Erlebnis verbessern.
Letztmalig aktualisiert: 8. November 2024

Haben Sie einen Tippfehler oder einen anderen Textfehler gefunden? Wählen Sie den Text aus und drücken Sie Strg+Eingabe.

Problem melden
Wir überprüfen unsere Inhalte ständig. Ihr Feedback hilft uns, sie zu verbessern.
Geben Sie eine E-Mail-Adresse an, damit wir Sie erreichen können
Vielen Dank für Ihr Feedback!