Flutter支付集成插件cinetpay的使用
Flutter支付集成插件CinetPay的使用
🚀 CinetPay支付集成 👋
该包允许您调用 CinetPay支付网关,执行支付并等待支付完成后的状态。
🔗 使用步骤
使用此包非常简单,只需调用它,并提供以下内容:
- 初始化网关所需的参数
- 支付相关信息
- 支付结果回调
- 错误处理回调
🛠 预备条件
Android
在 android/app/src/main/AndroidManifest.xml
文件中添加权限:
<application
...
android:usesCleartextTraffic="true">
...
</application>
...
<uses-permission android:name="android.permission.INTERNET"/>
修改 minSdkVersion
和 compileSdk
版本(在 android/app/build.gradle
文件中):
minSdkVersion >= 19
compileSdk >= 34
iOS
在 ios/Runner/Info.plist
文件中添加权限:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
初始化网关
网关需要接收以下数据才能正常工作:
apikey
: 商户ID (必填)site_id
: 服务ID (必填)notify_url
: 有效的支付通知URL (必填)
支付信息
为准备支付网关,需提交以下数据:
amount
: 支付金额 (>100 XOF) (必填)currency
: 支付货币 (XOF, XAF, CDN, GNF, USD) (必填)transaction_id
: 唯一交易ID (必填)description
: 支付描述 (必填)channels
: 支付渠道 (可选,默认为’ALL’)metadata
: 元数据 (可选)
支付结果回调
当支付完成后,将返回以下格式的结果:
amount
: 支付金额currency
: 支付货币status
: 支付状态 (ACCEPTED 或 REFUSED)payment_method
: 支付方式description
: 支付描述metadata
: 元数据operator_id
: 操作员支付IDpayment_date
: 支付日期
错误处理回调
错误处理将返回以下格式的结果:
message
: 错误消息description
: 错误描述
👩💻 包的使用示例
以下是一个完整的Flutter应用程序示例,演示了如何使用CinetPay进行支付:
import 'dart:async';
import 'dart:math';
import 'package:cinetpay/cinetpay.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
Future main() async {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
TextEditingController amountController = TextEditingController();
Map<String, dynamic>? response;
Color? color;
IconData? icon;
String? message;
bool show = false;
@override
Widget build(BuildContext context) {
const String title = 'CinetPay Demo';
return GetMaterialApp(
title: title,
theme: ThemeData(
primarySwatch: Colors.green,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Scaffold(
appBar: AppBar(
title: const Text(title),
centerTitle: true,
),
body: SafeArea(
child: Center(
child: ListView(
shrinkWrap: true,
children: [
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (show) Icon(icon, color: color, size: 150),
if (show) Text(message!),
if (show) const SizedBox(height: 50.0),
const Text(
"Example integration Package for Flutter",
style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
const SizedBox(height: 50.0),
const Text(
"Cart informations.",
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
const SizedBox(height: 50.0),
Container(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
margin: const EdgeInsets.symmetric(horizontal: 50.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12.0),
border: Border.all(color: Colors.green),
),
child: TextField(
controller: amountController,
decoration: const InputDecoration(
hintText: "Amount",
border: InputBorder.none,
),
keyboardType: TextInputType.number,
),
),
const SizedBox(height: 40.0),
ElevatedButton(
child: const Text("Pay with CinetPay"),
onPressed: () async {
final String amount = amountController.text.trim();
if (amount.isEmpty) {
// 显示警告
return;
}
try {
double _amount = double.parse(amount);
if (_amount < 100 || _amount > 1500000) {
// 显示警告
return;
}
} catch (_) {
return;
}
amountController.clear();
final String transactionId = Random().nextInt(100000000).toString();
await Get.to(CinetPayCheckout(
title: 'Payment Checkout',
titleStyle: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
titleBackgroundColor: Colors.green,
configData: {
'apikey': 'YOUR_API_KEY',
'site_id': int.parse("YOUR_SITE_ID"),
'notify_url': 'YOUR_NOTIFY_URL'
},
paymentData: {
'transaction_id': transactionId,
'amount': double.parse(amount),
'currency': 'XOF',
'channels': 'ALL',
'description': 'Payment test',
},
waitResponse: (data) {
if (mounted) {
setState(() {
response = data;
print(response);
icon = data['status'] == 'ACCEPTED'
? Icons.check_circle
: Icons.mood_bad_rounded;
color = data['status'] == 'ACCEPTED'
? Colors.green
: Colors.redAccent;
show = true;
Get.back();
});
}
},
onError: (data) {
if (mounted) {
setState(() {
response = data;
message = response!['description'];
print(response);
icon = Icons.warning_rounded;
color = Colors.yellowAccent;
show = true;
Get.back();
});
}
},
));
},
)
],
),
],
),
),
),
),
);
}
}
😄 作者
AGBETOGOR Germain (Germinator)
如需更多信息,请联系支持团队。
更多关于Flutter支付集成插件cinetpay的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件cinetpay的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中集成CinetPay支付插件通常涉及几个步骤,包括添加依赖、配置参数、处理支付回调等。以下是一个简化的示例代码,展示了如何在Flutter应用中集成CinetPay支付插件。请注意,具体实现可能会根据CinetPay的SDK版本和Flutter版本有所不同。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加CinetPay的Flutter插件依赖(假设存在一个名为cinetpay_flutter
的插件,实际使用时请替换为真实存在的插件名称或URL)。
dependencies:
flutter:
sdk: flutter
cinetpay_flutter: ^x.y.z # 替换为实际版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件并配置参数
在你的Flutter项目的Dart文件中(例如main.dart
),导入CinetPay插件并配置必要的支付参数。
import 'package:flutter/material.dart';
import 'package:cinetpay_flutter/cinetpay_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter CinetPay Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Flutter CinetPay Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 配置CinetPay支付参数
Map<String, dynamic> paymentParams = {
'amount': '100.00', // 支付金额
'currency': 'USD', // 货币类型
'description': 'Product Purchase', // 支付描述
'orderId': '123456789', // 订单ID
'merchantId': 'your_merchant_id', // 商户ID
'secretKey': 'your_secret_key', // 密钥
// 其他必要的参数...
};
try {
// 发起支付请求
bool result = await CinetPayFlutter.startPayment(paymentParams);
if (result) {
// 支付成功处理
print('Payment successful');
} else {
// 支付失败处理
print('Payment failed');
}
} catch (e) {
// 异常处理
print('Error during payment: $e');
}
},
child: Text('Pay Now'),
),
),
),
);
}
}
3. 处理支付回调
CinetPay支付完成后,通常会有支付结果的回调。在Flutter中,这通常是通过插件提供的回调机制来实现的。具体实现取决于插件的API设计,但以下是一个假设性的示例,展示了如何处理支付回调。
// 假设CinetPayFlutter插件提供了一个监听支付结果的API
CinetPayFlutter.onPaymentResult((result) {
if (result['status'] == 'success') {
// 支付成功,处理支付结果
print('Payment successful with transaction ID: ${result['transactionId']}');
} else {
// 支付失败或取消,处理错误情况
print('Payment failed or cancelled: ${result['errorMessage'] ?? 'Unknown error'}');
}
});
注意:上述代码中的CinetPayFlutter.onPaymentResult
是一个假设性的API,实际使用时请参考CinetPay Flutter插件的官方文档来获取正确的回调处理方式。
4. 注意事项
- 安全性:确保你的商户ID和密钥不会硬编码在客户端代码中,最好是通过服务器安全地传递给客户端。
- 错误处理:在实际应用中,添加更详细的错误处理和用户反馈。
- 沙箱环境:在开发过程中,使用CinetPay提供的沙箱环境进行测试,以避免产生真实的支付交易。
总结
以上是一个简化的Flutter集成CinetPay支付插件的示例代码。实际使用时,请根据CinetPay Flutter插件的官方文档进行详细的配置和测试。