Flutter支付集成插件cielo_flutter的使用

Flutter支付集成插件cielo_flutter的使用

概述

cielo_flutter 是一个非官方的 Flutter 插件,用于集成 Cielo 和 Braspag 的支付服务。

免责声明

该 SDK 仅用于个人用途,并且功能仅限于满足我的项目需求。如果您希望贡献代码,请遵循相同的编码风格。幸运的是,这是一个非常简单的 SDK,易于理解和扩展。

开始使用

安装

pubspec.yaml 文件中添加 cielo_flutter

flutter pub add cielo_flutter
配置

首先,导入 cielo_flutter 包并初始化核心配置:

import 'package:cielo_flutter/cielo_flutter.dart';

// 初始化核心配置
const options = CieloOptions(
  environment: CieloEnvironment.sandbox,
  provider: CieloProvider.braspag,
  language: CieloLanguage.pt,
);
Cielo.init(options);

// 初始化 Silent Order Post
const sop = CieloSOPOptions(enableTokenize: true);
Cielo.initSOP(sop);
使用
Silent Order Post

了解更多信息:

发送信用卡信息:

import 'package:cielo_flutter/cielo_flutter.dart';

String accessToken = "<SOP access token generated by your backend>";
CieloCard card = CieloCard(
  cardNumber: '0000000000000001',
  holder: 'John Doe',
  expirationDate: '12/2021',
  securityCode: '123',
);
await Cielo.sop.sendCard(card, accessToken: accessToken);
错误处理
try {
  Cielo.sop.sendCard(brokenCard, accessToken: accessToken);
} on CieloCardValidationException catch (e) {
  // 处理卡片验证错误。
  print(e.field); // 导致错误的字段名称。
  print(e.code); // 用于开发的错误代码。
  print(e.message); // 用户友好的消息,根据核心选项进行本地化。
} on CieloException catch (e) {
  // 处理 SDK 错误。
  // 目前,仅在 SOP 中无效的 accessToken 抛出。
  print(e.code); // 用于开发的错误代码。
  print(e.message); // 用于开发的错误消息。
} on CieloAPIException catch (e) {
  // 处理来自提供商的 API 错误。
  print(e.code); // 用于开发的错误代码。
  print(e.message); // 用于开发的错误消息。
}
其他
// 重置 SDK 所有配置。
Cielo.dispose();

许可证

该 SDK 采用 MIT 许可证,详情见 LICENSE


示例代码

以下是完整的示例代码,展示了如何在 Flutter 应用中使用 cielo_flutter 插件。

import 'package:cielo_flutter/cielo_flutter.dart';
import 'package:credit_card_form/credit_card_form.dart';
import 'package:flutter/material.dart';

void main() {
  // 初始化 Cielo 一次在启动时。
  const options = CieloOptions(
    provider: CieloProvider.braspag,
    environment: CieloEnvironment.sandbox,
    language: CieloLanguage.pt,
  );
  const sop = CieloSOPOptions(enableTokenize: true);
  Cielo.init(options);
  Cielo.initSOP(sop);

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 这个小部件是您的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cielo Flutter',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final controller = CreditCardController();
  CieloCard? card;
  String? accessToken;
  dynamic response;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('Cielo Flutter'),
      ),
      body: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            CreditCardForm(
              controller: controller,
              theme: CreditCardLightTheme(),
              onChanged: (CreditCardResult result) {
                card = CieloCard(
                  rawNumber: result.cardNumber,
                  holderName: result.cardHolderName,
                  expirationDate: '${result.expirationMonth}/20${result.expirationYear}',
                  securityCode: result.cvc,
                );
              },
            ),
            TextField(
              onChanged: (value) {
                accessToken = value;
              },
              decoration: const InputDecoration(
                labelText: 'SOP Access Token',
              ),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                if (card != null && accessToken != null) {
                  try {
                    final r = await Cielo.sop.sendCard(card!, accessToken: accessToken!);
                    setState(() {
                      response = r;
                    });
                  } on CieloAPIException catch (e) {
                    setState(() {
                      response = e.toString();
                    });
                  } on CieloCardValidationException catch (e) {
                    setState(() {
                      // 使用 e.message 作为用户友好部分的消息。
                      response = e.toString();
                    });
                  } on CieloException catch (e) {
                    setState(() {
                      response = e.toString();
                    });
                  }
                }
              },
              child: const Text('保存卡片'),
            ),
            const SizedBox(height: 24),
            if (response != null)
              Card(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text(response!.toString(), textAlign: TextAlign.center),
                ),
              ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


