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
相关产品推荐
相关产品推荐

