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

Flutter in_app_purchase插件获取支付成功/失败状态方法咨询

Flutter in_app_purchase支付状态获取方法

核心回调位置

所有支付结果(成功/失败/待处理)都会触发_listenToPurchaseUpdated方法,支付状态通过PurchaseDetails的status字段判断:

  • PurchaseStatus.pending:支付处理中,无需上报服务端
  • PurchaseStatus.error:支付失败
  • PurchaseStatus.purchased/PurchaseStatus.restored:支付成功/恢复购买成功

具体修改方案

1. 支付成功上报逻辑

在_verifyPurchase校验通过后,或者直接在deliverProduct方法中添加服务端上报逻辑,示例:

void deliverProduct(PurchaseDetails purchaseDetails) async {
  // 新增:上报支付成功数据到服务端
  try {
    await Dio().post("你的服务端接口地址", data: {
      "product_id": purchaseDetails.productID,
      "purchase_token": purchaseDetails.verificationData.serverVerificationData,
      "transaction_id": purchaseDetails.purchaseID,
      "platform": Platform.operatingSystem
    });
  } catch(e) {
    // 处理上报失败的重试逻辑,比如本地缓存稍后重试
  }

  // 原有逻辑保持不变
  if (purchaseDetails.productID == _kConsumableId) {
    await ConsumableStore.save(purchaseDetails.purchaseID!);
    List<String> consumables = await ConsumableStore.load();
    setState(() {
      _purchasePending = false;
      _consumables = consumables;
    });
  } else {
    setState(() {
      _purchases.add(purchaseDetails);
      _purchasePending = false;
    });
  }
}

2. 支付失败上报逻辑

在handleError方法中添加失败上报逻辑,示例:

void handleError(IAPError error) async {
  // 新增:上报支付失败信息到服务端
  try {
    await Dio().post("你的服务端错误上报接口地址", data: {
      "error_code": error.code,
      "error_message": error.message,
      "platform": Platform.operatingSystem
    });
  } catch(e) {
    // 本地记录错误日志
  }

  // 原有逻辑保持不变
  setState(() {
    _purchasePending = false;
  });
}

注意事项

  • 生产环境不要使用示例中直接返回true的_verifyPurchase逻辑,必须将支付凭证传到你的服务端,再向苹果/谷歌官方接口校验凭证有效性,避免伪造支付
  • 订阅类产品需要在服务端定期校验订阅状态,不要仅依赖客户端回调结果

内容的提问来源于stack exchange,提问作者rameez khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:06:03