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

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

前提条件

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

  • POST リクエストを処理する HTTPS エンドポイントを起動します。このエンドポイントは一般公開する必要があります。
  • 発行者のコールバック エンドポイント URL をプログラムで更新します。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 であり、次のプロパティを持つ文字列にシリアル化されます。

ID 説明
externalPassId

完全修飾の外部パス ID。次の形式を使用します。

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

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

コールバック エンドポイントに送信されるリクエストのヘッダーに含まれる主なフィールドは次のとおりです。

  • ユーザー エージェント: Googlebot
  • コンテンツ タイプ: application/json

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

User-agent: Googlebot
Disallow:

再試行数

コールバックはベスト エフォート方式です。Google では、一時的な障害を考慮して、2 回対処しようとします。2 回送信を試みると、Google はメッセージを削除し、再送信を試みません。

重複配信

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