Recevoir des webhooks Xsolla

Lors du traitement d’un achat, Xsolla envoie des webhooks pour notifier divers événements (l’annulation d’un paiement, l’obtention du contenu du panier, etc.). Vous pouvez utiliser ces webhooks pour :

  • ajouter des achats à l’inventaire du joueur, que vous utilisiez votre propre solution ou une solution tierce ;
  • implémenter votre propre logique de vérification et de traitement de commande pour enregistrer des informations, octroyer des récompenses, accorder des remises sur des commandes, etc.

Pour recevoir des webhooks côté BaaS, ajoutez des fonctions préprogrammées à votre projet en suivant les instructions Firebase et PlayFab.

Ajouter une fonction cloud au projet Firebase

  1. Initialisez votre projet Firebase.
  2. Importez la fonction de réception des webhooks, dans laquelle <WebhookSecretKey> est la clé secrète, qui se trouve dans le Compte éditeur sous la section Project settings > Webhooks.

Code de la fonction de réception des 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. Implémentez la logique de gestion des webhooks.
Note
La fonction est conçue pour recevoir des webhooks relatifs à l’obtention du contenu du panier lors d’un achat et à l’annulation d’un paiement. Vous pouvez implémenter vous-même le traitement des webhooks liés à d’autres événements sur la page de paiement.
  1. Déployez la fonction dans un environnement de production conformément à cet exemple.
  2. Dans la console Firebase, accédez à Build > Functions et copiez l'URL de la fonction de réception des webhooks.
  3. Ouvrez votre projet dans le Compte éditeur.
  4. Accédez à Project Settings > Webhooks.
  5. Dans le champ Webhook server, spécifiez l'URL de la fonction de réception des webhooks.

Ajouter un script cloud au projet PlayFab

Note
Les scripts cloud PlayFab ne prennent pas directement en charge les fonctions avec des déclencheurs HTTP. Azure Functions est donc utilisée pour implémenter la réception des webhooks.

  1. Préparez l'environnement de développement pour utiliser Azure Functions.
  2. En suivant l'exemple, ajoutez une fonction de réception des webhooks, dans laquelle <WebhookSecretKey> est la clé secrète, qui se trouve dans le Compte éditeur sous la section Project settings > Webhooks.

Code de la fonction de réception des 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. Implémentez la logique de gestion des webhooks.
Note
La fonction est conçue pour recevoir des webhooks relatifs à l’obtention du contenu du panier lors d’un achat et à l’annulation d’un paiement. Vous pouvez implémenter vous-même le traitement des webhooks liés à d’autres événements sur la page de paiement.
  1. Déployez la fonction dans un environnement de production.
  2. Copiez l'URL de la fonction.
  3. Accédez à votre projet PlayFab.
  4. Enregistrez la fonction de script cloud.
  5. Ouvrez votre projet dans le Compte éditeur.
  6. Accédez à Project Settings > Webhooks.
  7. Dans le champ Webhook server, spécifiez l'URL de la fonction de réception des webhooks.
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.
Évaluer cette page
Évaluer cette page
Que pouvons-nous améliorer ?

Préfère ne pas répondre

Merci pour votre commentaire !
Dernière mise à jour: 22 Janvier 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 !