Flutter支付集成插件puma_pay的使用
Flutter支付集成插件puma_pay的使用
该插件允许您的应用管理应用内产品和订阅。
安装
-
在您的
pubspec.yaml
文件的dependencies
下添加以下依赖:puma_pay: ^2.0.1
-
在您的应用中添加Puma Pay中间件(在
src/main.dart
文件中):final store = Store<MainState>( mainReducer, initialState: initialState, middleware: [ PumaPayMiddleware<MainState>().createMiddleware(), mainMiddleware(), ], );
-
在您的应用主还原器中添加Puma Pay还原器(在
src/redux/mainReducer.dart
文件中):final mainReducer = combineReducers<MainState>([ kitReducers, ]); MainState kitReducers(MainState state, action) { return state.rebuild((b) => b ..pumaPayState.replace(pumaPayReducer(state.pumaPayState, action)) ..accountKitState .replace(accountKitReducer(state.accountKitState, action))); }
-
在您的主状态中添加PumaPayState(在
src/redux/mainState.dart
文件中):PumaPayState get pumaPayState;
别忘了在主状态初始化函数中初始化pumaPayState:
static MainState initial() { final builder = MainStateBuilder(); builder.pumaPayState = PumaPayState.initial().toBuilder(); return new MainState((b) => b ..pumaPayState.replace(PumaPayState.initial()) // 其他设置 ); }
开始使用
1. 初始化插件
在您的 src/app.dart
文件中,您应该初始化Puma Pay(例如使用 StoreConnector
的 onInitialBuild
处理程序)。您只需要分发 InitPayAction
动作。
InitPayAction
包含4个参数:
-
productsID
List<String>: 您的产品ID(确保iOS和Android上的ID相同)。 -
verifyEndpoint
String?: 所有恢复的产品都应该由Apple或Google验证,因为我们不能信任in-app-purchase
插件提供的恢复产品列表。因此,您的API应该实现一个端点来查询Apple的/verifyReceipt
或Google的GET purchases.subscriptions
。 您的端点必须是一个POST请求,接受类似以下格式的正文:{ "productID": STRING, "storeName": "android" || "ios", "data": STRING }
-
appleAppStorePassword
: String?: 如果您不在后端使用端点,您仍然可以通过Apple的/verifyReceipt
进行查询,尽管不推荐这样做。在这种情况下,此字段是必需的以执行API调用。 -
appStoreSandbox
: Bool?: 如果您不在后端使用端点并且想要使用AppStore沙箱。
一旦您分发了动作,该包将初始化并从不同的商店获取 productsID
列表中提供的所有产品。
2. PumaPayState
您的主状态包括一个 PumaPayState
,它包含您所需的所有信息:
4个标志:
storeAvailable
[布尔值]:设备商店是否可用(AppStore或Google Play)。productsLoading
[布尔值]:应用程序是否仍在商店中获取所有产品。restoringPurchase
[布尔值]:应用程序是否正在恢复所有购买。purchasePending
[布尔值]:是否有产品正在购买。
1个列表:
products
[Product]:获取的产品列表。
一个 Product
具有以下结构:
String get id;
String get title;
String get description;
String get price;
double get rawPrice;
String get currencySymbol;
String get currencyCode;
BuiltList<PurchaseDetail> get purchaseDetails;
如果执行 restorePurchaseAction
,则会填充 PurchaseDetail
并将其所有相关信息放入此列表。该对象具有以下结构:
String? get purchaseID;
String get productID;
String? get transactionDate;
String get status;
bool? get valid;
请注意,valid
布尔值是可选的。您应该按以下方式解释其值:
true
:您的后端已验证购买的完整性。您可以安全地向最终用户交付相关的内容。false
:您的后端拒绝购买的完整性(可能是过期或欺诈性的)。您不应交付内容。null
:如果您有一个后端,您的后端正在验证它(很快会有响应)。您应该等待再交付内容。如果您没有后端,则可以认为购买有效(尽管真实性无法保证)。
3. 动作
GetProductsAction
:查询商店以获取产品的对象。RestorePurchaseAction
:恢复产品并查询您的后端(如果有)以验证其完整性。PurchaseProductAction
:购买产品(需要产品ID)。
4. 扩展
extensions/extProduct.dart
:此扩展允许您立即知道给定产品是否有效:
import 'package:puma_pay/extensions/extProduct.dart';
...
final myProduct = store.state.pumaPayState.products.first;
if (myProduct.isValid()) {
// 执行操作
}
更多关于Flutter支付集成插件puma_pay的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件puma_pay的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
puma_pay
是一个用于 Flutter 应用的支付集成插件,它可以帮助开发者轻松地集成支付功能到他们的应用中。以下是如何使用 puma_pay
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 puma_pay
插件的依赖。
dependencies:
flutter:
sdk: flutter
puma_pay: ^1.0.0 # 请根据实际版本号进行替换
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的 Dart 代码中,首先需要初始化 puma_pay
插件。通常你会在 main.dart
或者某个初始化方法中进行这个操作。
import 'package:puma_pay/puma_pay.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 PumaPay
await PumaPay.initialize(
apiKey: 'YOUR_API_KEY',
environment: Environment.sandbox, // 或者 Environment.production
);
runApp(MyApp());
}
3. 发起支付
在你的应用中,你可以使用 PumaPay
提供的 API 来发起支付。
import 'package:puma_pay/puma_pay.dart';
Future<void> makePayment() async {
try {
// 创建支付请求
PaymentRequest paymentRequest = PaymentRequest(
amount: 100.0, // 支付金额
currency: 'USD', // 货币类型
description: 'Test Payment', // 支付描述
customerEmail: 'customer@example.com', // 客户邮箱
);
// 发起支付
PaymentResponse response = await PumaPay.instance.makePayment(paymentRequest);
if (response.status == PaymentStatus.success) {
print('Payment successful! Transaction ID: ${response.transactionId}');
} else {
print('Payment failed: ${response.errorMessage}');
}
} catch (e) {
print('Error making payment: $e');
}
}
4. 处理支付结果
puma_pay
插件会返回一个 PaymentResponse
对象,你可以根据 status
字段来判断支付是否成功,并处理相应的逻辑。
if (response.status == PaymentStatus.success) {
// 支付成功
} else {
// 支付失败
}
5. 处理回调(可选)
如果你需要处理支付回调,可以在初始化时设置回调函数。
await PumaPay.initialize(
apiKey: 'YOUR_API_KEY',
environment: Environment.sandbox,
onPaymentSuccess: (PaymentResponse response) {
// 处理支付成功
},
onPaymentFailure: (PaymentResponse response) {
// 处理支付失败
},
);
6. 其他功能
puma_pay
插件可能还提供了其他功能,如退款、查询支付状态等。你可以查阅插件的文档来了解更多信息。
7. 测试
在开发阶段,建议使用沙盒环境进行测试。确保在发布应用之前切换为生产环境。
environment: Environment.production,