Flutter支付安全插件adyen_client_side_encryption的使用

Flutter支付安全插件adyen_client_side_encryption的使用

说明

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

这是一个用于在客户端加密信用卡详细信息的Flutter插件。加密过程通过Adyen SDK来实现。

示例

final card = UnencryptedCard(
  number: '123456789',
  expiryMonth: '12',
  expiryYear: '2025',
  cvc: '123',
  cardHolderName: 'John Smith',
);
final encryptedCardToken = await CardEncrypter.encryptCard(card, publicKey);

完整示例代码

import 'package:adyen_client_side_encryption/card_encrypter.dart';
import 'package:adyen_client_side_encryption/unencrypted_card.dart';
import 'package:flutter/material.dart';
import 'dart:async';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

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

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台消息是异步的,因此我们在异步方法中初始化。
  Future<void> initPlatformState() async {
    var publicKey = '请在此处添加您的公钥';
    var encryptedCard = await CardEncrypter.encryptCard(UnencryptedCard(cvc: '232'), publicKey);

    // 如果在异步平台消息还在飞行时,小部件从树中移除,则我们想要丢弃回复而不是调用setState来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() => encryptedCardText = encryptedCard.toString());
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('加密卡示例'),
        ),
        body: Center(
          child: Text('运行于: $encryptedCardText\n'),
        ),
      ),
    );
  }
}

代码解释

  1. 导入必要的包

    import 'package:adyen_client_side_encryption/card_encrypter.dart';
    import 'package:adyen_client_side_encryption/unencrypted_card.dart';
    import 'package:flutter/material.dart';
    import 'dart:async';
    
  2. 定义主应用类 MyApp

    class MyApp extends StatefulWidget {
      const MyApp({Key? key}) : super(key: key);
    
      [@override](/user/override)
      State<MyApp> createState() => _MyAppState();
    }
    
  3. 定义状态类 _MyAppState

    class _MyAppState extends State<MyApp> {
      String encryptedCardText = '未知';
    
      [@override](/user/override)
      void initState() {
        super.initState();
        initPlatformState();
      }
    
  4. 初始化平台状态

    Future<void> initPlatformState() async {
      var publicKey = '请在此处添加您的公钥';
      var encryptedCard = await CardEncrypter.encryptCard(UnencryptedCard(cvc: '232'), publicKey);
    
      if (!mounted) return;
    
      setState(() => encryptedCardText = encryptedCard.toString());
    }
    
  5. 构建应用界面

    [@override](/user/override)
    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text('加密卡示例'),
          ),
          body: Center(
            child: Text('运行于: $encryptedCardText\n'),
          ),
        ),
      );
    }
    

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

1 回复

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


当然,关于在Flutter项目中使用adyen_client_side_encryption插件来实现支付安全,以下是一个基本的使用示例。这个插件主要用于在客户端加密支付数据,以确保数据传输的安全性。

首先,确保你已经在pubspec.yaml文件中添加了adyen_client_side_encryption依赖:

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

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

接下来,我们需要在Flutter项目中配置并使用这个插件。以下是一个简单的代码示例,展示了如何使用adyen_client_side_encryption来加密支付卡信息:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _formKey = GlobalKey<FormState>();

  String cardNumber = '';
  String cardExpiryMonth = '';
  String cardExpiryYear = '';
  String cardCvc = '';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Adyen Client-Side Encryption Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Form(
            key: _formKey,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                TextFormField(
                  decoration: InputDecoration(labelText: 'Card Number'),
                  keyboardType: TextInputType.number,
                  maxLength: 19,
                  validator: (value) {
                    if (value.isEmpty || value.length < 16) {
                      return 'Please enter a valid card number.';
                    }
                    return null;
                  },
                  onChanged: (value) {
                    setState(() {
                      cardNumber = value;
                    });
                  },
                ),
                TextFormField(
                  decoration: InputDecoration(labelText: 'Expiry Month (MM)'),
                  keyboardType: TextInputType.number,
                  maxLength: 2,
                  validator: (value) {
                    if (value.isEmpty || value.length != 2) {
                      return 'Please enter a valid expiry month.';
                    }
                    return null;
                  },
                  onChanged: (value) {
                    setState(() {
                      cardExpiryMonth = value;
                    });
                  },
                ),
                TextFormField(
                  decoration: InputDecoration(labelText: 'Expiry Year (YY)'),
                  keyboardType: TextInputType.number,
                  maxLength: 2,
                  validator: (value) {
                    if (value.isEmpty || value.length != 2) {
                      return 'Please enter a valid expiry year.';
                    }
                    return null;
                  },
                  onChanged: (value) {
                    setState(() {
                      cardExpiryYear = value;
                    });
                  },
                ),
                TextFormField(
                  decoration: InputDecoration(labelText: 'CVC'),
                  keyboardType: TextInputType.number,
                  maxLength: 3 or 4, // CVC can be 3 or 4 digits depending on the card brand
                  validator: (value) {
                    if (value.isEmpty || (value.length < 3 && value.length > 4)) {
                      return 'Please enter a valid CVC.';
                    }
                    return null;
                  },
                  onChanged: (value) {
                    setState(() {
                      cardCvc = value;
                    });
                  },
                ),
                SizedBox(height: 20),
                ElevatedButton(
                  onPressed: () async {
                    if (_formKey.currentState.validate()) {
                      try {
                        // Initialize the Adyen CSE library with your public key
                        final AdyenCSE adyenCSE = AdyenCSE(publicKey: 'YOUR_ADYEN_PUBLIC_KEY');

                        // Create the encryption request
                        final encryptionRequest = EncryptionRequest(
                          cardNumber: cardNumber,
                          expiryMonth: cardExpiryMonth,
                          expiryYear: cardExpiryYear,
                          cvc: cardCvc,
                        );

                        // Encrypt the payment data
                        final EncryptionResponse response = await adyenCSE.encrypt(encryptionRequest);

                        // Now you can send the encrypted data to your server
                        print('Encrypted Data: ${response.encryptedData}');
                        print('Encrypted Card Number: ${response.encryptedCardNumber}');
                      } catch (e) {
                        print('Encryption failed: $e');
                      }
                    }
                  },
                  child: Text('Encrypt and Submit'),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的表单来收集支付卡信息(卡号、有效期、CVC),并使用adyen_client_side_encryption插件来加密这些信息。请注意,你需要替换'YOUR_ADYEN_PUBLIC_KEY'为你的Adyen公钥。

确保在正式环境中,不要硬编码公钥或任何敏感信息,而是从安全的位置(如环境变量或后端服务)获取这些信息。此外,加密后的数据应安全地发送到你的服务器进行处理。

回到顶部