Flutter支付集成插件adyen_flutter_dropin的使用

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

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

1 回复

更多关于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'),
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 安全性:不要在客户端代码中硬编码敏感信息,如Client Key。最好是从安全的后端服务获取这些信息。
  2. 支付回调:在实际应用中,你可能需要处理支付成功或失败的回调,并将结果发送到你的服务器进行进一步处理。
  3. 错误处理:示例代码中的错误处理较为简单,实际应用中应增加更多的错误处理和用户反馈。

通过上述步骤,你应该能够在Flutter应用中成功集成Adyen支付功能。

回到顶部