Flutter支付集成插件cielo_lio_helper的使用

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

Flutter支付集成插件cielo_lio_helper的使用

pub package

一个用于Cielo Lio V2的Flutter插件。

开始使用

在你的Flutter项目中添加依赖:

dependencies:
  ...
  cielo_lio_helper: ^0.1.0

如需了解更多关于Flutter的信息,请参阅官方文档

配置

意图过滤器

根据需求设置意图过滤器:

打印响应意图过滤器示例
<!-- 示例:接收来自Lio的打印响应,如果需要可更改host和scheme -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:host="dev.mauricifj"
        android:scheme="print_response" />
</intent-filter>
支付响应意图过滤器示例
<!-- 示例:接收来自Lio的支付响应,如果需要可更改host和scheme -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:host="dev.mauricifj"
        android:scheme="payment_response" />
</intent-filter>
取消响应意图过滤器示例
<!-- 示例:接收来自Lio的取消响应,如果需要可更改host和scheme -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:host="dev.mauricifj"
        android:scheme="reversal_response" />
</intent-filter>

初始化

通过上一步中的host和scheme初始化cielo_lio_helper

CieloLioHelper.init(
    host: "dev.mauricifj",
    schemes: SchemeAggregate(
        printResponseScheme: "print_response",
        paymentResponseScheme: "payment_response",
        reversalResponseScheme: "reversal_response",
    ),
);

使用方法

可以通过顶级函数使用该库,它们允许你以最小的麻烦使用InfoManager和OrderManager。

获取EC示例

String ec;
try {
    ec = await CieloLioHelper.ec;
} on PlatformException {
    ec = 'Failed to get ec.';
}

获取逻辑编号示例

String logicNumber;
try {
    logicNumber = await CieloLioHelper.logicNumber;
} on PlatformException {
    logicNumber = 'Failed to get logic number.';
}

获取电池电量示例

double batteryLevel;
try {
    batteryLevel = await CieloLioHelper.batteryLevel;
} on PlatformException {
    batteryLevel = -1;
}

结账示例

var random = Random();
var unitPrice = random.nextInt(400) + 100;
var quantity = random.nextInt(9) + 1;
var total = unitPrice * quantity;

var request = CheckoutRequest(
    clientID: "YOUR-CLIENT-ID",
    accessToken: "YOUR-ACCESS-TOKEN",
    value: total,
    paymentCode: "CREDITO_AVISTA",
    installments: 0,
    email: "email@email.com.br",
    merchantCode: "0000000000000003",
    reference: "reference_text",
    items: List.from(
    [
        Item(
            sku: "${Random().nextInt(100000) + 1000}",
            name: "water bottle",
            unitPrice: unitPrice,
            quantity: quantity,
            unitOfMeasure: "bottle",
        ),
    ],
    ),
);

CieloLioHelper.checkout(request, (response) {
    print(response.id);
});

取消支付示例

var request = CancelRequest(
    clientID: "YOUR-CLIENT-ID",
    accessToken: "YOUR-ACCESS-TOKEN",
    value: paymentResponse.payments[0].amount,
    authCode: paymentResponse.payments[0].authCode,
    cieloCode: paymentResponse.payments[0].cieloCode,
    merchantCode: paymentResponse.payments[0].merchantCode,
    id: paymentResponse.id,
);

CieloLioHelper.cancelPayment(request, (response) {
    print(response.id);
});

打印示例

CieloLioHelper.enqueue("SAMPLE TEXT", PrintAlignment.LEFT, 30, 1);
CieloLioHelper.enqueue("SAMPLE TEXT", PrintAlignment.CENTER, 20, 2);
CieloLioHelper.enqueue("SAMPLE TEXT\n\n\n", PrintAlignment.RIGHT, 10, 2);

CieloLioHelper.printQueue((LioResponse response) {
    print(response.code);
    print(response.message);
});

示例代码

以下是一个完整的示例代码,展示了如何使用cielo_lio_helper插件进行支付集成。

import 'dart:async';
import 'dart:math';

import 'package:cielo_lio_helper/cielo_lio_helper.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

const String sampleText = "SAMPLE TEXT";

const String clientId = "YOUR-CLIENT-ID";
const String accessToken = "YOUR-ACCESS-TOKEN";

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

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

