You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Flutter in_app_purchase获取匹配谷歌Webhook的购买令牌?

解决Flutter in_app_purchase购买令牌与Google Play Webhook不一致问题

你当前通过purchase.verificationData.serverVerificationData获取到的GPA开头值是订单ID(Order ID),并非Webhook中返回的真正购买令牌(Purchase Token)。要获取与Webhook一致的令牌,需直接从购买详情对象中提取purchaseToken属性,具体操作如下:

1. 区分购买类型并获取令牌

in_app_purchase库中,单次购买和订阅的购买对象类型不同,需分别处理:

针对单次购买(消耗品/非消耗品)

将PurchaseDetails转型为GooglePlayPurchaseDetails,直接读取purchaseToken字段:

if (purchase is GooglePlayPurchaseDetails) {
  String correctPurchaseToken = purchase.purchaseToken;
  // 将此值存入数据库即可与Webhook返回的令牌匹配
}

针对订阅

处理SubscriptionPurchase对象时,同样直接提取purchaseToken:

for (var purchase in subscriptionPurchases) {
  if (purchase is SubscriptionPurchase) {
    String correctPurchaseToken = purchase.purchaseToken;
    // 后续存储或验证逻辑
  }
}

2. 为什么之前的方式不对

serverVerificationData是Google提供的服务器验证用完整数据(通常是包含订单ID、购买令牌、商品ID等信息的结构化数据),你之前从中提取的GPA开头内容只是其中的订单ID,并非Webhook中使用的购买令牌。直接读取购买对象的purchaseToken属性,才能得到与Webhook完全一致的令牌值。

内容的提问来源于stack exchange,提问作者Henrique Postalli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:14:50