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

このガイドでは、Google Wallet API でのコールバックの使用方法について説明します。特定の 作成されたか削除された場合、Google は HTTPS へのコールバックを 任意のエンドポイントを使用できます。 このコールバックはパス固有で、データが含まれます。 externalPassId やイベントタイプなど、イベントに関する情報を提供します。 これを使用して ユーザーの追加数と削除数を追跡できます。対象 たとえば、イベントをアナリティクスに送信するようにコールバックを構成し、 プロモーション イベント中の顧客エンゲージメントをトラッキングする。

前提条件

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

  • POST リクエストを処理する HTTPS エンドポイントを起動します。このエンドポイントには、 公開する予定です。
  • コールバックをプログラムで更新する 発行元のエンドポイント URL。詳しくは、 callbackOptions 作成する必要があります。
  • 推奨: Tink ライブラリを使用して署名を検証します。

コールバックを実装する

ユーザーが Compute Engine インスタンスに対して パス を受け取ると、Google は販売者にコールバックで、 カード発行会社のコールバック URL を入力します。販売者は、最初に公開鍵を使用して、 表示されます。コールバックがメッセージを確認したら、 下流のオペレーションに使用できます

署名の検証

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
  }
}

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

メッセージ形式は、 プロパティ:

識別子 説明
externalPassId

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

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

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

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

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

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

User-agent: Googlebot
Disallow:

再試行数

コールバックはベスト エフォート方式です。Google は一般的な再試行戦略を使用します。 コールバック・エンドポイントが応答しない場合や 障害に適切に対応し 再試行を無事に阻止します

重複配信

重複配信が発生する場合があります。Google Cloud コンソールの nonce を使用して重複を排除します。