class _MyAppState extends State<MyApp> {
  String _ec = 'Unknown';
  String _logicNumber = 'Unknown';
  double _batteryLevel = -1;
  LioResponse _printResponse;
  bool _isPrinting = false;
  CancelRequest _cancelRequest;

  [@override](/user/override)
  void initState() {
    super.initState();
    initECState();
    initLogicNumberState();
    initBatteryLevelState();
    initCieloLioHelper();
  }

  initCieloLioHelper() {
    CieloLioHelper.init(
      host: "dev.mauricifj",
      schemes: SchemeAggregate(
        printResponseScheme: "print_response",
        paymentResponseScheme: "payment_response",
        reversalResponseScheme: "reversal_response",
      ),
    );
  }

  printSampleTexts() {
    setState(() => _isPrinting = true);

    for (int i = 15; i <= 30; i += 5) {
      for (int j = 0; j < 10; j++) {
        CieloLioHelper.enqueue(sampleText, PrintAlignment.CENTER, i, j);
      }
    }

    CieloLioHelper.enqueue("\n\n\n", PrintAlignment.CENTER, 20, 1);

    CieloLioHelper.printQueue((LioResponse response) {
      setState(() {
        _printResponse = response;
        _isPrinting = false;
      });
    });
  }

  Future<void> initECState() async {
    String ec;
    try {
      ec = await CieloLioHelper.ec;
    } on PlatformException {
      _ec = 'Failed to get ec.';
    }

    if (!mounted) return;

    setState(() {
      _ec = ec;
    });
  }

  Future<void> initLogicNumberState() async {
    String logicNumber;
    try {
      logicNumber = await CieloLioHelper.logicNumber;
    } on PlatformException {
      logicNumber = 'Failed to get logic number.';
    }

    if (!mounted) return;

    setState(() {
      _logicNumber = logicNumber;
    });
  }

  Future<void> initBatteryLevelState() async {
    double batteryLevel;
    try {
      batteryLevel = await CieloLioHelper.batteryLevel;
    } on PlatformException {
      batteryLevel = -1;
    }

    if (!mounted) return;

    setState(() {
      _batteryLevel = batteryLevel;
    });
  }

  checkout() {
    var random = Random();
    var unitPrice = random.nextInt(400) + 100;
    var quantity = random.nextInt(9) + 1;
    var total = unitPrice * quantity;

    var request = CheckoutRequest(
      clientID: clientId,
      accessToken: accessToken,
      value: total,
      paymentCode: "CREDITO_AVISTA",
      installments: 0,
      email: "dev.sdk@braspag.com.br",
      merchantCode: "0000000000000003",
      reference: "reference_text",
      items: List.from(
        [
          Item(
            sku: "${Random().nextInt(100000) + 1000}",
            name: "water bottle",
            unitPrice: unitPrice,
            quantity: quantity,
            unitOfMeasure: "bottle",
          ),
        ],
      ),
    );

    CieloLioHelper.checkout(request, (response) {
      _cancelRequest = CancelRequest(
        accessToken: accessToken,
        clientID: clientId,
        authCode: response.payments[0].authCode,
        cieloCode: response.payments[0].cieloCode,
        merchantCode: response.payments[0].merchantCode,
        value: response.payments[0].amount,
        id: response.id,
      );
    });
  }

  cancelLastPayment() {
    if (_cancelRequest != null) {
      CieloLioHelper.cancelPayment(_cancelRequest, (response) {
        print(response.id);
      });
    }
  }

  printQueue() {
    CieloLioHelper.enqueue(sampleText, PrintAlignment.CENTER, 30, 1);
    CieloLioHelper.enqueue("\n\n\n", PrintAlignment.CENTER, 30, 1);

    CieloLioHelper.printQueue((LioResponse response) => setState(() {
          _printResponse = response;
          _isPrinting = false;
        }));
  }

