Flutter支付插件flutter_swish_payment的使用
Flutter支付插件flutter_swish_payment的使用
flutter_swish_payment
这是一个用于瑞典支付服务Swish的Widget和函数库。
Swish是什么?
Swish是在瑞典使用的移动支付系统。该服务通过智能手机应用程序运行,用户的手机号码与银行账户相连,使得用户可以在实时情况下进行转账。 了解更多信息,请访问Swish。
使用方法
安装并导入flutter_swish_payment后,可以按照以下步骤开始使用:
-
获取组织的Swish证书。可以从Swish公司门户或内部组织获取。如果您正在开发私人项目并希望在Swish环境中进行测试,Swish在其环境页面上提供了可下载的测试证书。
-
使用证书初始化一个
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,
);
...
}
- 创建一个
SwishClient
并提供SwishAgent
。
SwishClient swishClient = SwishClient(
swishAgent: swishAgent,
);
- 现在您可以开始发送支付请求了。请参阅
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
更多关于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');
}
}