Flutter支付集成插件fxendit的使用
Flutter支付集成插件fxendit的使用
使用Xendit在Flutter应用程序中进行支付集成。
开始使用
在你的项目中添加依赖:
$ flutter pub add fxendit
使用说明
-
获取公钥: 访问Xendit开发者设置页面获取你的公钥。
-
配置AndroidManifest.xml: 在
AndroidManifest.xml
文件中添加必要的权限和活动。<manifest...> ... <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application...> ... <activity android:name="com.xendit.example.CreateTokenActivity" android:theme="@style/NormalTheme"/> <activity android:name="com.xendit.example.AuthenticationActivity" android:theme="@style/NormalTheme"/> <activity android:name="com.xendit.example.ValidationUtilActivity" android:theme="@style/NormalTheme"/> <activity android:name="com.xendit.XenditActivity"/> ... </application> </manifest>
-
初始化Xendit: 在你的Dart代码中导入并初始化Xendit插件。
import 'package:fxendit/fxendit.dart'; Xendit xendit = Xendit('your_xendit_public_key');
-
创建单次使用的Token:
XCard card = XCard( creditCardNumber: '4111111111111111', // 示例卡号 creditCardCVN: '123', // 卡背面的CVV码 expirationMonth: '09', // 过期月份 expirationYear: '2021', // 过期年份 ); TokenResult result = await xendit.createSingleUseToken( card, amount: 75000, // 交易金额 shouldAuthenticate: true, // 是否需要认证 onBehalfOf: '', // 代理账户ID ); if (result.isSuccess) { tokenId = result.token!.id; print('Token ID: ${result.token!.id}'); } else { print('SingleUseToken Error: ${result.errorCode} - ${result.errorMessage}'); }
-
创建多次使用的Token:
XCard card = XCard( creditCardNumber: '4111111111111111', creditCardCVN: '123', expirationMonth: '09', expirationYear: '2021', ); TokenResult result = await xendit.createMultipleUseToken(card); if (result.isSuccess) { tokenId = result.token!.id; print('Token ID: ${result.token!.id}'); } else { print('MultipleUseToken Error: ${result.errorCode} - ${result.errorMessage}'); }
-
创建3DS认证:
AuthenticationResult result = await xendit.createAuthentication(tokenId, amount: 50000); if (result.isSuccess) { print('Authentication ID: ${result.authentication!.id}'); } else { print('Authentication Error: ${result.errorCode} - ${result.errorMessage}'); }
-
验证信用卡号码的有效性:
String cardNumber = '4111111111111111'; bool isValid = CardValidator.isCardNumberValid(cardNumber);
-
验证信用卡过期日期的有效性:
String expirationMonth = '09'; String expirationYear = '2021'; bool isValid = CardValidator.isExpiryValid(expirationMonth, expirationYear);
-
验证信用卡CVN的有效性:
String cardCVN = '123'; bool isValid = CardValidator.isCvnValid(cardCVN);
-
获取信用卡类型:
String cardNumber = '4111111111111111'; CardType cardType = CardValidator.getCardType(cardNumber); print('${cardType.cardName} - ${cardType.cardKey}');
-
验证信用卡CVN长度是否符合其类型的要求:
String cardNumber = '4111111111111111'; String cardCVN = '123'; bool isValid = CardValidator.isCvnValidForCardType(cardCVN, cardNumber);
示例代码
查看完整的示例代码可以从这里获取。
示例代码:example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:fxendit/fxendit.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
// 使用你自己的公钥
Xendit xendit = Xendit(
'xnd_public_development_RGUHB7gkrX2QTfeWMMCZhoUMAoVBmEadosxVOGfCCIX92kdCacGBoDlrjldsm7');
String tokenId = '';
[@override](/user/override)
void initState() {
super.initState();
WidgetsBinding.instance?.addPostFrameCallback((_) async {
await _testSingleUseToken();
await _testMultipleUseToken();
await _testAuthentication();
});
}
Future _testSingleUseToken() async {
XCard card = XCard(
creditCardNumber: '4111111111111111',
creditCardCVN: '123',
expirationMonth: '09',
expirationYear: '2021',
);
TokenResult result = await xendit.createSingleUseToken(
card,
amount: 75000,
shouldAuthenticate: true,
onBehalfOf: '',
);
if (result.isSuccess) {
tokenId = result.token!.id;
print('Token ID: ${result.token!.id}');
} else {
print(
'SingleUseToken Error: ${result.errorCode} - ${result.errorMessage}');
}
}
Future _testMultipleUseToken() async {
XCard card = XCard(
creditCardNumber: '4111111111111111',
creditCardCVN: '123',
expirationMonth: '09',
expirationYear: '2021',
);
TokenResult result = await xendit.createMultipleUseToken(card);
if (result.isSuccess) {
tokenId = result.token!.id;
print('Token ID: ${result.token!.id}');
} else {
print(
'MultipleUseToken Error: ${result.errorCode} - ${result.errorMessage}');
}
}
Future _testAuthentication() async {
if (tokenId.isNotEmpty) {
AuthenticationResult result =
await xendit.createAuthentication(tokenId, amount: 50000);
if (result.isSuccess) {
print('Authentication ID: ${result.authentication!.id}');
} else {
print(
'Authentication Error: ${result.errorCode} - ${result.errorMessage}');
}
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text('FXendit Example'),
),
body: Center(
child: Text(''),
),
),
);
}
}
更多关于Flutter支付集成插件fxendit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件fxendit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成和使用fxendit
插件来进行支付的示例代码。fxendit
是一个Flutter插件,用于集成印尼的支付网关Xendit。请注意,实际使用时需要根据Xendit的API文档和插件文档进行详细的配置和调整。
首先,确保你已经在pubspec.yaml
文件中添加了fxendit
依赖:
dependencies:
flutter:
sdk: flutter
fxendit: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个简单的Flutter应用示例,展示如何使用fxendit
插件进行支付集成。
1. 初始化FXEndit客户端
在你的main.dart
文件中,首先导入必要的包,并初始化FXEndit客户端:
import 'package:flutter/material.dart';
import 'package:fxendit/fxendit.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Xendit Integration',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final FxEndit fxEndit = FxEndit(
environment: 'sandbox', // 使用'production'进行生产环境支付
secretKey: '你的Xendit Secret Key',
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Xendit Integration'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await initiatePayment();
},
child: Text('Initiate Payment'),
),
),
);
}
Future<void> initiatePayment() async {
try {
// 创建一个支付请求
var paymentRequest = PaymentRequest(
externalId: 'unique-payment-id-12345',
amount: 100000, // 金额,单位为印尼卢比(IDR)
currency: 'IDR',
description: 'Test Payment',
redirectUrl: 'https://your-redirect-url.com',
paymentType: PaymentType.creditCard, // 或使用其他支持的支付方式,如Ewallet等
);
// 发起支付请求
var paymentResponse = await fxEndit.createPayment(paymentRequest);
// 处理支付响应
if (paymentResponse.status == 'success') {
// 支付成功,可以展示支付成功页面或进行其他处理
print('Payment successful: ${paymentResponse.data}');
} else {
// 支付失败,处理错误
print('Payment failed: ${paymentResponse.errorMessage}');
}
} catch (e) {
// 捕获并处理异常
print('Error: $e');
}
}
}
2. 配置支付参数
在上面的代码中,你需要注意以下几点:
environment
:设置为'sandbox'
用于测试环境,设置为'production'
用于生产环境。secretKey
:替换为你的Xendit Secret Key。PaymentRequest
参数:根据你的实际需求设置支付请求的参数,如externalId
、amount
、currency
、description
、redirectUrl
和paymentType
等。
3. 处理支付响应
在initiatePayment
函数中,我们发起支付请求并处理响应。如果支付成功,你可以展示支付成功页面或进行其他处理;如果支付失败,你可以处理错误并展示相应的错误信息。
注意事项
- 安全性:不要将你的Secret Key硬编码在客户端代码中,特别是在生产环境中。通常,你应该在后端服务器上处理敏感信息,并通过API与客户端通信。
- 错误处理:在实际应用中,你需要更详细的错误处理逻辑,以提供用户友好的错误提示。
- 测试环境:在开发过程中,确保使用Xendit的Sandbox环境进行测试,以避免产生实际的支付交易。
希望这个示例能帮助你在Flutter项目中集成fxendit
插件进行支付。如果你有任何其他问题或需要进一步的帮助,请查阅Xendit的官方文档或插件的README文件。