Flutter支付集成插件tinkoff_acquiring的使用

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

Flutter支付集成插件tinkoff_acquiring的使用

介绍

Tinkoff Acquiring SDK允许您将Tinkoff Internet Acquiring集成到iOS和Android平台的移动应用程序中。可用API文档

SDK特性

  • 进行支付(包括定期支付);
  • 保存客户的银行卡;
  • 获取客户和已保存银行卡的信息;
  • 管理已保存的银行卡;
  • 与在线结账集成;
  • 通过QR码进行快速支付系统(SBP)支付;

安装

pubspec.yaml文件中添加以下依赖项:

dependencies:
  tinkoff_acquiring: ^3.0.10
  tinkoff_acquiring_flutter: ^3.0.10

使用前准备

要开始使用SDK,您需要:

  • 终端密钥 - 卖家的终端密钥;
  • 密码 - 终端密码(可选);
  • 公钥 – 用于加密数据。需要将其集成到您的应用程序中以连接到Tinkoff Internet acquiring。

这些值可以在您连接到Tinkoff Internet Acquiring后,在个人账户中获取。 SDK允许配置操作模式(debug / prod),默认为debug。 SDK还允许配置请求代理,默认情况下所有请求都发送到Tinkoff服务器。

凭证配置

要配置操作模式,请设置以下参数:

final TinkoffAcquiring acquiring = TinkoffAcquiring(
  TinkoffAcquiringConfig.credential(
    terminalKey: terminalKey,
    password: password, // 如果不传递,则以无密码模式工作
    isDebugMode: false,
  ),
);

Token配置

如果您的请求是在服务端签名的,那么可以使用以下构造函数:

final TinkoffAcquiring acquiring = TinkoffAcquiring(
  TinkoffAcquiringConfig.token(
    terminalKey: terminalKey,
    isDebugMode: false,
  ),
);

在这种情况下,您需要在请求模型中添加signToken

InitRequest(
  signToken: ...,
  ...
)

request.copyWith(signToken: ...);

代理配置

如果您想使用代理,请使用以下构造函数:

final TinkoffAcquiring acquiring = TinkoffAcquiring(
  TinkoffAcquiringConfig.proxy(
    proxyDomain: 'myserver.com',
    proxyPath: '/acquiring',
    isDebugMode: false,
    globalHeaders: <String, String>{...},
    mapping: (AcquiringRequest request, bool isDebugMode) {
      if (request is InitRequest) {
        return const ProxyRequest(
          headers: <String, String>{...},
          methodPath: '/Init',
        );
      }

      ...

      return null;
    },
  ),
);

示例代码

下面是一个完整的示例demo,展示了如何使用tinkoff_acquiring插件进行支付集成:

pubspec.yaml

确保您的pubspec.yaml文件中包含以下内容:

dependencies:
  flutter:
    sdk: flutter
  tinkoff_acquiring: ^3.0.10
  tinkoff_acquiring_flutter: ^3.0.10

main.dart

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

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

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

class PaymentPage extends StatefulWidget {
  @override
  _PaymentPageState createState() => _PaymentPageState();
}

class _PaymentPageState extends State<PaymentPage> {
  final TinkoffAcquiring _acquiring = TinkoffAcquiring(
    TinkoffAcquiringConfig.credential(
      terminalKey: 'YourTerminalKey', // 替换为您自己的终端密钥
      password: 'YourPassword', // 替换为您自己的密码
      isDebugMode: true, // 设置为false以切换到生产环境
    ),
  );

  Future<void> _makePayment() async {
    try {
      final response = await _acquiring.init(
        InitRequest(
          amount: 10000, // 金额,单位为分
          paymentId: DateTime.now().millisecondsSinceEpoch.toString(),
          customerId: 'customer_123456',
          recurrent: false,
        ),
      );

      if (response.isSuccess) {
        print('Payment successful');
      } else {
        print('Payment failed: ${response.message}');
      }
    } catch (e) {
      print('Error during payment: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Tinkoff Acquiring Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _makePayment,
          child: Text('Make Payment'),
        ),
      ),
    );
  }
}

此示例演示了如何初始化一个支付请求,并处理支付结果。请根据实际情况替换terminalKeypassword等参数。

更多详细信息和完整示例代码,请参考官方GitHub仓库中的example文件夹。

SDK工作流程

SDK工作流程

希望以上内容能帮助您顺利集成Tinkoff Acquiring到您的Flutter项目中!如果有任何问题,欢迎随时提问。


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

1 回复

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


在Flutter中集成tinkoff_acquiring插件以实现支付功能,可以通过以下步骤来完成。以下是一个简单的代码案例,展示了如何使用这个插件进行支付集成。

首先,确保你已经在pubspec.yaml文件中添加了tinkoff_acquiring依赖:

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

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

接下来,你需要配置Android和iOS平台特定的设置。这通常涉及到在AndroidManifest.xmlInfo.plist文件中添加必要的权限和配置。由于这些配置可能随着插件版本的变化而变化,请参考tinkoff_acquiring插件的官方文档获取最新的配置信息。

下面是一个基本的Flutter应用示例,展示了如何使用tinkoff_acquiring插件进行支付:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Tinkoff Acquiring Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TinkoffAcquiring _tinkoffAcquiring = TinkoffAcquiring();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Tinkoff Acquiring Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 替换为你的实际支付参数
            final Map<String, dynamic> paymentParams = {
              'Amount': '100.00',
              'CurrencyCode': '643', // RUB
              'OrderDescription': 'Test order',
              'Receipt': {
                'Email': 'user@example.com',
                'PhoneNumber': '+79991234567',
              },
              // 其他必要的支付参数...
            };

            try {
              final result = await _tinkoffAcquiring.startPayment(
                paymentParams: paymentParams,
                publicKey: '你的公钥', // 替换为你的公钥
                successUrl: 'https://your-success-url.com', // 支付成功后的回调URL
                failUrl: 'https://your-fail-url.com', // 支付失败后的回调URL
              );

              // 处理支付结果
              if (result['Status'] == 'Success') {
                print('Payment successful!');
                // 更新UI或执行其他操作
              } else {
                print('Payment failed: ${result['ErrorDescription'] ?? 'Unknown error'}');
                // 更新UI或执行其他操作
              }
            } catch (e) {
              print('Error starting payment: $e');
              // 处理错误
            }
          },
          child: Text('Start Payment'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,将启动Tinkoff支付流程。你需要替换paymentParams中的值以及publicKeysuccessUrlfailUrl为你的实际值。

请注意,这只是一个基本的示例,实际使用中你可能需要处理更多的支付参数和错误情况。此外,确保你已经在Tinkoff Acquiring商户后台正确配置了你的应用信息,并获取了必要的公钥和私钥。

对于生产环境,强烈建议仔细阅读tinkoff_acquiring插件的官方文档,并遵循最佳实践来确保支付流程的安全性和可靠性。

回到顶部