新增及刪除回呼

本指南將說明如何透過 Google Wallet API 使用回呼。如果 Google 便可對 HTTPS 執行回呼 所選端點 這個回呼僅適用於特定流量,且包含資料 有關事件的資訊,例如 externalPassId 和事件類型 這項策略可用來 追蹤發生新增及刪除的使用者人數。適用對象 例如,您可以設定回呼來將事件傳送至數據分析 應用程式,以追蹤促銷活動期間的客戶參與度。

必要條件

開始之前,請詳閱下列必要條件:

  • 啟動處理 POST 要求的 HTTPS 端點。這個端點需要
  • 透過程式輔助方式更新回呼 核發者的端點網址。詳情請參閱 callbackOptions敬上 REST API 中針對發行者的屬性設定屬性。
  • 建議做法:使用 Tink 程式庫驗證簽名。

實作回呼

每當使用者在應用程式中新增或刪除 票證 ,Google 會向商家進行回呼,並提供 核發者回呼 網址。商家必須先使用公開金鑰來驗證 訊息。在回呼驗證訊息之後,即可使用回呼 用於下游作業

驗證簽章

建議您使用 Tink 程式庫驗證訊息簽名 在您實作 HTTPS 端點時 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 自 EPOCH 起的到期時間 (以毫秒為單位)。到期後 進而視為無效。
eventType 可以是 delsaveDELETESAVE
nonce Nonce,可追蹤任何重複的傳送事件。

處理 Google 伺服器發出的要求

以下是要求標頭中的鍵欄位清單, :

  • 使用者代理程式:Googlebot
  • 內容類型:application/json

設定伺服器,禁止伺服器拒絕要求。如要這麼做, 在 robots.txt 中設定以下內容:

User-agent: Googlebot
Disallow:

重試

回呼會盡可能履行。Google 會採用常見的重試策略 至於回呼端點未回應或 服務中斷,並且會在正常情況下及時停止嘗試。

重複提交

在某些情況下,系統可能會重複傳送訊息。建議您使用 nonce即可刪除重複的資料。