Flutter支付集成插件puma_pay的使用

Flutter支付集成插件puma_pay的使用

该插件允许您的应用管理应用内产品和订阅。

安装

  1. 在您的 pubspec.yaml 文件的 dependencies 下添加以下依赖:

    puma_pay: ^2.0.1
    
  2. 在您的应用中添加Puma Pay中间件(在 src/main.dart 文件中):

    final store = Store<MainState>(
      mainReducer,
      initialState: initialState,
      middleware: [
        PumaPayMiddleware<MainState>().createMiddleware(),
        mainMiddleware(),
      ],
    );
    
  3. 在您的应用主还原器中添加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)));
    }
    
  4. 在您的主状态中添加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(例如使用 StoreConnectoronInitialBuild 处理程序)。您只需要分发 InitPayAction 动作。

InitPayAction 包含4个参数:

  1. productsID List<String>: 您的产品ID(确保iOS和Android上的ID相同)。

  2. verifyEndpoint String?: 所有恢复的产品都应该由Apple或Google验证,因为我们不能信任 in-app-purchase 插件提供的恢复产品列表。因此,您的API应该实现一个端点来查询Apple的 /verifyReceipt 或Google的 GET purchases.subscriptions。 您的端点必须是一个POST请求,接受类似以下格式的正文:

    {
        "productID": STRING,
        "storeName": "android" || "ios",
        "data": STRING
    }
    
  3. appleAppStorePassword: String?: 如果您不在后端使用端点,您仍然可以通过Apple的 /verifyReceipt 进行查询,尽管不推荐这样做。在这种情况下,此字段是必需的以执行API调用。

  4. 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

1 回复

更多关于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,
回到顶部