Flutter支付集成插件yookassa_payments_flutter的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter支付集成插件yookassa_payments_flutter的使用

1. 插件介绍

YooKassa Payments SDK允许您在Flutter应用程序中集成支付功能,并作为API YooKassa的补充。它包含现成的支付界面(支付表单及其相关组件)。通过SDK,您可以获取用于银行卡、Sberbank在线或YooMoney钱包支付的令牌。

2. 插件依赖配置

2.1 添加依赖项到pubspec.yaml

在您的pubspec.yaml文件中添加以下依赖项并运行flutter pub get

dependencies:
  flutter:
    sdk: flutter
  yookassa_payments_flutter: ^version # 替换为最新版本号

或者使用命令:

flutter pub add yookassa_payments_flutter
2.2 配置Podfile

在您的iOS项目中的Podfile添加以下内容:

source 'https://github.com/CocoaPods/Specs.git'
source 'https://git.yoomoney.ru/scm/sdk/cocoa-pod-specs.git'

然后在Runner.xcworkspace目录下运行:

pod install --repo-update
2.3 配置Info.plist

在Info.plist中添加URL schemes以支持通过Sber和YooMoney进行支付:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>yookassapaymentsflutter</string>
        </array>
    </dict>
</array>

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>yoomoneyauth</string>
    <string>sberpay</string>
</array>

3. 解决连接/构建问题

3.1 pod install失败
  • 尝试运行:pod update YooKassaPayments
  • 如果问题仍然存在,可以清除Cocoapods缓存:
    • 方案一:执行以下命令清理缓存:
      pod cache clean FunctionalSwift --all
      pod cache clean MoneyAuth --all
      pod cache clean ThreatMetrixAdapter --all
      pod cache clean YooKassaPayments --all
      pod cache clean YooKassaPaymentsApi --all
      pod cache clean YooKassaWalletApi --all
      pod cache clean YooMoneyCoreApi --all
      pod cache clean TMXProfiling --all
      pod cache clean TMXProfilingConnections --all
      
    • 方案二:删除整个Cocoapods缓存:
      rm -rf ~/.cocoapods/repos
      
      然后执行:
      flutter clean
      pod clean
      pod deintegrate YOUR_PROJECT_NAME.xcodeproj
      pod install
      
3.2 xcode no such module ‘__ObjC’ 错误
  • 在Xcode中打开iOS项目,选择target Runner,进入Build Settings并将Build Libraries for Distribution设置为NO
  • 对于Project Runner同样操作:Project Runner -> Build Settings -> 设置Build Libraries for Distribution为NO
  • 在Xcode中执行Product -> Clean build folder..并清空DerivedData。

4. 快速集成示例

4.1 创建TokenizationModuleInputData

需要一个客户端应用密钥(从YooKassa控制台获取)以及支付金额和货币等信息。

var clientApplicationKey = "<Ключ для клиентских приложений>";
var amount = Amount(value: "999.9", currency: Currency.rub);
var shopId = "<Идентификатор магазина в ЮKassa>";

var tokenizationModuleInputData = TokenizationModuleInputData(
    clientApplicationKey: clientApplicationKey,
    title: "Космические объекты",
    subtitle: "Комета повышенной яркости, период обращения — 112 лет",
    amount: amount,
    shopId: shopId,
    savePaymentMethod: SavePaymentMethod.on // 是否保存支付方式
);
4.2 启动令牌化流程
var result = await YookassaPaymentsFlutter.tokenization(tokenizationModuleInputData);
4.3 获取Token
if (result is SuccessTokenizationResult) {
    var token = result.token;
    var paymentMethodType = result.paymentMethodType;
    // 发送token到服务器端
}
4.4 关闭SDK模块并发送token

将token发送到您的服务器,然后通过YooKassa API创建支付。根据用户选择的支付方式,确定确认步骤。

// 示例代码
var clientApplicationKey = "<Ключ для клиентских приложений>";
var shopId = "<Идентификатор магазина в ЮKassa>";

await YookassaPaymentsFlutter.confirmation(confirmationUrl, PaymentMethod.sbp, clientApplicationKey, shopId);

其中confirmationUrl是通过YooKassa API创建支付时返回的链接。

5. 支持的支付方式

