このガイドでは、Google Wallet API でのコールバックの使用方法について説明します。特定の 作成されたか削除された場合、Google は HTTPS へのコールバックを 任意のエンドポイントを使用できます。 このコールバックはクラス固有で、データが含まれます。 クラス、オブジェクト、イベントタイプなど、イベントに関する情報を確認できます。 これを使用して ユーザーの追加数と削除数を追跡できます。対象 たとえば、イベントをアナリティクスに送信するようにコールバックを構成し、 プロモーション イベント中の顧客エンゲージメントをトラッキングする。
前提条件
始める前に、次の前提条件を満たしていることを確認してください。
- POST リクエストを処理する HTTPS エンドポイントを起動します。このエンドポイントには、 公開する予定です。
-
各クラスのコールバック エンドポイントをプログラムで更新します。詳しくは、
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 } }
想定されるメッセージ形式
メッセージ形式は、 プロパティ:
識別子 | 説明 |
---|---|
classId |
完全修飾クラス ID。次の形式を使用します。 <issuer_id.class_id> |
objectId |
完全修飾のオブジェクト ID。次の形式を使用します。 <issuer_id.object_id> |
expTimeMillis |
エポックからのミリ秒単位の有効期限です。有効期限が切れた後は、 メッセージは無効とみなす必要があります。 |
eventType |
del または save のいずれかになります。
DELETE と SAVE 。
|
nonce |
重複配信を追跡するノンス。 |
Google サーバーからのリクエストの処理
リクエストのヘッダーに含まれる主要なフィールドのリストは次のとおりです。 コールバック エンドポイントに送信されます。
- ユーザー エージェント:
Googlebot
- コンテンツ タイプ:
application/json
リクエストを拒否しないようにサーバーを構成します。そのためには、
robots.txt
で次のように設定します。
User-agent: Googlebot Disallow:
再試行数
コールバックはベスト エフォート方式です。Google は一般的な再試行戦略を使用します。 コールバック・エンドポイントが応答しない場合や 障害に適切に対応し 再試行を無事に阻止します
重複配信
重複配信が発生する場合があります。Google Cloud コンソールの
nonce
を使用して重複を排除します。