87f92987b2
前端: - 集成 in_app_purchase 插件,实现 IAP 支付流程 - 添加支付模块 (payments/) 处理产品获取、购买、验证 - 积分中心页面集成 Apple Pay 购买入口 - 设置页面重构: 关于/隐私/协议直接展示,删除 legal_center 子页面 - 修复欢迎引导页滚动检测阈值问题 - 修复解卦结果页 iOS 侧滑返回手势被阻止的问题 - 邀请码绑定按钮临时禁用(待后端实现) 后端: - 新增 apple_iap_transactions 表记录交易 - 实现 Apple 服务器端验证 (App Store Server API) - 支付成功后自动发放积分 - 支持 Sandbox/Production 环境切换 - 添加退款处理和交易状态机 协议: - 更新积分流水协议,支持 purchase/refund 类型 - 新增 PAYMENT_* 错误码
57 lines
1.7 KiB
Dart
57 lines
1.7 KiB
Dart
class VerifyTransactionRequest {
|
|
const VerifyTransactionRequest({
|
|
required this.productCode,
|
|
required this.appStoreProductId,
|
|
required this.transactionId,
|
|
required this.signedTransactionInfo,
|
|
this.appAccountToken,
|
|
});
|
|
|
|
final String productCode;
|
|
final String appStoreProductId;
|
|
final String transactionId;
|
|
final String signedTransactionInfo;
|
|
final String? appAccountToken;
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
'productCode': productCode,
|
|
'appStoreProductId': appStoreProductId,
|
|
'transactionId': transactionId,
|
|
'signedTransactionInfo': signedTransactionInfo,
|
|
if (appAccountToken != null) 'appAccountToken': appAccountToken,
|
|
};
|
|
}
|
|
|
|
enum VerifyTransactionStatus { granted, alreadyGranted }
|
|
|
|
class VerifyTransactionResponse {
|
|
const VerifyTransactionResponse({
|
|
required this.status,
|
|
required this.productCode,
|
|
required this.transactionId,
|
|
required this.creditsAdded,
|
|
required this.newBalance,
|
|
required this.ledgerEventId,
|
|
});
|
|
|
|
final VerifyTransactionStatus status;
|
|
final String productCode;
|
|
final String transactionId;
|
|
final int creditsAdded;
|
|
final int newBalance;
|
|
final String ledgerEventId;
|
|
|
|
factory VerifyTransactionResponse.fromJson(Map<String, dynamic> json) {
|
|
return VerifyTransactionResponse(
|
|
status: json['status'] == 'already_granted'
|
|
? VerifyTransactionStatus.alreadyGranted
|
|
: VerifyTransactionStatus.granted,
|
|
productCode: json['productCode'] as String,
|
|
transactionId: json['transactionId'] as String,
|
|
creditsAdded: json['creditsAdded'] as int,
|
|
newBalance: json['newBalance'] as int,
|
|
ledgerEventId: json['ledgerEventId'] as String,
|
|
);
|
|
}
|
|
}
|