本指南介绍了如何通过 Google Wallet API 使用回调。当 创建或删除卡券时,Google 可以执行对 HTTPS 的回调 端点 此回调特定于卡券,并且包含数据 例如 externalPassId 和事件类型等信息。 这可用于 跟踪用户添加和删除操作的次数。对于 例如,回调可以配置为向 Analytics 发送事件 应用程序,用于在宣传活动期间跟踪客户参与度。
前提条件
在开始之前,请先查看以下前提条件:
- 建立一个处理 POST 请求的 HTTPS 端点。此端点需要 以供公开访问
-
以编程方式更新回调
发卡机构的端点网址。请参阅
callbackOptions
属性。 - 推荐:使用 Tink 库来验证签名。
实现回调
对于用户在 1 次传球 ,Google 会通过在 发卡机构回调 网址。商家需要先使用公钥来验证 消息内容。回调验证消息后,可以使用回调 处理下游操作
验证签名
我们建议您使用 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,该 JSON 会序列化为字符串,其中包含以下 属性:
标识符 | 说明 |
---|---|
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
可对它们进行去重处理。