Flutter支付集成插件cielo_lio_helper的使用
Flutter支付集成插件cielo_lio_helper的使用
一个用于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
更多关于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的文档,你可能需要一些配置信息,如merchantId
、publicKey
等。确保你已经从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插件的文档
注意事项
- 安全性:不要在客户端存储敏感信息,如真实的信用卡数据。这个示例仅用于演示目的。
- 错误处理:在生产环境中,你需要更全面的错误处理逻辑。
- 支付环境:在开发中使用沙盒环境,上线前切换到生产环境。
- 依赖版本:确保使用最新版本的
cielo_lio_helper
插件,以获取最新的功能和安全修复。
这个示例代码提供了一个基本的框架,你可以根据需要进行扩展和修改。