当前SDK支持以下支付方式:

  • .yooMoney — 使用YooMoney钱包或绑定的银行卡支付
  • .bankCard — 银行卡支付(支持扫描卡片)
  • .sberbank — SberPay支付(如果安装了SberBank Online应用,则通过该应用确认,否则通过短信确认)
  • .sbp — СБП支付

6. 配置支付方式

可以通过TokenizationSettings来配置支付方式。例如:

List<PaymentMethod> paymentMethodTypes = [];

if (/* 条件 */) {
    paymentMethodTypes.add(PaymentMethod.bankCard); // 添加银行卡支付方式
}

if (/* 条件 */) {
    paymentMethodTypes.add(PaymentMethod.sberbank); // 添加SberPay支付方式
}

// 继续添加其他支付方式...

var settings = TokenizationSettings(PaymentMethodTypes(paymentMethodTypes));

// 使用settings初始化TokenizationModuleInputData
var tokenizationModuleInputData = TokenizationModuleInputData(
    ...
    tokenizationSettings: settings
);

更多关于Flutter支付集成插件yookassa_payments_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter支付集成插件yookassa_payments_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成和使用yookassa_payments_flutter插件的示例代码。这个插件允许你集成YooKassa(Yandex.Checkout的支付解决方案)到你的Flutter应用中。

1. 添加依赖

首先,你需要在你的pubspec.yaml文件中添加yookassa_payments_flutter插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  yookassa_payments_flutter: ^最新版本号 # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

2. 初始化插件

在你的Flutter应用的入口文件(通常是main.dart)中,你需要初始化YooKassa支付插件。

import 'package:flutter/material.dart';
import 'package:yookassa_payments_flutter/yookassa_payments_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter YooKassa Payment Integration',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: YooKassaPaymentScreen(),
    );
  }
}

class YooKassaPaymentScreen extends StatefulWidget {
  @override
  _YooKassaPaymentScreenState createState() => _YooKassaPaymentScreenState();
}

class _YooKassaPaymentScreenState extends State<YooKassaPaymentScreen> {
  @override
  void initState() {
    super.initState();
    // 初始化YooKassa插件
    YooKassaPayments.init(
      shopId: "你的Shop ID", // 替换为你的实际Shop ID
      secretKey: "你的SecretKey", // 替换为你的实际SecretKey,注意不要在客户端代码中硬编码SecretKey
    );
  }

  void makePayment() async {
    try {
      // 创建支付请求
      final paymentResponse = await YooKassaPayments.createPayment(
        amount: "100.00", // 支付金额
        currency: "RUB", // 货币类型
        description: "Test payment", // 支付描述
        confirmationMethod: YooKassaConfirmationMethod.redirect, // 支付方式
        returnUrls: YooKassaReturnUrls(
          successUrl: "https://your-success-url.com", // 支付成功后的回调URL
          failureUrl: "https://your-failure-url.com", // 支付失败后的回调URL
        ),
      );

      // 处理支付响应
      if (paymentResponse.status == "success") {
        // 支付成功,重定向到支付网关
        Uri paymentUri = Uri.parse(paymentResponse.paymentUrl);
        // 这里可以使用`Launcher`插件或类似的方式打开浏览器进行支付
        // await Launcher.launch(paymentUri.toString());
        // 注意:实际开发中,通常会在Webview或类似组件中处理支付流程,而不是直接打开浏览器
      } else {
        // 支付失败,处理错误
        print("Payment failed: ${paymentResponse.errorMessage}");
      }
    } catch (e) {
      // 处理异常
      print("Error creating payment: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("YooKassa Payment Integration"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: makePayment,
          child: Text("Make Payment"),
        ),
      ),
    );
  }
}

3. 注意事项

  1. 不要在客户端代码中硬编码SecretKey:出于安全考虑,SecretKey应该在服务器端进行管理,客户端只应处理经过验证的请求。
  2. 支付流程:上面的代码示例中,支付流程是通过打开一个URL来完成的。在实际应用中,你可能需要在应用内使用WebView或其他组件来提供更好的用户体验。
  3. 回调处理:支付成功或失败后,用户会被重定向到你指定的URL。你需要设置服务器端路由来处理这些回调,并更新应用状态。

这个示例代码展示了如何在Flutter应用中集成YooKassa支付插件,并创建支付请求。根据实际需求,你可能需要进一步定制支付流程和处理逻辑。

回到顶部