Xsolla-Webhooks empfangen

Bei der Abwicklung eines Kaufs sendet Xsolla Webhooks, um über verschiedene Ereignisse zu informieren (z. B. Zahlungsstornierung, Abruf des Warenkorbinhalts). Mit diesen Webhooks können Sie:

  • Käufe zum Spielerinventar hinzufügen, ganz gleich, ob Sie Ihre eigene Lösung oder die Lösung eines Drittanbieters nutzen.
  • Ihre eigene Logik für die Überprüfung und Verarbeitung einer Bestellung implementieren, um Informationen zu protokollieren, Belohnungen für oder Rabatte bei einer Bestellung zu gewähren, usw.

Um Webhooks aufseiten des BaaS empfangen zu können, fügen Sie Ihrem Projekt gebrauchsfertige Funktionen hinzu. Befolgen Sie dazu die Anweisungen für Firebase und PlayFab.

Cloud Function zum Firebase-Projekt hinzufügen

  1. Initialisieren Sie Ihr Firebase-Projekt.
  2. Importieren Sie die Webhook-Empfangsfunktion, wobei <WebhookSecretKey> dem geheimen Schlüssel entspricht. Diesen finden Sie im Kundenportal unter Projekteinstellungen > Webhooks.

Funktionscode für den Empfang von Webhooks:

Copy
Full screen
Small screen
const webhookSecretKey = "<WebhookSecretKey>";

exports.webhook = functions.https.onRequest((request, response) => {
  const requestRawBody = request.rawBody.toString("utf-8");
  const crypto = require("crypto");
  const sig = "Signature " + crypto
      .createHash("sha1")
      .update(requestRawBody + webhookSecretKey)
      .digest("hex");
  if (request.headers.authorization !== sig) {
    response.status(401).send();
    return;
  }

  // TODO Replace this block with your game's logic for purchases handling
  switch (request.body.notification_type) {
    case "order_paid": {
      const userId = request.body.user.external_id;
      const skus = request.body.items.map(function(it) {
        return it.sku;
      }).join(", ");
      const price =
          `${request.body.order.amount} ${request.body.order.currency}`;
      functions.logger.log(
          "Order Paid\n",
          `A user ${userId} has just paid ${price} for ${skus}\n`,
          "Full Data\n",
          request.body
      );
      break;
    }
    case "order_canceled": {
      const userId = request.body.user.external_id;
      const orderId = request.body.order.id;
      functions.logger.log(
          "Order Canceled\n",
          `A user ${userId} has just canceled order ${orderId}\n`,
          "Full Data\n",
          request.body
      );
      break;
    }
  }

  response.status(204).send();
});

  1. Implementieren Sie die Logik für das Handling von Webhooks.

Note
Die Funktion ist für den Empfang von Webhooks beim Abrufen des Warenkorbinhalts beim Kauf und bei einer Zahlungsstornierung gedacht. Sie können die Verarbeitung von Webhooks im Zusammenhang mit anderen Ereignissen auf der Zahlungsseite eigenständig implementieren.

  1. Stellen Sie die Funktion, wie in diesem Beispiel gezeigt, in einer Produktionsumgebung bereit.
  2. Navigieren Sie in der Firebase-Konsole zu Build > Functions, und kopieren Sie die URL der Webhooks-Empfangsfunktion.
  3. Öffnen Sie Ihr Projekt im Kundenportal.
  4. Navigieren Sie zu Projekteinstellungen > Webhooks.
  5. Geben Sie im Feld Webhook-URL die URL der Webhooks-Empfangsfunktion ein.

Cloud Script zum PlayFab-Projekt hinzufügen

Note
PlayFab Cloud Scripts unterstützen Funktionen mit HTTP-Triggern nur indirekt, daher werden Azure-Funktionen genutzt, um den Empfang von Webhooks zu implementieren.

  1. Bereiten Sie die Entwicklungsumgebung vor, um Azure Functions nutzen zu können.
  2. Fügen Sie dem Beispiel folgend eine Funktion für den Empfang von Webhooks hinzu, wobei <WebhookSecretKey> dem geheimen Schlüssel entspricht. Diesen finden Sie im Kundenportal unter Projekteinstellungen > Webhooks.

Funktionscode für den Empfang von Webhooks:

Copy
Full screen
Small screen
const webhookSecretKey = "<WebhookSecretKey>";

module.exports = async function (context, request) {
    const requestRawBody = request.rawBody.toString("utf-8");
    const crypto = require("crypto");
    const sig = "Signature " + crypto
        .createHash("sha1")
        .update(requestRawBody + webhookSecretKey)
        .digest("hex");
    if (request.headers.authorization !== sig) {
        context.res = {
            status: 401
        };
        return;
    }

    // TODO Replace this block with your game's logic for purchases handling
    switch (request.body.notification_type) {
        case "order_paid": {
            const userId = request.body.user.external_id;
            const skus = request.body.items.map(function (it) {
                return it.sku;
            }).join(", ");
            const price =
                `${request.body.order.amount} ${request.body.order.currency}`;
            context.log(
                "Order Paid\n" +
                `A user ${userId} has just paid ${price} for ${skus}\n` +
                "Full Data\n" +
                JSON.stringify(request.body)
            );
            break;
        }
        case "order_canceled": {
            const userId = request.body.user.external_id;
            const orderId = request.body.order.id;
            context.log(
                "Order Canceled\n" +
                `A user ${userId} has just canceled order ${orderId}\n` +
                "Full Data\n" +
                JSON.stringify(request.body)
            );
            break;
        }
    }

    context.res = {
        status: 204
    };
}

  1. Implementieren Sie die Logik für das Handling von Webhooks.

Note
Die Funktion ist für den Empfang von Webhooks beim Abrufen des Warenkorbinhalts beim Kauf und bei einer Zahlungsstornierung gedacht. Sie können die Verarbeitung von Webhooks im Zusammenhang mit anderen Ereignissen auf der Zahlungsseite eigenständig implementieren.

  1. Stellen Sie die Funktion in einer Produktionsumgebung bereit.
  2. Kopieren Sie die Funktions-URL.
  3. Wechseln Sie zu Ihrem PlayFab-Projekt.
  4. Registrieren Sie die Cloud Script-Funktion.
  5. Öffnen Sie Ihr Projekt im Kundenportal.
  6. Navigieren Sie zu Projekteinstellungen > Webhooks.
  7. Geben Sie im Feld Webhook-URL die URL der Webhooks-Empfangsfunktion ein.

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.
Diese Seite bewerten
Diese Seite bewerten
Gibt es etwas, das wir verbessern können?

Jetzt nicht

Vielen Dank für Ihr Feedback!
Letztmalig aktualisiert: 16. Februar 2022

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!