Flutter支付集成插件adyen_dropin的使用

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

Flutter支付集成插件adyen_dropin的使用

adyen_dropin

注意:此库并非官方Adyen库。

Flutter插件用于集成Adyen的Android和iOS库。此库使您能够通过调用一个函数来打开Adyen的Drop-in方法。

该插件支持3D Secure v2和一次性支付。尚未在循环支付场景中进行测试。

前提条件

凭证

在调用插件之前,您需要拥有以下信息:

  • publicKey(来自Adyen)
  • clientKey(来自Adyen)
  • 金额与货币
  • shopperReference(例如用户ID)
  • 后端baseUrl
  • Adyen环境(测试、LIVE_EU等)
  • 语言环境(de_DE、en_US等)
  • 支付后返回URL(iOS应用的URL Scheme)以重定向回应用

支付方式

在调用插件之前,确保从后端获取支付方式。为此,请调用/paymentMethods端点:

以下是支付方式响应的一个示例:

{
    "groups": [
        {
            "name": "信用卡",
            "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": "信用卡",
            "type": "scheme"
        },
        {
            "name": "PayPal",
            "supportsRecurring": true,
            "type": "paypal"
        }
    ]
}

应用程序使用这些端点进行支付提交和支付详情调用:

<您的基础URL>/payment
<您的基础URL>/payment/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。

如何添加URL_SCHEME

Flutter实现

要开始支付,请按如下方式调用插件:

try {
  String dropInResponse = await FlutterAdyen.openDropIn(
      paymentMethods: paymentMethods,  // 您的支付方式调用结果
      baseUrl: 'https://your-server.com/',
      clientKey: '<ADYEN_CLIENT_KEY>',
      amount: '1000', // 金额(单位为分)
      lineItem: {'id': '您的产品ID', 'description': '您的产品描述'},
      additionalData: {
        'someKey': 'Some String'
      },
      shopperReference: '<YouShopperReference>',
      returnUrl: 'yourAppScheme://payment', // iOS需要
      environment: 'TEST',  // 生产环境:LIVE_US, LIVE_AUSTRALIA 或 LIVE_EUROPE
      locale: 'de_DE', // 您偏好的语言环境
      publicKey: '<您的Adyen公钥>',
      currency: 'EUR');  // 您偏好的货币

} on PlatformException {
  // 网络错误或其他系统错误
  return PaymentResponse.paymentError.rawValue;
}
// Drop-in 返回以下响应字符串
PAYMENT_CANCELLED
PAYMENT_ERROR
Authorised
Refused
Pending
Cancelled
Error
Received

示例代码

import 'dart:convert';

import 'package:adyen_dropin/flutter_adyen.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'mock_data.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? _payment_result = '未知';

  String? dropInResponse;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          onPressed: () async {
            try {
              dropInResponse = await FlutterAdyen.openDropIn(
                  paymentMethods: jsonEncode(examplePaymentMethods),
                  baseUrl: 'https://yourdomain.com',
                  clientKey: 'clientkey',
                  publicKey: 'publickey',
                  locale: 'de_DE',
                  shopperReference: 'asdasda',
                  returnUrl: 'http://asd.de',
                  amount: '1230',
                  lineItem: {'id': '1', 'description': 'adyen 测试'},
                  currency: 'EUR',
                  additionalData: {});
            } on PlatformException catch (e) {
              if (e.code == 'PAYMENT_CANCELLED')
                dropInResponse = '支付已取消';
              else
                dropInResponse = '支付错误';
            }

            setState(() {
              _payment_result = dropInResponse;
            });
          },
        ),
        appBar: AppBar(
          title: const Text('Flutter Adyen'),
        ),
        body: Center(
          child: Text('支付结果: $_payment_result\n'),
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter项目中集成Adyen的Drop-in组件adyen_dropin以处理支付流程,可以极大简化支付UI的实现和支付数据的处理。以下是一个基本的代码示例,展示了如何在Flutter应用中集成和使用adyen_dropin插件。

首先,确保你的Flutter项目已经设置好,并且已经添加了adyen_dropin依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  adyen_dropin: ^x.y.z  # 请替换为最新版本号

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

接下来,配置你的Flutter应用以使用Adyen Drop-in。这通常涉及几个步骤:

  1. 初始化Adyen配置: 在你的应用中,你需要创建一个Adyen配置对象,这个对象包含了进行支付所需的所有必要信息。

  2. 显示Drop-in界面: 使用AdyenDropIn组件来显示支付界面。

  3. 处理支付结果: 处理用户完成支付后的结果。

以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Adyen Drop-in Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  final AdyenDropInController _controller = AdyenDropInController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Adyen Drop-in Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 初始化Adyen配置
            final configuration = AdyenConfiguration(
              environment: AdyenEnvironment.test, // 或 AdyenEnvironment.production
              clientKey: 'your_adyen_client_key_here', // 替换为你的Adyen客户端密钥
              publicKey: 'your_adyen_public_key_here', // 替换为你的Adyen公钥
            );

            // 显示Drop-in界面
            final result = await showCupertinoModalPopup<PaymentResult>(
              context: context,
              builder: (context) {
                return AdyenDropIn(
                  controller: _controller,
                  configuration: configuration,
                  paymentMethodTypes: [
                    PaymentMethodType.card,
                    // 可以添加其他支付方式,如 PaymentMethodType.ideal, PaymentMethodType.sepaDirectDebit 等
                  ],
                  onPaymentCompleted: (result) {
                    // 处理支付结果
                    Navigator.of(context).pop(result);
                  },
                  onError: (error) {
                    // 处理错误
                    print('Error: $error');
                    Navigator.of(context).pop();
                  },
                );
              },
            );

            if (result != null) {
              // 处理支付成功后的逻辑
              print('Payment successful: ${result.toJson()}');
            }
          },
          child: Text('Start Payment'),
        ),
      ),
    );
  }
}

注意事项:

  1. Client Key和Public Key:确保你已经从Adyen获取了正确的clientKeypublicKey,并在代码中正确替换。
  2. 环境设置:在开发阶段使用AdyenEnvironment.test,在生产环境中使用AdyenEnvironment.production
  3. 支付方式:根据你的业务需求配置paymentMethodTypes

以上代码提供了一个基本的框架,展示了如何在Flutter应用中集成Adyen Drop-in,并处理支付流程。根据你的具体需求,你可能需要进一步定制和扩展这个示例。

回到顶部