Flutter支付功能插件paychangu_flutter的使用
Flutter支付功能插件paychangu_flutter的使用
PayChangu Flutter SDK
一个用于将PayChangu支付网关集成到Flutter应用程序中的SDK。该SDK提供了一种简单且安全的方式来接受通过多种支付方式(包括Airtel Money、TNM Mpamba和信用卡)进行的付款。
特性
- 🔒 安全的支付处理
- 💳 多种支付方式支持
- 🌐 基于WebView的结账体验
- ✨ 简单的集成
- 🔄 实时支付状态更新
- ⚡ 异步支付处理
- 🛠️ 可定制的UI元素
- ✅ 交易验证
开始使用
前提条件
- Flutter SDK
- PayChangu商户账户和API凭证
- 最低Flutter版本: 1.17.0
- Dart SDK: ^3.5.4
安装
在你的pubspec.yaml
文件中添加以下内容:
dependencies:
paychangu_flutter: ^0.0.1
然后运行以下命令:
flutter pub get
使用方法
1. 初始化PayChangu
import 'package:paychangu_flutter/paychangu_flutter.dart';
final config = PayChanguConfig(
secretKey: 'your_secret_key_here',
isTestMode: true, // 生产环境设置为false
);
final paychangu = PayChangu(config);
2. 创建支付请求
final request = PaymentRequest(
txRef: 'unique_transaction_reference', // 唯一的交易参考
firstName: 'John', // 名字
lastName: 'Doe', // 姓氏
email: 'john@example.com', // 邮箱
currency: Currency.MWK, // 货币类型
amount: 1000, // 金额
callbackUrl: 'https://your-domain.com/callback', // 回调URL
returnUrl: 'https://your-domain.com/return', // 返回URL
);
3. 启动支付
Widget buildPaymentWidget() {
return paychangu.launchPayment(
request: request,
onSuccess: (response) {
print('Payment successful: $response');
// 成功后验证交易
verifyTransaction(response['tx_ref']);
},
onError: (error) {
print('Payment failed: $error');
},
onCancel: () {
print('Payment cancelled');
},
);
}
4. 验证交易
始终在服务器端验证交易,然后再向客户提供价值:
Future<void> verifyTransaction(String txRef) async {
try {
// 验证交易
final verification = await paychangu.verifyTransaction(txRef);
// 验证支付详情
final isValid = paychangu.validatePayment(
verification,
expectedTxRef: txRef,
expectedCurrency: 'MWK',
expectedAmount: 1000,
);
if (isValid) {
// 支付有效,向客户提供价值
print('Payment verified successfully');
print('Amount paid: ${verification.data.amount}');
print('Payment channel: ${verification.data.authorization.channel}');
print('Transaction reference: ${verification.data.txRef}');
} else {
// 支付验证失败
print('Payment validation failed');
}
} on PayChanguException catch (e) {
print('Verification failed: ${e.message}');
if (e.details != null) {
print('Error details: ${e.details}');
}
}
}
完整示例
这是一个实现支付和验证的完整示例:
class PaymentScreen extends StatelessWidget {
final paychangu = PayChangu(
PayChanguConfig(
secretKey: 'your_secret_key_here',
isTestMode: true,
),
);
Future<void> _handlePaymentSuccess(Map<String, dynamic> response) async {
try {
final verification = await paychangu.verifyTransaction(response['tx_ref']);
final isValid = paychangu.validatePayment(
verification,
expectedTxRef: response['tx_ref'],
expectedCurrency: 'MWK',
expectedAmount: 1000,
);
if (isValid) {
// 处理成功的支付
print('Payment verified: ${verification.data.amount} ${verification.data.currency}');
}
} catch (e) {
print('Verification failed: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Payment')),
body: Center(
child: ElevatedButton(
onPressed: () {
final request = PaymentRequest(
txRef: 'tx-${DateTime.now().millisecondsSinceEpoch}', // 生成唯一的交易参考
firstName: 'John',
lastName: 'Doe',
email: 'john@example.com',
currency: Currency.MWK,
amount: 1000,
callbackUrl: 'https://your-domain.com/callback',
returnUrl: 'https://your-domain.com/return',
);
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => Scaffold(
body: paychangu.launchPayment(
request: request,
onSuccess: _handlePaymentSuccess,
onError: (error) => print('Payment failed: $error'),
onCancel: () => print('Payment cancelled'),
),
),
),
);
},
child: Text('Pay Now'),
),
),
);
}
}
验证响应数据
验证响应包含详细的交易信息:
verification.data.status // 交易状态
verification.data.amount // 支付金额
verification.data.currency // 使用的货币
verification.data.txRef // 交易参考
verification.data.authorization.channel // 使用的支付渠道
verification.data.authorization.provider // 支付提供商
verification.data.customer // 客户信息
verification.data.createdAt // 交易创建时间
错误处理
SDK 提供了一个自定义的 PayChanguException
类来进行错误处理:
try {
final verification = await paychangu.verifyTransaction(txRef);
} on PayChanguException catch (e) {
print('Error: ${e.message}');
if (e.details != null) {
print('Details: ${e.details}');
}
}
更多关于Flutter支付功能插件paychangu_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付功能插件paychangu_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中集成支付功能,使用paychangu_flutter
插件可以帮助你快速实现这一需求。以下是一个基本的代码案例,展示如何在Flutter应用中集成和使用paychangu_flutter
插件。
首先,确保你的Flutter项目已经创建,并且在pubspec.yaml
文件中添加了paychangu_flutter
依赖:
dependencies:
flutter:
sdk: flutter
paychangu_flutter: ^latest_version # 替换为实际的最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤使用paychangu_flutter
插件进行支付功能的集成。
- 初始化插件:
在你的主应用文件(例如main.dart
)中,首先导入paychangu_flutter
包,并进行初始化。
import 'package:flutter/material.dart';
import 'package:paychangu_flutter/paychangu_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Payment Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PaymentScreen(),
);
}
}
- 创建支付页面:
创建一个新的页面(例如payment_screen.dart
),用于处理支付逻辑。
import 'package:flutter/material.dart';
import 'package:paychangu_flutter/paychangu_flutter.dart';
class PaymentScreen extends StatefulWidget {
@override
_PaymentScreenState createState() => _PaymentScreenState();
}
class _PaymentScreenState extends State<PaymentScreen> {
final PayChanguFlutter _payChangu = PayChanguFlutter();
Future<void> makePayment() async {
try {
// 配置支付参数,这里以示例参数为例
var paymentDetails = PaymentDetails(
amount: '100.00', // 支付金额
currency: 'USD', // 货币类型
description: 'Test Payment', // 支付描述
// 其他必要的支付参数,根据paychangu_flutter的文档进行配置
);
var response = await _payChangu.initPayment(paymentDetails: paymentDetails);
if (response.status == PaymentStatus.success) {
// 支付成功处理逻辑
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Payment Success'),
content: Text('Payment was successful!'),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
} else if (response.status == PaymentStatus.failed) {
// 支付失败处理逻辑
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Payment Failed'),
content: Text('Payment failed. Error: ${response.errorMessage}'),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
} else if (response.status == PaymentStatus.pending) {
// 支付待处理逻辑
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Payment Pending'),
content: Text('Payment is pending. Please wait...'),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
} catch (e) {
// 处理异常
print('Error initiating payment: $e');
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Error'),
content: Text('An error occurred while initiating payment.'),
actions: <Widget>[
FlatButton(
child: Text('OK'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Payment Screen'),
),
body: Center(
child: ElevatedButton(
onPressed: makePayment,
child: Text('Make Payment'),
),
),
);
}
}
在这个示例中,我们创建了一个简单的支付页面,当用户点击“Make Payment”按钮时,会触发支付流程。PaymentDetails
对象包含了支付所需的信息,这些信息需要根据你的实际业务需求进行配置。支付结果会通过回调返回,你可以根据返回的状态进行相应的处理。
请注意,这只是一个基本的示例,实际的支付集成可能需要更多的配置和安全性考虑,具体细节请参考paychangu_flutter
的官方文档。