本指南將說明如何透過 Google Wallet API 使用回呼。建立或刪除票證後,Google 可以對您選擇的 HTTPS 端點執行回呼。這個回呼因類別而異,包含事件相關資料,例如類別、物件和事件類型。可用來追蹤使用者新增和刪除的次數。舉例來說,您可以設定回呼將事件傳送至數據分析應用程式,藉此追蹤促銷活動期間的客戶參與度。
必要條件
開始之前,請詳閱下列必備條件:
- 設定處理 POST 要求的 HTTPS 端點。這個端點必須設為公開。
-
透過程式輔助方式更新每個類別的回呼端點。請參閱 REST API 中不同類別的
callbackOptions
屬性。 - 建議:使用 Tink 程式庫驗證簽名。
實作回呼
每當使用者對物件執行新增或刪除作業,Google 都會向商家發出回呼,並提供各類別網址上的新增或刪除作業詳細資料。商家必須先使用公開金鑰來驗證訊息的真實性。回呼驗證訊息後,回呼可用於下游作業。
驗證簽名
實作 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 | 說明 |
---|---|
classId |
完整類別 ID。格式如下: <issuer_id.class_id> |
objectId |
完整物件 ID。格式如下: <issuer_id.object_id> |
expTimeMillis |
自 EPOCH 起算的到期時間,以毫秒為單位。到期時間過後,必須將訊息視為無效。 |
eventType |
可為 DELETE 和 SAVE 為 del 或 save 。 |
nonce |
Nonce 可追蹤任何重複的提交項目。 |
處理 Google 伺服器發出的要求
傳送至回呼端點的要求標頭包含下列金鑰欄位清單:
- 使用者代理程式:
Googlebot
- 內容類型:
application/json
設定您的伺服器,以免拒絕要求。如要這麼做,您可以在 robots.txt
中設定以下內容:
User-agent: Googlebot Disallow:
重試次數
回呼會盡可能履行。Google 會嘗試兩次嘗試兩次暫時性的錯誤。嘗試兩次後,Google 會刪除該訊息,且不會嘗試重新傳送。
重複提交
在某些情況下,提交項目可能會重複。建議您使用 nonce
來簡化這些操作。