cielo_flutter 是一个用于在 Flutter 应用中集成 Cielo 支付功能的插件。Cielo 是巴西最大的支付处理公司之一,提供多种支付方式,包括信用卡、借记卡和电子钱包等。

本文将介绍如何在 Flutter 项目中使用 cielo_flutter 插件来实现支付功能。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 cielo_flutter 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  cielo_flutter: ^latest_version

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

2. 初始化 Cielo

在使用 cielo_flutter 之前,你需要初始化 Cielo 的支付环境。通常,你需要在应用启动时进行初始化。

import 'package:cielo_flutter/cielo_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Cielo
  await CieloFlutter.initialize(
    merchantId: 'YOUR_MERCHANT_ID',
    merchantKey: 'YOUR_MERCHANT_KEY',
    environment: CieloEnvironment.sandbox, // 使用沙盒环境进行测试
  );

  runApp(MyApp());
}

3. 创建支付请求

接下来,你可以创建一个支付请求。通常需要提供支付金额、支付方式(信用卡、借记卡等)以及其他相关信息。

import 'package:cielo_flutter/cielo_flutter.dart';

Future<void> makePayment() async {
  final paymentRequest = PaymentRequest(
    amount: 1000, // 支付金额(以分为单位)
    currency: Currency.brl, // 货币类型(巴西雷亚尔)
    paymentType: PaymentType.creditCard, // 支付类型(信用卡)
    card: Card(
      cardNumber: '4551870000000181', // 信用卡号
      holder: 'Teste Holder', // 持卡人姓名
      expirationDate: '12/2023', // 过期日期
      securityCode: '123', // 安全码
      brand: CardBrand.visa, // 信用卡品牌
    ),
  );

  try {
    final paymentResult = await CieloFlutter.makePayment(paymentRequest);
    print('Payment successful: ${paymentResult.paymentId}');
  } catch (e) {
    print('Payment failed: $e');
  }
}

4. 处理支付结果

makePayment 方法会返回一个 PaymentResult 对象,其中包含支付的状态和支付 ID。你可以根据支付结果来更新用户界面或执行其他操作。

if (paymentResult.status == PaymentStatus.approved) {
  // 支付成功
  print('Payment approved with ID: ${paymentResult.paymentId}');
} else {
  // 支付失败或取消
  print('Payment failed or canceled');
}

5. 处理错误

在支付过程中,可能会遇到各种错误,例如网络问题、支付卡无效等。你可以使用 try-catch 块来捕获并处理这些错误。

try {
  final paymentResult = await CieloFlutter.makePayment(paymentRequest);
  // 处理支付成功
} on CieloException catch (e) {
  // 捕获 Cielo 相关的错误
  print('Cielo error: ${e.message}');
} catch (e) {
  // 捕获其他错误
  print('Error: $e');
}

6. 使用其他支付方式

除了信用卡支付,cielo_flutter 还支持其他支付方式,例如借记卡、电子钱包等。你可以在 PaymentRequest 中指定不同的 paymentType 和支付方式。

final paymentRequest = PaymentRequest(
  amount: 1000,
  currency: Currency.brl,
  paymentType: PaymentType.debitCard, // 借记卡支付
  card: Card(
    cardNumber: '4551870000000181',
    holder: 'Teste Holder',
    expirationDate: '12/2023',
    securityCode: '123',
    brand: CardBrand.visa,
  ),
);
回到顶部