Flutter支付集成插件payable_ipg_flutter的使用
Flutter支付集成插件payable_ipg_flutter的使用
初始化
1. 修改 minSdkVersion
在您的应用级别的 build.gradle
文件中,将 minSdkVersion
修改为 21。
android {
defaultConfig {
minSdkVersion 21
}
}
2. 添加插件到 pubspec.yaml
文件
在 pubspec.yaml
文件中添加以下依赖:
payable_ipg_flutter: ^2.0.4
实现
1. 导入PAYable IPG SDK包
import 'package:payable_ipg_flutter/payable_ipg_flutter.dart';
2. 创建PAYable IPG客户端
PAYableIPGClient ipgClient = PAYableIPGClient(
merchantKey: "YOUR_MERCHANT_KEY",
merchantToken: "YOUR_MERCHANT_TOKEN",
returnUrl: "YOUR_RETURN_URL_TO_REDIRECT",
logoUrl: "YOUR_COMPANY_LOGO",
environment: IPGEnvironment.sandbox, // 只用于测试
);
3. 调用 PAYableIPG
在应用中
一次性付款
PAYableIPG(
ipgClient: ipgClient,
amount: 100.45,
currencyCode: "LKR",
paymentType: 1, // 值为1表示一次性付款
orderDescription: "Netflix",
customerFirstName: "John",
customerLastName: "Doe",
customerEmail: "johndoe@gmail.com",
customerMobilePhone: "0777123456",
billingAddressStreet: "Hill Street",
billingAddressCity: "Dehiwala",
billingAddressCountry: "LK",
billingAddressPostcodeZip: "10350"
)
定期付款
PAYableIPG(
ipgClient: ipgClient,
amount: 350.00, // 设置此次付款所需的金额
currencyCode: "LKR",
paymentType: 2, // 值为2表示定期付款
orderDescription: "Play Pass",
customerFirstName: "John",
customerLastName: "Doe",
customerEmail: "johndoe@gmail.com",
customerMobilePhone: "0777123456",
billingAddressStreet: "Hill Street",
billingAddressCity: "Dehiwala",
billingAddressCountry: "LK", // ISO国家代码(LK, US等)
billingAddressPostcodeZip: "10350"
startDate: '2024-05-27',
endDate: '2024-11-27',
recurringAmount: 350.00, // 设置定期付款所需的金额
interval: 'MONTHLY', // 设置付款频率。值可以是MONTHLY, QUARTERLY或ANNUALLY。
isRetry: '1', // 设置是否允许自动重试付款失败的情况。(1 - 允许,0 - 不允许)
retryAttempts: '3', // 设置自动重试的天数。(最大为5)
doFirstPayment: '1', // 设置用户是否在此次付款时进行此订阅的首次付款。
)
可选参数
custom1 // 商户特定数据
custom2 // 商户特定数据
billingPhone
billingCompanyName
billingStreetAddress2
billingProvince
shippingFirstName
shippingLastName
shippingMobile
shippingPhone
shippingEmail
shippingCompanyName
shippingStreetAddress1
shippingStreetAddress2
shippingTownCity
shippingProvince
shippingCountry
shippingPostcode
示例代码
以下是完整的示例代码,展示如何在应用中集成支付功能。
import 'package:flutter/material.dart';
import 'package:payable_ipg_flutter/payable_ipg_flutter.dart';
class PaymentPage extends StatefulWidget {
@override
_PaymentPageState createState() => _PaymentPageState();
}
class _PaymentPageState extends State<PaymentPage> {
PAYableIPGClient? _myIpgClient;
PAYableIPG? _payableIPG;
List<String>? _errorMessages;
bool _loadIPG = true;
@override
Widget build(BuildContext context) {
_loadData();
Widget children;
if (_payableIPG != null && _loadIPG) {
children = _payableIPG as Widget;
} else if (_errorMessages != null) {
children = Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
...?_errorMessages?.map((errorMessage) =>
Padding(
padding: const EdgeInsets.all(8),
child: Text(
errorMessage,
style: const TextStyle(color: Colors.red),
),
)),
],
);
} else {
children = Container();
}
return Scaffold(
appBar: AppBar(
title: const Text('Checkout'),
),
body: Stack(
children: [
children
],
),
);
}
Future<void> _loadData() async {
setState(() {
_myIpgClient = PAYableIPGClient(
logoUrl: "https://i.imgur.com/l21F5us.png",
returnUrl: "https://example.com/receipt",
merchantKey: "A748BFC24F8F6C61",
merchantToken: "09FD8632EED1D1FEB9AD9A5E55427452",
webhookUrl: "https://ipgv2-ntb.payable.lk/new-js-sdk/api/"
);
_payableIPG = PAYableIPG(
ipgClient: _myIpgClient!,
amount: "100.00",
currencyCode: "LKR",
paymentType: "1",
orderDescription: "Order description goes here",
invoiceId: _generateInvoiceId(),
customerFirstName: "John",
customerLastName: "Doe",
customerMobilePhone: "0777123456",
customerEmail: "johndoe@gmail.com",
billingAddressStreet: "Hill Street",
billingAddressCity: "Colombo",
billingAddressCountry: "LK",
billingAddressPostcodeZip: "70000",
onPaymentStarted: (data) {
print('Payment started');
},
onPaymentCompleted: (data) {
print('Payment completed');
Navigator.popUntil(context, (route) => route.isFirst);
},
onPaymentError: (data) {
print('Payment error');
if (data.status == 3009) {
final errorMap = data.error;
final errorMessages = errorMap.values.expand((list) => list).toList();
setState(() {
_loadIPG = false;
_errorMessages = errorMessages.cast<String>();
});
}
},
onPaymentCancelled: () {
print('Payment cancelled');
Navigator.pop(context);
}
);
});
}
String _generateInvoiceId() {
// 生成唯一发票ID
return DateTime.now().millisecondsSinceEpoch.toString();
}
}
高级用法
您可以使用 uid
和 resultIndicator
来检查交易状态。
var data = await ipgClient.getStatus("uid", "resultIndicator");
更多关于Flutter支付集成插件payable_ipg_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件payable_ipg_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
payable_ipg_flutter
是一个用于在 Flutter 应用中集成支付功能的插件。它通常用于处理在线支付,例如信用卡支付、移动支付等。以下是如何在 Flutter 项目中使用 payable_ipg_flutter
插件的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 payable_ipg_flutter
插件的依赖。
dependencies:
flutter:
sdk: flutter
payable_ipg_flutter: ^1.0.0 # 请根据实际情况替换为最新版本
然后运行 flutter pub get
来获取依赖。
2. 配置支付参数
在使用 payable_ipg_flutter
之前,你需要配置支付网关的参数,例如商户 ID、API 密钥、支付金额等。
import 'package:payable_ipg_flutter/payable_ipg_flutter.dart';
void configurePayment() {
PayableIpgFlutter.configure(
merchantId: 'your_merchant_id',
apiKey: 'your_api_key',
amount: 100.0, // 支付金额
currency: 'USD', // 货币类型
orderId: 'order_123', // 订单 ID
customerEmail: 'customer@example.com', // 客户邮箱
customerPhone: '1234567890', // 客户电话
description: 'Payment for Order 123', // 支付描述
);
}
3. 发起支付
配置好支付参数后,你可以调用 PayableIpgFlutter.initiatePayment
方法来发起支付。
void initiatePayment() async {
try {
final paymentResult = await PayableIpgFlutter.initiatePayment();
if (paymentResult['status'] == 'success') {
print('Payment successful: ${paymentResult['transactionId']}');
} else {
print('Payment failed: ${paymentResult['message']}');
}
} catch (e) {
print('Error occurred: $e');
}
}
4. 处理支付结果
支付完成后,你需要处理支付结果。通常,支付结果会包含交易状态、交易 ID 等信息。你可以根据这些信息来更新订单状态或通知用户。
void handlePaymentResult(Map<String, dynamic> paymentResult) {
if (paymentResult['status'] == 'success') {
// 支付成功,更新订单状态
print('Payment successful: ${paymentResult['transactionId']}');
} else {
// 支付失败,显示错误信息
print('Payment failed: ${paymentResult['message']}');
}
}
5. 示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 payable_ipg_flutter
插件。
import 'package:flutter/material.dart';
import 'package:payable_ipg_flutter/payable_ipg_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: PaymentScreen(),
);
}
}
class PaymentScreen extends StatelessWidget {
void configurePayment() {
PayableIpgFlutter.configure(
merchantId: 'your_merchant_id',
apiKey: 'your_api_key',
amount: 100.0,
currency: 'USD',
orderId: 'order_123',
customerEmail: 'customer@example.com',
customerPhone: '1234567890',
description: 'Payment for Order 123',
);
}
void initiatePayment() async {
try {
final paymentResult = await PayableIpgFlutter.initiatePayment();
if (paymentResult['status'] == 'success') {
print('Payment successful: ${paymentResult['transactionId']}');
} else {
print('Payment failed: ${paymentResult['message']}');
}
} catch (e) {
print('Error occurred: $e');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Payment Integration'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
configurePayment();
initiatePayment();
},
child: Text('Pay Now'),
),
),
);
}
}