概览
未来的令牌生命周期管理 (LCM) 通知将通过 Google Pay Online API 发送给原始交易时提供的 tokenUpdateUrl。如果令牌被停用或删除,系统会发送这些通知。系统也会尽最大努力发送这些通知,并在传送失败时进行重试。以下是用户从 Google 钱包中移除卡片时的 LCM 流程示例:
MerchantTokenUpdateNotificationRequest
来自 Google Pay Online API 的 HTTP POST 消息,包含封装加密载荷的 JSON 正文。载荷使用您的共享公钥进行加密,并由 Google 的私钥进行签名。您可以使用自己的私钥进行解密,并使用 Google 的根签名密钥进行验证。
此加密载荷封装容器格式与您可能收到的 PaymentMethodToken 相同。您可以使用同一库来解密此 LCM 通知。
在加密的载荷中,有一个 MerchantTokenUpdateNotificationRequest 对象,详细信息如下。
| 属性 | 类型 | 必要性 | 说明 |
|---|---|---|---|
messageId |
字符串 | 必需 | 相应通知的唯一 ID,用于对消息进行去重和调试。 如果此通知未成功传送,则在以后的重试中,此通知仍保持不变。 |
targetNotificationUrl |
字符串 | 必需 | 相应通知的预期网址。您必须确认此网址是您打算用于接收来自 Google Pay 的令牌 LCM 通知的端点。 |
timestamp |
字符串 | 必需 | 相应通知最初创建时的时间戳。在后续重试中保持不变。 如果您收到同一令牌 ID 的多条通知,则只有时间戳最新的通知才被视为准确。 |
apiVersion |
int | 必需 | API 主要版本。 |
apiVersionMinor |
int | 必需 | API 次要版本。 |
merchantTokenId |
字符串 | 必需 | 包含更新的商家令牌 ID。这是用户完成 MIT 的 Google Pay 流程时最初返回的 ID。这是加密载荷中的一个字段,在
Card 对象。
|
cardUpdateInfo |
CardUpdateInfo | 必需 | 包含令牌的更新。 |
CardUpdateInfo
| 属性 | 类型 | 必要性 | 说明 |
|---|---|---|---|
fpanSuffix |
字符串 | 基于条件 | 帮助用户识别基础资金主账号 (FPAN) 的说明。 这是一个四位数的字符串,包含 FPAN 的最后四个字符。 如果存在,则可以假定令牌状态为有效。 如果没有变化,则不会显示此元素。 |
tokenState |
字符串(枚举) | 基于条件 | 令牌的新状态(如果自初始交易或上一次通知以来发生了变化)。 如果没有变化,则不会显示此元素。 有效值为 |
MerchantTokenUpdateNotificationResponse
HTTP 响应代码
| HTTP 响应代码 | 用法 |
|---|---|
| 200 | 已成功收到通知。可以在响应正文中以 JSON 对象的形式提供其他状态信息,如下表中所述。 |
| 401 | MerchantTokenUpdateNotificationRequest 中的 targetNotificationUrl 无效。您可以停用此令牌的所有未来通知。 |
| 5xx | 临时服务器错误。应稍后重新发送通知。 |
| 其他 | 不可重试的错误。不应在稍后再次发送通知。 |
| 属性 | 类型 | 必要性 | 说明 |
|---|---|---|---|
requestMessageId |
字符串 | 必需 | 根据请求生成的消息 ID。 它必须与请求中的消息 ID 相匹配,否则可以忽略该响应,并停止针对相应令牌的未来通知。 |
status |
字符串(枚举) | 必需 | 商家或支付服务提供商 (PSP) 可以返回一个状态,以反映其对通知的接收情况以及对令牌的使用情况。 有效值包括:
|
示例
生命周期通知
通知请求
这是包含令牌 LCM 通知的 HTTP POST 请求,由 Google Pay 发送到您的端点。正文是加密的载荷。
HTTP 请求
HTTP POST /token/notification/123 Host: api.merchant.com Content-Type: application/json { "protocolVersion":"ECv2", "signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d", "intermediateSigningKey":{ "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}", "signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"] }, "signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}" }
Decrypted MerchantTokenUpdateNotificationRequest
{ // MerchantTokenUpdateNotificationRequest "messageId": "ZlxoWhLC3su", "targetNotificationUrl": "https://api.merchant.com/token/notification/123", "timestamp": "2025-03-28T07:53:12.39Z", "apiVersion": 1, "apiVersionMinor": 0, "merchantTokenId": "123", "cardUpdateInfo": { "tokenState": "DISABLED" } }
通知响应
HTTP 200 OK Content-Type: application/json { // MerchantTokenUpdateNotificationResponse "requestMessageId": "ZlxoWhLC3su", "status": "SUCCESS", }
使用 tokenUpdateUrl 端点进行测试
在 TEST 模式下,Google Pay 会向您的 tokenUpdateUrl 发送令牌 LCM 通知。
如需触发此功能,请按以下步骤操作:
- 通过使用
*TransactionInfo对象调用loadPaymentData来完成测试交易,并使用您的端点网址填充tokenUpdateUrl字段。 - Google 的服务将向您的端点发送令牌 LCM 通知。
- 验证您是否可以使用私钥解密通知。请注意,在测试模式下,无论请求中的令牌是什么,此通知始终会将卡号的后 4 位数字更改为“1234”,并包含
"tokenState": "DISABLED"。