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

このガイドでは、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
  }
}

Expected message format

The message format is JSON that's serialized into a string with the following properties:

Identifier Description
classId

Fully qualified class ID. Uses the following format:

<issuer_id.class_id>
objectId

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

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

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

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

  • User-Agent: Google-Valuables
  • Content-Type: application/json

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

User-agent: Google-Valuables
Disallow:

再試行

コールバックはベスト エフォート方式です。一時的な障害の場合、Google は 3 日間メッセージの配信を試みます。3 日後、Google はメッセージを削除し、再送信を試みません。

重複配信

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