本指南將說明如何透過 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 |
可以是 del 或 save ,
DELETE 和SAVE 。
|
nonce |
Nonce,可追蹤任何重複的傳送事件。 |
處理 Google 伺服器發出的要求
以下是要求標頭中的鍵欄位清單, :
- 使用者代理程式:
Googlebot
- 內容類型:
application/json
設定伺服器,禁止伺服器拒絕要求。如要這麼做,
在 robots.txt
中設定以下內容:
User-agent: Googlebot Disallow:
重試
回呼會盡可能履行。Google 會採用常見的重試策略 至於回呼端點未回應或 服務中斷,並且會在正常情況下及時停止嘗試。
重複提交
在某些情況下,系統可能會重複傳送訊息。建議您使用
nonce
即可刪除重複的資料。