我对 SubscriptionNotification 有一个奇怪的行为,当我们购买并取消订阅时,我们总共收到 4 条通知:
{
"startTimeMillis": "1680768693830", // 2023-04-06 08:11:33
"expiryTimeMillis": "1680768987284", // 2023-04-06 08:16:27
"autoRenewing": true,
"priceCurrencyCode": "EUR",
"priceAmountMicros": "12990000",
"countryCode": "FR",
"developerPayload": "",
"paymentState": 1,
"orderId": "GPA.3318-6319-2574-83983",
"purchaseType": 0,
"acknowledgementState": 0,
"kind": "androidpublisher#subscriptionPurchase",
"obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
"obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}
{
"startTimeMillis": "1680768693830", // 2023-04-06 08:11:33
"expiryTimeMillis": "1680768987284", // 2023-04-06 08:16:27
"autoRenewing": false,
"priceCurrencyCode": "EUR",
"priceAmountMicros": "12990000",
"countryCode": "FR",
"developerPayload": "",
"paymentState": 1,
"cancelReason": 0,
"userCancellationTimeMillis": "1680768867438", // 2023-04-06 08:14:27
"orderId": "GPA.3318-6319-2574-83983",
"purchaseType": 0,
"acknowledgementState": 1,
"kind": "androidpublisher#subscriptionPurchase",
"obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
"obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}
{
"startTimeMillis": "1680768693830", // 2023-04-06 08:11:33
"expiryTimeMillis": "1680768988438", // 2023-04-06 08:16:28
"autoRenewing": false,
"priceCurrencyCode": "EUR",
"priceAmountMicros": "12990000",
"countryCode": "FR",
"developerPayload": "",
"cancelReason": 0,
"userCancellationTimeMillis": "1680768867438", // 2023-04-06 08:14:27
"orderId": "GPA.3318-6319-2574-83983",
"purchaseType": 0,
"acknowledgementState": 1,
"kind": "androidpublisher#subscriptionPurchase",
"obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
"obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}
{
"startTimeMillis": "1680768693830", // 2023-04-06 08:11:33
"expiryTimeMillis": "1680768988438", // 2023-04-06 08:16:28
"autoRenewing": false,
"priceCurrencyCode": "EUR",
"priceAmountMicros": "12990000",
"countryCode": "FR",
"developerPayload": "",
"cancelReason": 0,
"userCancellationTimeMillis": "1680768867438", // 2023-04-06 08:14:27
"orderId": "GPA.3318-6319-2574-83983",
"purchaseType": 0,
"acknowledgementState": 1,
"kind": "androidpublisher#subscriptionPurchase",
"obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
"obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}
(我处于测试模式,所以订阅时长为 5 分钟)
第四个不知道从哪里来的,问题是我们再次购买后才寄出
这里是第二次购买的通知(08:34:23收到):
{
"startTimeMillis": "1680770058278", // 2023-04-06 08:34:18
"expiryTimeMillis": "1680770354886", // 2023-04-06 08:39:14
"autoRenewing": true,
"priceCurrencyCode": "EUR",
"priceAmountMicros": "12990000",
"countryCode": "FR",
"developerPayload": "",
"paymentState": 1,
"orderId": "GPA.3314-6552-0681-64757",
"purchaseType": 0,
"acknowledgementState": 0,
"kind": "androidpublisher#subscriptionPurchase",
"obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
"obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}
可以看到这次的orderId不一样,因为是第二次购买。第一次购买的第四次通知来自哪里?
通知3和通知4的信息相同,只是收到的时间不同。
几个可能的原因:
重复通知:有时,Google Play 会针对同一事件发送重复通知。这是一个已知问题,可能由于网络问题或其他技术原因而发生。您应该确保您的服务器是幂等的,这意味着它可以处理重复的通知而不会引起任何问题。
实时开发者通知 (RTDN) 重试:如果 Google Play 未从您的服务器收到成功确认(HTTP 200 状态代码),它可能会重试发送通知。确保您的服务器正确确认通知以避免此问题。
服务器端处理:处理通知的服务器端代码可能存在问题。仔细检查您的代码以确保它不会导致处理收到的通知出现任何问题。
也许还有一些解决方案:
确保您的服务器正确确认收到的通知,以避免从 Google Play 进行不必要的重试。
向服务器端代码添加逻辑以删除重复通知。您可以使用“startTimeMillis”、“expiryTimeMillis”和“orderId”字段来唯一标识一个订阅事件。如果您的服务器收到这些字段具有相同值的通知,您可以放心地忽略重复的通知。
监控并记录服务器收到的通知。这可以帮助您识别通知的任何问题或趋势,并在需要时帮助调试。