このガイドでは、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 |
DELETE と SAVE の場合は del または save です。 |
nonce |
重複配信を追跡するノンス。 |
Google サーバーからのリクエストを処理する
コールバック エンドポイントに送信されるリクエストのヘッダーに含まれる主なフィールドは次のとおりです。
- ユーザー エージェント:
Googlebot
- コンテンツ タイプ:
application/json
リクエストを拒否しないようにサーバーを構成します。これを行うには、robots.txt
で次のように設定します。
User-agent: Googlebot Disallow:
再試行数
コールバックはベスト エフォート方式です。Google では、一時的な障害を考慮して、2 回対処しようとします。2 回送信を試みると、Google はメッセージを削除し、再送信を試みません。
重複配信
重複配信が発生する場合があります。nonce
を使用して重複を排除することをおすすめします。