  String checkPrintState() {
    if (_isPrinting) return "PRINTING...";
    if (_printResponse?.message != null) return _printResponse.message;
    return "Unknown";
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            children: [
              Text('EC: $_ec'),
              Text('LOGIC NUMBER: $_logicNumber'),
              Text(
                  'BATTERY LEVEL: ${_batteryLevel >= 0 ? "${_batteryLevel.toString()}%" : "Unknown"}'),
              Text('PRINT STATE: ${checkPrintState()}'),
              ElevatedButton(
                  onPressed: () => printSampleTexts(), child: Text("Imprimir")),
              ElevatedButton(onPressed: () => checkout(), child: Text("Pagar")),
              ElevatedButton(
                  onPressed: () => cancelLastPayment(),
                  child: Text("Cancelar último pagamento")),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用cielo_lio_helper插件的一个示例。这个插件通常用于集成Cielo的支付网关。首先,你需要确保你的Flutter项目已经设置好,并且已经添加了cielo_lio_helper插件。

步骤 1: 添加依赖

在你的pubspec.yaml文件中添加cielo_lio_helper依赖:

dependencies:
  flutter:
    sdk: flutter
  cielo_lio_helper: ^最新版本号  # 请替换为实际的最新版本号

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

步骤 2: 配置插件

根据Cielo的文档,你可能需要一些配置信息,如merchantIdpublicKey等。确保你已经从Cielo获取了这些必要的配置信息。

步骤 3: 初始化插件并进行支付

在你的Flutter应用中,你需要初始化cielo_lio_helper插件并调用支付方法。以下是一个简单的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PaymentScreen(),
    );
  }
}

class PaymentScreen extends StatefulWidget {
  @override
  _PaymentScreenState createState() => _PaymentScreenState();
}

class _PaymentScreenState extends State<PaymentScreen> {
  final CieloLioHelper cieloLioHelper = CieloLioHelper();

  @override
  void initState() {
    super.initState();
    // 初始化插件,这里假设你已经有了 merchantId 和 publicKey
    cieloLioHelper.init(
      merchantId: 'your_merchant_id',
      publicKey: 'your_public_key',
      environment: CieloEnvironment.sandbox,  // 使用沙盒环境进行测试,生产环境请使用CieloEnvironment.production
    );
  }

  void startPayment() async {
    try {
      // 创建支付请求
      final paymentRequest = PaymentRequest(
        amount: 1000,  // 支付金额,单位为分(例如1000表示10.00元)
        currency: 'BRL',
        softDescriptor: 'Test Payment',
        installments: 1,  // 分期数
        card: Card(
          cardNumber: '4111111111111111',
          holder: 'John Doe',
          expiryMonth: '12',
          expiryYear: '25',
          cvv: '123',
        ),
      );

      // 发起支付
      final paymentResponse = await cieloLioHelper.createPayment(paymentRequest);

      if (paymentResponse.status == 'AUTHORIZED') {
        // 支付成功
        print('Payment successful: ${paymentResponse.paymentId}');
      } else {
        // 支付失败
        print('Payment failed: ${paymentResponse.message}');
      }
    } catch (e) {
      // 处理异常
      print('Error: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Payment Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: startPayment,
          child: Text('Start Payment'),
        ),
      ),
    );
  }
}

// 假设你已经有以下数据模型类
class PaymentRequest {
  final int amount;
  final String currency;
  final String softDescriptor;
  final int installments;
  final Card card;

  PaymentRequest({
    required this.amount,
    required this.currency,
    required this.softDescriptor,
    required this.installments,
    required this.card,
  });
}

class Card {
  final String cardNumber;
  final String holder;
  final String expiryMonth;
  final String expiryYear;
  final String cvv;

  Card({
    required this.cardNumber,
    required this.holder,
    required this.expiryMonth,
    required this.expiryYear,
    required this.cvv,
  });
}

class PaymentResponse {
  final String status;
  final String? paymentId;
  final String? message;

  PaymentResponse({
    required this.status,
    this.paymentId,
    this.message,
  });
}

// 注意:这里的PaymentRequest, Card, 和 PaymentResponse类是基于假设的,实际使用时请参考cielo_lio_helper插件的文档

注意事项

  1. 安全性:不要在客户端存储敏感信息,如真实的信用卡数据。这个示例仅用于演示目的。
  2. 错误处理:在生产环境中,你需要更全面的错误处理逻辑。
  3. 支付环境:在开发中使用沙盒环境,上线前切换到生产环境。
  4. 依赖版本:确保使用最新版本的cielo_lio_helper插件,以获取最新的功能和安全修复。

这个示例代码提供了一个基本的框架,你可以根据需要进行扩展和修改。

回到顶部