コールバックの追加と削除

このガイドでは、Google Wallet API でのコールバックの使用方法について説明します。パスが作成または削除されると、Google はユーザーが選択した HTTPS エンドポイントに対してコールバックを実行できます。このコールバックはクラス固有で、クラス、オブジェクト、イベントタイプなどのイベントに関するデータが含まれています。これを使用すると、ユーザーの追加数や削除数を追跡できます。たとえば、イベントを分析アプリケーションに送信するようにコールバックを設定して、プロモーション イベント中の顧客エンゲージメントを追跡できます。

前提条件

始める前に、次の前提条件を確認してください。

  • POST リクエストを処理する HTTPS エンドポイントを起動します。このエンドポイントは一般公開する必要があります。
  • 各クラスのコールバック エンドポイントをプログラムで更新します。REST API で、クラス別の callbackOptions プロパティをご確認ください。
  • (推奨)Tink ライブラリを使用して署名の検証を行います。

コールバックを実装する

ユーザーがオブジェクトに対して追加や削除を行うたびに、Google が販売者に対してコールバックを実行し、クラスごとの URL に対する追加や削除に関する詳細情報を提供します。販売者は、まず公開鍵を使用してメッセージの信頼性を確認する必要があります。コールバックがメッセージを確認した後で、そのコールバックをダウンストリームのオペレーションに使用できます。

署名の検証

HTTPS エンドポイントを実装する場合は、Tink ライブラリを使用してメッセージの署名を検証することをおすすめします。Tink ライブラリPaymentMethodTokenRecipient ユーティリティにより、署名が自動的に検証され、検証に成功すると実際のメッセージが返されます。

次の例では、Tink ライブラリを使用して PaymentMethodTokenRecipient を実装する方法を示します。

import java.io.IOException;
import javax.servlet.http.*;
import com.google.common.io.CharStreams;
import com.google.crypto.tink.apps.paymentmethodtoken.*;

// Replace ISSUER_ID with your issuer id
private static final String RECIPIENT_ID = "ISSUER_ID";

private static final String PUBLIC_KEY_URL = "https://pay.google.com/gp/m/issuer/keys";
private static final String SENDER_ID = "GooglePayPasses";
private static final String PROTOCOL = "ECv2SigningOnly";

private static final GooglePaymentsPublicKeysManager keysManager = new GooglePaymentsPublicKeysManager.Builder()
        .setKeysUrl(PUBLIC_KEY_URL)
        .build();

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  try {
    // Extract signed message with signature from POST request body.
    String signedMessage = CharStreams.toString(request.getReader());
    PaymentMethodTokenRecipient recipient =
            new PaymentMethodTokenRecipient.Builder()
                    .protocolVersion(PROTOCOL)
                    .fetchSenderVerifyingKeysWith(keysManager)
                    .senderId(SENDER_ID)
                    .recipientId(RECIPIENT_ID)
                    .build();

    String serializedJsonMessage = recipient.unseal(signedMessage);

    // Use serializedJsonMessage to extract the details
  } catch (Exception e) {
    // Handle the error
  }
}

想定されるメッセージ形式

メッセージ形式はシリアル化された JSON 文字列で、次のプロパティが設定されています。

識別子 説明
classId

完全修飾のクラス ID。次の形式を使用します。

<issuer_id.class_id>
objectId

完全修飾のオブジェクト ID。次の形式を使用します。

<issuer_id.object_id>
expTimeMillis 有効期限はエポックからのミリ秒単位です。有効期限を経過したメッセージは無効とみなす必要があります。
eventType DELETE または SAVE の場合は、del または save のいずれかです。
nonce 重複配信を追跡するナンス。

Google サーバーからのリクエストの処理

以下に、コールバック エンドポイントに送信されるリクエストのヘッダーに含まれる主な項目を示します。

  • User-Agent: Googlebot
  • Content-Type: application/json

リクエストを拒否しないようにサーバーを構成します。これを行うには、robots.txt で次のように設定します。

User-agent: Googlebot
Disallow:

再試行数

コールバックはベスト エフォート方式です。Google は、コールバック エンドポイントが応答しない場合や断続的な停止が発生した場合に、一般的な再試行戦略を使用して復元力を高め、試行を適切にバックオフします。

重複配信

重複配信が発生する場合があります。重複を排除するには、nonce を使用することをおすすめします。