Flutter插件enzona的介绍与使用
Flutter插件enzona的介绍与使用
描述
该库是一个SDK(仍在开发中),旨在简化对ENZONA API的使用。通过使用此SDK,开发者可以专注于其项目的核心业务逻辑。
可用API
以下是当前可用的API列表:
| API名称 | 状态 |
|---|---|
| PaymentAPI | ✅ |
| QRAPI | ☐ |
| ClaimAPI | ☐ |
| XMET_AccountAPI | ☐ |
| XMET_AccountingOperationAPI | ☐ |
入门指南
在开始使用此SDK之前,建议先查看ENZONA官方文档,了解测试环境(如bulevar/api sandbox)并熟悉API的工作流和功能。
推荐资源:
如何添加此SDK到项目中
首先,在项目中添加enzona作为依赖项,具体步骤如下:
对于纯Dart项目:
dart pub add enzona
对于Flutter项目:
flutter pub add enzona
最后执行以下命令以下载依赖项到您的pub-cache:
dart pub get 或 flutter pub get
如何使用此SDK
使用SDK非常简单,只需创建一个实例并初始化即可。
创建SDK实例:
final enzona = Enzona(
apiUrl: apiUrl, // ENZONA API的基本URL (https://api.enzona.net 或 https://apisandbox.enzona.net)
accessTokenUrl: accessTokenUrl, // 可选,OAuth2认证端点URL (https://api.enzona.net/token 或 https://apisandbox.enzona.net/token),若未指定,默认为 `$apiUrl/token`
consumerKey: consumerKey, // 商户的Consumer Key
consumerSecret: consumerSecret, // 商户的Consumer Secret
scopes: scopes, // 认证Token的范围
timeout: Duration(seconds: 30), // 可选,设置请求超时时间
httpClient: HttpClient(), // 可选,用于自定义HTTP客户端配置
);
初始化SDK:
await enzona.init();
此时,您已成功获取访问ENZONA API的权限!
身份验证机制
ENZONA的API使用OAuth2变体进行身份验证(无Token自动刷新)。此SDK实现了OAuth2,并且会自动处理Token的刷新,无需手动干预。
手动刷新Token:
if(enzona.credentials.isExpired) {
final credentials = await enzona.refreshCredentials();
print(credentials.accessToken);
}
注意事项
为避免属性名、过滤器和值错误,请注意以下类的使用:
Params:定义所有属性名和过滤器。StatusCode:定义交易状态码。Order:定义排序类型。
示例代码:
final filters = <String, dynamic> {
Params.pageIndex: 0,
Params.pageSize: 5,
Params.order: Order.desc,
};
final response = await enzona.paymentAPI.getPayments(filters: filters);
if(response.isSuccessful && (response.body?.isNotEmpty ?? false)) {
final payment = response.body![0];
if(payment.statusCode == StatusCode.confirmada) {
print(payment.amount?.total);
}
}
使用PaymentAPI
通过SDK实例,您可以访问各种API,包括支付API。请注意,认证的scope决定了可访问的API范围。
PaymentAPI支持的功能:
| 功能 | 支持情况 |
|---|---|
| 列表/筛选支付记录 | ✅ |
| 获取单个支付详情 | ✅ |
| 创建支付 | ✅ |
| 完成支付 | ✅ |
| 取消支付 | ✅ |
| 列表/筛选退款 | ✅ |
| 获取单个退款详情 | ✅ |
| 完全退款 | ✅ |
| 部分退款 | ✅ |
示例:列出/筛选支付记录
final response = await enzona.paymentAPI.getPayments(
pageIndex: 0,
pageSize: 5,
merchantUUID: 'test',
merchantOp: 'test',
enzonaOp: 'test',
status: StatusCode.confirmada,
startDate: DateTime.now().subtract(Duration(days: 7)),
endDate: DateTime.now(),
order: Order.desc,
);
if(response.isSuccessful && (response.body?.isNotEmpty ?? false)) {
print('totalCount: ${response.headers[Pagination.totalCountHeader]}');
for(var payment in response.body!) {
print('id: ${payment.transactionUUID}, statusCode: ${payment.statusCode}');
}
}
示例:获取单个支付详情
final response = await enzona.paymentAPI.getPayment(transactionUUID: '支付ID');
if(response.isSuccessful) {
final payment = response.body;
print('id: ${payment?.transactionUUID}, statusCode: ${payment?.statusCode}');
}
示例:创建支付
final payment = PaymentRequest(
returnUrl: "http://url.to.return.after.payment.confirmation",
cancelUrl: "http://url.to.return.after.payment.cancellation",
merchantOpId: PaymentRequest.generateRandomMerchantOpId(),
currency: "CUP",
amount: PaymentAmount(
total: 33,
details: PaymentAmountDetails(
shipping: 1,
tax: 0,
discount: 2,
tip: 4,
),
),
items: [
PaymentItem(
name: "Payment Item 1",
description: "Some item description",
quantity: 2,
price: 15,
tax: 0,
)
],
description: "This is an example payment description",
);
final response = await enzona.paymentAPI.createPayment(data: payment);
if(response.isSuccessful) {
final createdPayment = response.body;
print('id: ${createdPayment?.transactionUUID}, statusCode: ${createdPayment?.statusCode}');
}
示例:完成支付
final response = await enzona.paymentAPI.completePayment(transactionUUID: '支付ID');
if(response.isSuccessful) {
final completedPayment = response.body;
print('id: ${completedPayment?.transactionUUID}, statusCode: ${completedPayment?.statusCode}');
} else if(response.error is ErrorResponse &&
(response.error as ErrorResponse).code == StatusCode.transaccionNoConfirmada) {
final errorResponse = response.error as ErrorResponse;
print('错误信息: ${errorResponse.message}. 支付必须先确认才能完成');
}
示例:取消支付
final response = await enzona.paymentAPI.cancelPayment(transactionUUID: '支付ID');
if(response.isSuccessful) {
final cancelledPayment = response.body;
print('id: ${cancelledPayment?.transactionUUID}, statusCode: ${cancelledPayment?.statusCode}');
} else {
print('发生错误,无法取消支付');
}
示例:获取退款列表
final response = await enzona.paymentAPI.getRefunds(
pageIndex: 0,
pageSize: 5,
merchantUUID: 'test',
transactionUUID: '支付ID',
status: StatusCode.aceptada,
startDate: DateTime.now().subtract(Duration(days: 7)),
endDate: DateTime.now(),
order: Order.desc,
);
if(response.isSuccessful && (response.body?.isNotEmpty ?? false)) {
print('totalCount: ${response.headers[Pagination.totalCountHeader]}');
for(var refund in response.body!) {
print('id: ${refund.transactionUUID}, statusCode: ${refund.statusCode}');
}
}
示例:完全退款
final response = await enzona.paymentAPI.refundPayment(transactionUUID: '支付ID');
if(response.isSuccessful) {
final refund = response.body;
print('id: ${refund?.transactionUUID}, statusCode: ${refund?.statusCode}');
}
示例:部分退款
final refund = Refund(
amount: PaymentAmount(
total: 5,
),
description: 'This is a partial refund'
);
final response = await enzona.paymentAPI.refundPayment(transactionUUID: '支付ID', data: refund);
if(response.isSuccessful) {
final refund = response.body;
print('id: ${refund?.transactionUUID}, statusCode: ${refund?.statusCode}');
}更多关于Flutter插件enzona的介绍与使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter插件enzona的介绍与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
Enzona 是一个用于在 Flutter 应用中集成支付功能的插件。它允许开发者通过 Enzona 的支付网关来处理支付交易。这个插件可能并不是 Flutter 官方插件库中的一部分,因此在使用之前,你可能需要确保它的可靠性和兼容性。
1. 安装 Enzona 插件
首先,你需要在 pubspec.yaml 文件中添加 enzona 插件的依赖项。假设你已经知道插件的名称和版本号,你可以这样添加:
dependencies:
flutter:
sdk: flutter
enzona: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get 来安装依赖。
2. 初始化 Enzona 插件
在使用 Enzona 插件之前,你通常需要对其进行初始化。这通常涉及到设置 API 密钥、环境(沙盒或生产)等。
import 'package:enzona/enzona.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Enzona.initialize(
apiKey: 'your_api_key',
environment: EnzonaEnvironment.sandbox, // 或 EnzonaEnvironment.production
);
runApp(MyApp());
}
3. 创建支付订单
你可以使用 Enzona 插件来创建一个支付订单。通常,你需要提供订单的详细信息,如金额、描述等。
void createPaymentOrder() async {
try {
final response = await Enzona.createPaymentOrder(
amount: 100.0, // 金额
description: 'Test payment', // 描述
);
if (response.success) {
print('Payment order created: ${response.data}');
} else {
print('Failed to create payment order: ${response.error}');
}
} catch (e) {
print('Error creating payment order: $e');
}
}
4. 处理支付回调
在用户完成支付后,Enzona 会通过回调通知你支付结果。你需要在应用中处理这些回调。
void handlePaymentCallback(PaymentCallback callback) {
if (callback.status == PaymentStatus.success) {
print('Payment successful: ${callback.data}');
} else {
print('Payment failed: ${callback.error}');
}
}
5. 集成到用户界面
你可以将支付功能集成到你的应用界面中,例如在一个按钮的点击事件中触发支付流程。
class PaymentScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Payment'),
),
body: Center(
child: ElevatedButton(
onPressed: createPaymentOrder,
child: Text('Pay Now'),
),
),
);
}
}
6. 处理错误和异常
在使用 Enzona 插件时,务必处理好各种可能的错误和异常,以确保应用的稳定性和用户体验。
void createPaymentOrder() async {
try {
final response = await Enzona.createPaymentOrder(
amount: 100.0,
description: 'Test payment',
);
if (response.success) {
print('Payment order created: ${response.data}');
} else {
print('Failed to create payment order: ${response.error}');
}
} catch (e) {
print('Error creating payment order: $e');
}
}

