Flutter支付插件flutter_swish_payment的使用

Flutter支付插件flutter_swish_payment的使用

Swish

flutter_swish_payment

这是一个用于瑞典支付服务Swish的Widget和函数库。

Swish是什么?

Swish是在瑞典使用的移动支付系统。该服务通过智能手机应用程序运行,用户的手机号码与银行账户相连,使得用户可以在实时情况下进行转账。 了解更多信息,请访问Swish

使用方法

安装并导入flutter_swish_payment后,可以按照以下步骤开始使用:

  1. 获取组织的Swish证书。可以从Swish公司门户或内部组织获取。如果您正在开发私人项目并希望在Swish环境中进行测试,Swish在其环境页面上提供了可下载的测试证书。

  2. 使用证书初始化一个SwishAgent。这可以在主函数中直接完成。(注意如何安全地存储您的证书!)

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  ByteData cert = await rootBundle.load(
    'assets/swish_certificate.pem',
  );
  ByteData key = await rootBundle.load(
    'assets/swish_certificate.key',
  );

  String credential = "passwordForCertificates";

  SwishAgent swishAgent = SwishAgent.initializeAgent(
    cert: cert,
    key: key,
    credential: credential,
  );
  ...
}
  1. 创建一个SwishClient并提供SwishAgent
SwishClient swishClient = SwishClient(
  swishAgent: swishAgent,
);
  1. 现在您可以开始发送支付请求了。请参阅SwishClient文档以获得指导。

打开Swish

当用户收到支付请求时,跳转到Swish应用的方式因设备而异。目前仅支持Android设备。Swish提供了一个callbackUrl,可以用来在支付完成后将用户导航回应用。有关如何导航回应用的详细信息,请阅读Swish的FAQ:如何让用户返回原始应用程序?

Android 11及更高版本

AndroidManifest.xml中声明打开Swish的意图。在<queries> ... </queries>中添加以下内容(如果没有queries部分,则在manifest内创建)。

<intent>
  <action android:name="android.intent.action.VIEW" />
  <data android:scheme="swish" />
</intent>

最终结果应如下所示:

<manifest>
  <application>
    ...
  </application>
  <queries>
    <!-- 打开Swish -->
    <intent>
      <action android:name="android.intent.action.VIEW" />
      <data android:scheme="swish" />
    </intent>
  </queries>
</manifest>

了解更多,请查看:

flutter_swish_payment的未来目标

目标是创建一个完整的库来覆盖Swish API的所有方面。从Swish二维码小部件到管理在线商店的退款,一切都在考虑之中。

贡献

flutter_swish_payment仍在早期开发阶段。帮助我们通过报告错误、提出新功能甚至贡献自己的代码来改进它。我们的GitHub欢迎所有贡献。让我们一起把这个项目提升到新的水平,并发布一个最终版本。


免责声明

目前,该项目仅在商户Swish模拟器(MMS)中进行了测试。在进行真实交易之前,请联系Swish团队寻求指导。


完整示例代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_swish_payment/flutter_swish_payment.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 加载所有PKI文件。这些是从商户Swish模拟器下载的测试文件,可以从Swish获取。记得安全地存储您的文件。
  ByteData cert = await rootBundle.load(
    'assets/Swish_Merchant_TestCertificate.pem',
  );
  ByteData key = await rootBundle.load(
    'assets/Swish_Merchant_TestCertificate.key',
  );

  // 证书文件的密码。Swish为测试文件使用标准的"swish"。安全地存储您的私有密码。
  String credential = "swish";

  SwishAgent swishAgent = SwishAgent.initializeAgent(
    key: key,
    cert: cert,
    credential: credential,
  );

  SwishClient swishClient = SwishClient(
    swishAgent: swishAgent,
  );

  runApp(
    MyApp(
      swishClient: swishClient,
    ),
  );
}

class MyApp extends StatelessWidget {
  final SwishClient swishClient;
  const MyApp({
    Key? key,
    required this.swishClient,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Swish Payment Demo',
      home: HomePage(
        swishClient: swishClient,
      ),
    );
  }
}

class HomePage extends StatefulWidget {
  final SwishClient swishClient;
  const HomePage({
    Key? key,
    required this.swishClient,
  }) : super(key: key);

  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  // 创建支付数据,该数据应该支付并发送给最终的Swish用户。
  final SwishPaymentData swishPaymentData = const SwishPaymentData(
    payeeAlias: '1231181189',
    amount: '100',
    currency: 'SEK',
    callbackUrl: 'https://example.com/api/swishcb/paymentrequest',
    message: 'Kingston USB Flash drive 8 GB',
  );

  bool isWaiting = false;
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: isWaiting
          ? Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: const [
                  Text('请打开Swish应用。'),
                  SizedBox(
                    height: 12.0,
                  ),
                  CircularProgressIndicator(),
                ],
              ),
            )
          : Center(
              child: SizedBox(
                width: 200,
                height: 75,
                child: SwishButton.secondaryElevatedButton(
                  onPressed: () async {
                    try {
                      // 创建支付请求
                      SwishPaymentRequest swishPaymentRequest =
                          await widget.swishClient.createPaymentRequest(
                        swishPaymentData: swishPaymentData,
                      );
                      // 确保支付请求有效。
                      if (swishPaymentRequest.errorCode != null) {
                        throw Exception(swishPaymentRequest.errorMessage);
                      }
                      setState(() {
                        isWaiting = true;
                      });
                      // 等待Swish用户接收支付请求并决定是否支付或拒绝。超时也是可能的(用户不采取任何行动)。
                      swishPaymentRequest =
                          await widget.swishClient.waitForPaymentRequest(
                        location: swishPaymentRequest.location!,
                      );
                      setState(() {
                        isWaiting = false;
                      });
                      // 支付现在完成(或失败)。
                      // ignore: avoid_print
                      print(
                        swishPaymentRequest.toString(),
                      );
                    } catch (error) {
                      // ignore: avoid_print
                      print(
                        error.toString(),
                      );
                    }
                  },
                ),
              ),
            ),
    );
  }
}

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

1 回复

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


flutter_swish_payment 是一个用于在 Flutter 应用中集成 Swish 支付的插件。Swish 是一种在瑞典广泛使用的移动支付方式。通过这个插件,开发者可以方便地在应用中调用 Swish 支付功能。

以下是使用 flutter_swish_payment 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_swish_payment 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_swish_payment: ^latest_version

然后运行 flutter pub get 来获取依赖。

2. 初始化插件

在使用插件之前,需要进行初始化。通常可以在 main.dart 或应用启动时进行初始化:

import 'package:flutter_swish_payment/flutter_swish_payment.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FlutterSwishPayment.initialize(
    merchantId: 'YOUR_MERCHANT_ID',
    callbackUrl: 'YOUR_CALLBACK_URL',
  );
  runApp(MyApp());
}
  • merchantId: 你的商户 ID,通常由 Swish 提供。
  • callbackUrl: 支付完成后 Swish 会回调的 URL。

3. 发起支付

在你的应用中,可以通过以下方式发起 Swish 支付:

import 'package:flutter_swish_payment/flutter_swish_payment.dart';

Future<void> initiateSwishPayment() async {
  try {
    final response = await FlutterSwishPayment.pay(
      amount: 100.0,
      message: 'Payment for order #123',
      phoneNumber: '+46701234567',
    );

    if (response.status == SwishPaymentStatus.success) {
      // 支付成功
      print('Payment successful: ${response.transactionId}');
    } else {
      // 支付失败
      print('Payment failed: ${response.errorMessage}');
    }
  } catch (e) {
    // 处理异常
    print('Error: $e');
  }
}
回到顶部