Flutter支付集成插件adyen_flutter_dropin的使用
Flutter支付集成插件adyen_flutter_dropin的使用
1dyen_flutter_dropin
这个库不是Adyen官方提供的,而是对flutter_adyen
包的一个分支进行修改,使其与最新的Adyen SDK兼容,并支持更多的支付方式。
可用的支付方式
- 信用卡
- SEPA直接借记
- iDEAL
- Sofort
- Giropay
- Apple Pay
- Google Pay
- PayPal
- 其他未测试过的支付方式
这是一个用于在Android和iOS上集成Adyen的Flutter插件。 使用此插件只需调用一个函数即可打开Adyen的Drop-in方法。
先决条件
资格证书
你需要以下信息:
- clientKey(来自Adyen)
- 金额 & 货币
- 购物者参考(例如userId)
- 后端baseUrl
- Adyen环境(Test, LIVE_EU等)
- 语言(de_DE, en_US等)
- 支付完成后的重定向URL(iOS URL Scheme)以返回到应用
支付方式
在调用插件之前,请确保从后端获取支付方式。为此,请调用/paymentMethods
端点:
{
"groups": [
{
"name": "Credit Card",
"types": [
"amex",
"mc",
"visa"
]
}
],
"paymentMethods": [
{
"brands": [
"amex",
"mc",
"visa"
],
"details": [
{
"key": "encryptedCardNumber",
"type": "cardToken"
},
{
"key": "encryptedSecurityCode",
"type": "cardToken"
},
{
"key": "encryptedExpiryMonth",
"type": "cardToken"
},
{
"key": "encryptedExpiryYear",
"type": "cardToken"
},
{
"key": "holderName",
"optional": true,
"type": "text"
}
],
"name": "Credit Card",
"type": "scheme"
},
{
"name": "PayPal",
"supportsRecurring": true,
"type": "paypal"
}
]
}
应用程序使用这些端点进行支付提交和支付详情调用:
<your base url>/payments
<your base url>/payments/details
插件将发送支付提交调用的数据 包裹成另一个对象如下:
{
payment: <所有需要发送给Adyen的支付数据>,
additionalData: {key: value}
}
// additionalData 可以用于向自己的后端发送额外的支付数据
设置
Android
在您的AndroidManifest.xml
中添加此服务,这将允许Adyen告诉Android应用支付结果。
<application ...>
...
<service
android:name="app.adyen.flutter_adyen.AdyenDropinService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
</application>
Proguard
您需要将以下内容添加到您的proguard规则中:
-keep class com.adyen.** { *; }
-keep class app.adyen.flutter_adyen.** { *; }
iOS
您需要添加一个URL_SCHEME,如果还没有的话。
Flutter实现
要开始支付,您需要像这样调用插件:
try {
String dropInResponse = await FlutterAdyen.openDropIn(
// 你支付方法调用的结果作为json字符串
paymentMethods: paymentMethods,
baseUrl: 'https://your-server.com/',
clientKey: <ADYEN_CLIENT_KEY>,
amount: '1000', // 金额(单位:分)
lineItem: {'id': 'your product ID', 'description': 'Your product description'},
additionalData: {
'someKey': 'Some String'
},
shopperReference: <YouShopperReference>,
// 'adyencheckout://bundleIdentifier/something'
// 但可以是任何你想要的url,你的后端只需要将支付完成后重定向到这个url
returnUrl: 'adyendropin://com.example.app/payment',
// 只允许的环境:LIVE_US, LIVE_AUSTRALIA, LIVE_EUROPE
// 在 /adyen_flutter/android/src/main/kotlin/app/adyen/flutter_adyen/FlutterAdyenPlugin.kt 中添加更多环境
environment: 'TEST', // 在这里添加生产环境:LIVE_US, LIVE_AUSTRALIA 或 LIVE_EUROPE
locale: 'de_DE', // 你首选的语言
currency: 'EUR', // 你首选的货币
);
} on PlatformException {
// 网络错误或其他系统错误
return PaymentResponse.paymentError.rawValue;
}
更多关于Flutter支付集成插件adyen_flutter_dropin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件adyen_flutter_dropin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成adyen_flutter_dropin
插件来进行支付的示例代码。请注意,这只是一个基本的集成示例,实际项目中你可能需要根据业务需求进行进一步的配置和处理。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加adyen_flutter_dropin
依赖:
dependencies:
flutter:
sdk: flutter
adyen_flutter_dropin: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Adyen环境
确保你已经从Adyen获取了必要的配置信息,如clientKey、environment(测试环境为test
,生产环境为live
)等。
3. 创建支付页面
创建一个新的Flutter页面来集成Adyen支付组件。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:adyen_flutter_dropin/adyen_flutter_dropin.dart';
class PaymentPage extends StatefulWidget {
@override
_PaymentPageState createState() => _PaymentPageState();
}
class _PaymentPageState extends State<PaymentPage> {
final AdyenDropIn _adyenDropIn = AdyenDropIn();
final TextEditingController _amountController = TextEditingController();
@override
void initState() {
super.initState();
_amountController.text = "100.00"; // 设置默认支付金额
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Adyen Payment'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _amountController,
decoration: InputDecoration(
labelText: 'Amount',
),
keyboardType: TextInputType.numberWithOptions(decimal: true),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// Adyen 配置信息
final configuration = DropInConfiguration(
environment: Environment.test, // 替换为 Environment.live 用于生产环境
clientKey: "YOUR_CLIENT_KEY", // 替换为你的Client Key
publicKey: "YOUR_PUBLIC_KEY", // 替换为你的Public Key(如果需要)
locale: "en_US", // 可选,设置支付页面语言
paymentMethodsResponse: null, // 如果需要从服务器获取支付方式列表,可以设置这个值
);
// 发起支付请求
try {
final result = await _adyenDropIn.makePayment(
configuration: configuration,
amount: double.parse(_amountController.text),
);
// 处理支付结果
if (result.isSuccessful) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Payment Successful'),
content: Text('Payment details: ${result.paymentData}'),
),
);
} else {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Payment Failed'),
content: Text('Error details: ${result.errorMessage}'),
),
);
}
} catch (e) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Error'),
content: Text('An error occurred: $e'),
),
);
}
},
child: Text('Pay'),
),
],
),
),
);
}
}
4. 路由到支付页面
在你的主应用逻辑中,添加路由到上述创建的支付页面。例如,在main.dart
文件中:
import 'package:flutter/material.dart';
import 'payment_page.dart'; // 假设你的支付页面文件名为payment_page.dart
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Adyen Payment Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Adyen Payment Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PaymentPage()),
);
},
child: Text('Go to Payment'),
),
),
),
);
}
}
注意事项
- 安全性:不要在客户端代码中硬编码敏感信息,如Client Key。最好是从安全的后端服务获取这些信息。
- 支付回调:在实际应用中,你可能需要处理支付成功或失败的回调,并将结果发送到你的服务器进行进一步处理。
- 错误处理:示例代码中的错误处理较为简单,实际应用中应增加更多的错误处理和用户反馈。
通过上述步骤,你应该能够在Flutter应用中成功集成Adyen支付功能。