Flutter支付处理插件paymob_flutter_lib的使用
Flutter支付处理插件paymob_flutter_lib的使用
该插件用于Paymob。它实现了原生Paymob SDK(Android和iOS)以在Flutter环境中工作。
使用
将以下内容添加到你的pubspec.yaml
文件中:
dependencies:
paymob_flutter_lib: ^1.0.9
Android
你需要编辑AndroidManifest.xml
文件,添加以下内容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:supportsRtl="true"
tools:replace="android:label,android:supportsRtl">
</application>
</manifest>
iOS
在你的Podfile
文件中添加以下内容:
# 为项目定义全局平台
platform :ios, '12.0'
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" // 添加此行
end
end
end
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:paymob_flutter_lib/models/order.dart';
import 'package:paymob_flutter_lib/models/payment.dart';
import 'package:paymob_flutter_lib/models/payment_key_request.dart';
import 'package:paymob_flutter_lib/models/payment_result.dart';
import 'dart:async';
import 'package:paymob_flutter_lib/paymob_flutter_lib.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _paymobFlutterLibPlugin = PaymobFlutterLib();
// 替换为你自己的API密钥
String apiKey =
'ZXlKaGJHY2lPaUpJVXpVeE1pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmpiR0Z6Y3lJNklrMWxjbU5vWVc1MElpd2ljSEp2Wm1sc1pWOXdheUk2TVRJd056RXNJbTVoYldVaU9pSXhOall6TURjeE16WXlMakl4TkRVME5DSjkuZ0NiQnNiaW12SUswcGZzV084Q1RNUWtQUjFvOGpFdDYtdGY3UWFMeTdUWnU3S3FWYXBaNlNqMlZYMGladVh6Yk9PWkhzRmRDdVdaeUVQc0N3QnZYaXc=';
String _auth = '';
int _orderId = 0;
String _paymentKey = '';
String? _error = 'No Error';
String? _result = 'Unknown';
String? _token = 'Unknown';
String? _maskedPan = 'Unknown';
Future<void> authenticateRequest() async {
try {
String result = await PaymobFlutterLib.authenticateRequest(apiKey);
if (!mounted) return;
setState(() {
_auth = result;
});
} catch (e) {
if (!mounted) return;
setState(() {
_error = '$e';
});
}
}
Future<void> registerOrder() async {
try {
int result = await PaymobFlutterLib.registerOrder(
Order(
authToken: _auth,
deliveryNeeded: "false",
amountCents: "35000",
currency: "PKR",
items: [
// Item(
// name: "ASC1515",
// amountCents: "35000",
// description: "Smart Watch",
// quantity: "1",
// ),
// Item(
// name: "ERT6565",
// amountCents: "1000",
// description: "Power Bank",
// quantity: "1",)
],
),
);
if (!mounted) return;
setState(() {
_orderId = result;
});
} catch (e) {
if (!mounted) return;
setState(() {
_error = '$e';
});
}
}
Future<void> requestPaymentKey() async {
try {
String result = await PaymobFlutterLib.requestPaymentKey(
PaymentKeyRequest(
authToken: _auth,
amountCents: "35000",
expiration: 3600,
orderId: _orderId.toString(),
billingData: BillingData(
firstName: "Bilal",
lastName: "Ilyas",
email: "bilal.ilyas1990@gmail.com",
phoneNumber: "+923156702020",
apartment: "NA",
floor: "NA",
street: "NA",
building: "NA",
postalCode: "NA",
city: "Sargodha",
state: "Punjab",
country: "PK",
),
currency: "PKR",
integrationId: 12740,
lockOrderWhenPaid: "false",
),
);
if (!mounted) return;
setState(() {
_paymentKey = result;
});
} catch (e) {
if (!mounted) return;
setState(() {
_error = '$e';
});
}
}
Future<void> startPayActivityNoToken() async {
try {
PaymentResult? result =
await _paymobFlutterLibPlugin.startPayActivityNoToken(Payment(
paymentKey: _paymentKey,
saveCardDefault: false,
showSaveCard: false,
themeColor: const Color(0xFF002B36),
language: "en",
actionbar: true,
));
if (!mounted) return;
print("transID : ${result?.id}");
print(result);
setState(() {
_result = result?.dataMessage;
_token = result?.token;
_maskedPan = result?.maskedPan;
});
} on PlatformException catch (err) {
// 处理错误
print("PlatformException 1");
print(err);
setState(() {
_error = '${err.message}';
});
} catch (e) {
if (!mounted) return;
setState(() {
_error = '$e';
});
}
}
Future<void> startPayActivityToken() async {
try {
String? result =
await _paymobFlutterLibPlugin.startPayActivityToken(Payment(
paymentKey: _paymentKey,
saveCardDefault: false,
showSaveCard: true,
themeColor: const Color(0xFF002B36),
language: "en",
actionbar: true,
token: _token,
maskedPanNumber: _maskedPan,
customer: Customer(
firstName: "Eman",
lastName: "Ahmed",
phoneNumber: "+201012345678",
email: "example@gmail.com",
building: "7",
floor: "9",
apartment: "91",
city: "Alexandria",
state: "NA",
country: "Egypt",
postalCode: "NA"),
));
if (!mounted) return;
setState(() {
_result = result;
});
} catch (e) {
print("erorrrrrr 2");
print(e);
if (!mounted) return;
setState(() {
_error = '$e';
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
MaterialButton(
onPressed: () async {
await authenticateRequest();
},
child: const Text('身份验证请求'),
),
Text('auth: $_auth'),
MaterialButton(
onPressed: () async {
await registerOrder();
},
child: const Text('订单注册API'),
),
Text('orderId: $_orderId'),
MaterialButton(
onPressed: () async {
await requestPaymentKey();
},
child: const Text('支付密钥请求'),
),
Text('paymentKey: $_paymentKey'),
const Divider(),
MaterialButton(
onPressed: () async {
// print(_paymentKey);
await startPayActivityNoToken();
},
child: const Text('startPayActivityNoToken'),
),
MaterialButton(
onPressed: () async {
await startPayActivityToken();
},
child: const Text('startPayActivityToken'),
),
Text(
'error: $_error',
style: const TextStyle(color: Colors.red),
),
const Text(
"TRANSACTION_SUCCESSFUL : ",
style: TextStyle(fontWeight: FontWeight.bold),
),
Text('result: $_result'),
const Text(
"TRANSACTION_SUCCESSFUL_CARD_SAVED",
style: TextStyle(fontWeight: FontWeight.bold),
),
Text('token: $_token'),
Text('maskedPan: $_maskedPan'),
],
),
),
),
);
}
}
更多关于Flutter支付处理插件paymob_flutter_lib的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付处理插件paymob_flutter_lib的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
paymob_flutter_lib
是一个用于处理支付的 Flutter 插件,它允许开发者在 Flutter 应用中集成 Paymob 支付网关。以下是如何使用 paymob_flutter_lib
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 paymob_flutter_lib
依赖:
dependencies:
flutter:
sdk: flutter
paymob_flutter_lib: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 Paymob
在你的 Dart 代码中,首先需要初始化 Paymob。通常,你需要在应用启动时进行初始化:
import 'package:paymob_flutter_lib/paymob_flutter_lib.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Paymob
PaymobFlutterLib.initialize(
apiKey: 'YOUR_API_KEY',
integrationId: 'YOUR_INTEGRATION_ID',
iframeId: 'YOUR_IFRAME_ID',
);
runApp(MyApp());
}
3. 发起支付请求
在需要发起支付的地方,调用 PaymobFlutterLib
的 pay
方法。你可以传递支付金额、用户信息等参数。
Future<void> initiatePayment() async {
try {
final paymentResponse = await PaymobFlutterLib.pay(
amount: 1000, // 支付金额(单位:分)
currency: 'EGP', // 货币代码
billingData: BillingData(
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@example.com',
phoneNumber: '+201234567890',
),
);
if (paymentResponse.success) {
// 支付成功
print('Payment successful: ${paymentResponse.transactionId}');
} else {
// 支付失败
print('Payment failed: ${paymentResponse.errorMessage}');
}
} catch (e) {
// 处理异常
print('Error during payment: $e');
}
}
4. 处理支付结果
PaymobFlutterLib.pay
方法会返回一个 PaymentResponse
对象,你可以通过检查 success
属性来判断支付是否成功,并通过 transactionId
获取交易ID。
5. 处理回调
在支付完成后,Paymob 可能会通过回调 URL 通知你的服务器支付结果。你需要在 Paymob 控制台设置回调 URL,并处理来自 Paymob 的请求。
6. 测试和上线
在开发过程中,你可以使用 Paymob 提供的测试环境和测试卡来进行支付测试。测试完成后,切换到生产环境并上线你的应用。
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 paymob_flutter_lib
进行支付:
import 'package:flutter/material.dart';
import 'package:paymob_flutter_lib/paymob_flutter_lib.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Paymob
PaymobFlutterLib.initialize(
apiKey: 'YOUR_API_KEY',
integrationId: 'YOUR_INTEGRATION_ID',
iframeId: 'YOUR_IFRAME_ID',
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: PaymentScreen(),
);
}
}
class PaymentScreen extends StatelessWidget {
Future<void> initiatePayment() async {
try {
final paymentResponse = await PaymobFlutterLib.pay(
amount: 1000, // 支付金额(单位:分)
currency: 'EGP', // 货币代码
billingData: BillingData(
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@example.com',
phoneNumber: '+201234567890',
),
);
if (paymentResponse.success) {
// 支付成功
print('Payment successful: ${paymentResponse.transactionId}');
} else {
// 支付失败
print('Payment failed: ${paymentResponse.errorMessage}');
}
} catch (e) {
// 处理异常
print('Error during payment: $e');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Paymob Payment'),
),
body: Center(
child: ElevatedButton(
onPressed: initiatePayment,
child: Text('Pay Now'),
),
),
);
}
}