エクソラウェブフックを受信する

購入処理の際、エクソラは様々なイベントを通知するためにウェブフックを送信します(例:支払いのキャンセル、カート内容の取得)。これらのウェブフックを使って以下のことができます:

  • 独自のソリューションでもサードパーティのソリューションでも、プレーヤーのインベントリに購入品を追加することができます。
  • 情報の記録、報酬の付与、注文の割引などを行うように注文を検証および処理するための独自のロジックを実装します。

BaaS側でウェブフックを受信するには、FirebasePlayFabの手順に従って、すぐに使える機能をプロジェクトに追加します。

Firebaseプロジェクトにクラウド機能を追加する

  1. Firebaseプロジェクトを初期化します
  2. ウェブフック受信機能をインポートします。この機能で、<WebhookSecretKey>は、プロジェクト設定> ウェブフックセクションのパブリッシャーアカウントにある秘密鍵です。

ウェブフックを受信するための機能コード:

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. ウェブフックを処理するためのロジックを実装します。

お知らせ
この機能は、購入時のカート内容の取得支払いのキャンセルに関連するウェブフックを受信するために作成されています。決済ページで他のイベントに関連するウェブフックの処理を自分で実装できます。

  1. この例のように、機能を実稼働環境に配備します。
  2. FirebaseのコンソールでBuild > Functionsに移動し、ウェブフック受信機能のURLをコピーします。
  3. パブリッシャーアカウントであなたのプロジェクトを開きます。
  4. プロジェクト設定 > ウェブフックに移動します。
  5. ウェブフックURLフィルドで、ウェブフック受信機能のURLを指定します。

PlayFabプロジェクトにクラウドスクリプトを追加する

お知らせ
PlayFabクラウドスクリプトはHTTPトリガーを持つ機能を直接サポートしていないため、Azure機能を使用してウェブフックの受信を実装します。

  1. Azure機能を使用するための開発環境を準備します。
  2. に従って、ウェブフックを受信するための機能を追加します。この機能内で、<WebhookSecretKey>は、プロジェクト設定> ウェブフックセクションのパブリッシャーアカウントにある秘密鍵です。

ウェブフックを受信するための機能コード:

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. ウェブフックを処理するためのロジックを実装します。

お知らせ
この機能は、購入時のカート内容の取得支払いのキャンセルに関連するウェブフックを受信するために作成されています。決済ページで他のイベントに関連するウェブフックの処理を自分で実装できます。

  1. 機能を実稼働環境に配備します
  2. 機能URLをコピーします
  3. あなたのPlayFab プロジェクトに移動します。
  4. クラウドスクリプト機能を登録します
  5. パブリッシャーアカウントであなたのプロジェクトを開きます。
  6. プロジェクト設定 > ウェブフックに移動します。
  7. ウェブフックURLフィルドで、ウェブフック受信機能のURLを指定します。

この記事は役に立ちましたか?
ありがとうございます!
改善できることはありますか? メッセージ
申し訳ありません
この記事が参考にならなかった理由を説明してください。 メッセージ
ご意見ありがとうございました!
あなたのメッセージを確認し、体験を向上させるために利用させていただきます。
このページを評価する
このページを評価する
改善できることはありますか?

答えたくない

ご意見ありがとうございました!
最終更新日: 2022年10月21日

誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。

問題を報告する
当社は常にコンテンツを見直しています。お客様のご意見は改善に役立ちます。
フォローアップ用のメールをご提供してください
ご意見ありがとうございました!