为何将Flutter in_app_purchase的purchaseId传入androidPublisher API始终报400错误?
解决Google Play订阅API调用400无效值问题
你遇到的问题核心是Flutter in_app_purchase的PurchaseDetails.purchaseId并非Google Play订阅API所需的purchaseToken——purchaseId对应的是订单ID(orderId),而订阅接口要求的是专属的购买令牌(purchaseToken)。
正确的参数获取方式
你需要从PurchaseDetails中提取purchaseToken,具体步骤分两种情况:
- 解析transactionReceipt(通用方式)
Android平台下,PurchaseDetails.transactionReceipt是一个JSON格式的字符串,解析后可直接拿到purchaseToken字段:
import 'dart:convert'; import 'dart:io'; // 假设已获取到PurchaseDetails实例purchaseDetails if (Platform.isAndroid && purchaseDetails.transactionReceipt != null) { final receiptMap = jsonDecode(purchaseDetails.transactionReceipt!); final purchaseToken = receiptMap['purchaseToken']; // 将此purchaseToken传入API的token参数 }
- 直接获取serverVerificationData(简化方式)
在in_app_purchase的较新版本中,PurchaseDetails.verificationData.serverVerificationData直接对应Android的purchaseToken,可直接取用:
final purchaseToken = purchaseDetails.verificationData.serverVerificationData;
将上述获取到的purchaseToken传入Google Play订阅API的token参数位置,即可解决400无效值的错误。
内容的提问来源于stack exchange,提问作者Akhilraj Nambiar
相关产品推荐
相关产品推荐

