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

为何将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,具体步骤分两种情况:

  1. 解析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参数
}
  1. 直接获取serverVerificationData(简化方式)
    在in_app_purchase的较新版本中,PurchaseDetails.verificationData.serverVerificationData直接对应Android的purchaseToken,可直接取用:
final purchaseToken = purchaseDetails.verificationData.serverVerificationData;

将上述获取到的purchaseToken传入Google Play订阅API的token参数位置,即可解决400无效值的错误。

内容的提问来源于stack exchange,提问作者Akhilraj Nambiar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:52:43