Flutter支付集成插件sadadpay_flutter的使用
Flutter支付集成插件sadadpay_flutter的使用
特性
Sadad SDK用于简化与Sadad REST API在移动应用中的集成。
- 生成刷新令牌
- 生成访问令牌
- 创建发票
- 通过ID获取发票
- 提供一个Web视图进行支付流程
安装
要使用此包,请将其添加到您的项目中。
使用命令行安装
运行以下命令:
$ flutter pub add sadadpay_flutter
这将在您的项目的pubspec.yaml
文件中添加如下依赖项(并运行隐式的flutter pub get
):
dependencies:
sadadpay_flutter: ^0.0.3
在Dart代码中导入
在Dart代码中,可以这样导入:
import 'package:sadadpay_flutter/config/env.dart';
import 'package:sadadpay_flutter/interceptors/authorization_interceptor.dart';
import 'package:sadadpay_flutter/sadadpay.dart';
import 'package:sadadpay_flutter/service/payment_status.dart';
import 'package:sadadpay_flutter/service/sadad_service.dart';
import 'package:sadadpay_flutter/widgets/web_view.dart';
代码片段详情
生成刷新令牌
使用generateRefreshToken
方法生成刷新令牌。该方法返回JSON对象。
sadadPay.generateRefreshToken(clientKey: _clientKey, clientSecret: _clientSecret).then(
(value) => _refreshToken = value['response']['refreshToken']);
生成访问令牌
使用generateAccessToken
方法生成访问令牌。该方法返回JSON对象。
sadadPay.generateAccessToken(refreshToken: _refreshToken).then(
(value) => _accessToken = value['response']['accessToken']);
创建发票
使用createInvoice
方法创建发票。该方法返回JSON对象。
final invoices = {
"Invoices": [
{
"amount": "10",
"customer_Name": "customer",
"customer_Email": "customer@example.com",
"lang": "en",
"currency_Code": "KWD",
"items": [
{"name": "x", "quantity": 2, "amount": 2},
{"name": "y", "quantity": 6, "amount": 1}
]
}
]
};
sadadPay.createInvoice(invoices: invoices, token: _accessToken).then(
(value) => setState(() => _invoiceId = value['response']['invoiceId']));
获取发票
使用getInvoice
方法通过ID获取发票。该方法返回JSON对象。
sadadPay.getInvoice(invoiceId: _invoiceId, token: _accessToken).then(
(value) => setState(() => _invoiceKey = value['response']['key']));
使用Sadad Web视图
使用SadadWebView
来展示支付页面。该方法返回一个Widget。
[@override](/user/override)
Widget build(BuildContext context) {
if (_invoiceKey != '') {
return SadadWebView(
invoiceKey: _invoiceKey,
onSuccess: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SuccessPage()),
);
},
onFail: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const FailPage()),
);
},
appBar: AppBar(
title: const Text('App Bar'),
),
);
} else {
return const CircularProgressIndicator();
}
}
完整示例
以下是一个完整的示例,展示了如何使用sadadpay_flutter
插件进行支付集成。
import 'package:flutter/material.dart';
import 'package:sadadpay_flutter/config/env.dart';
import 'package:sadadpay_flutter/sadadpay.dart';
import 'package:sadadpay_flutter/widgets/web_view.dart';
void main() {
runApp(const SadadDemo());
}
class SadadDemo extends StatelessWidget {
const SadadDemo({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sadad Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Sadad Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 设置您的clientKey和clientSecret,它们必须存储在一个安全的地方,例如数据库。
final String _clientKey = "xxxxxxxxxxxx";
final String _clientSecret = "xxxxxxxxxxxx";
late String _refreshToken;
late String _accessToken;
late String _invoiceId;
late String _invoiceUrl = "";
final invoices = {
"Invoices": [
{
"amount": "10",
"customer_Name": "Bondok",
"customer_Email": "bondok@sadadkw.com",
"lang": "en",
"currency_Code": "KWD",
"items": [
{"name": "Orange", "quantity": 2, "amount": 2},
{"name": "Apple", "quantity": 6, "amount": 1}
]
}
]
};
SadadPay sadadPay = SadadPay(env: Environment.stage);
Future<void> initPaymentProcess() async {
await sadadPay
.generateRefreshToken(
clientKey: _clientKey, clientSecret: _clientSecret)
.then((value) => _refreshToken = value['response']['refreshToken']);
await sadadPay
.generateAccessToken(refreshToken: _refreshToken)
.then((value) => _accessToken = value['response']['accessToken']);
await sadadPay.createInvoice(invoices: invoices, token: _accessToken).then(
(value) => setState(() => _invoiceId = value['response']['invoiceId']));
await sadadPay.getInvoice(invoiceId: _invoiceId, token: _accessToken).then(
(value) => setState(() => _invoiceUrl = value['response']['url']));
}
[@override](/user/override)
initState() {
super.initState();
initPaymentProcess();
}
[@override](/user/override)
Widget build(BuildContext context) {
if (_invoiceUrl != '') {
return SadadWebView(
url: _invoiceUrl,
onSuccess: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SuccessPage()),
);
},
onFail: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const FailPage()),
);
},
appBar: AppBar(
title: const Text('App Bar'),
),
);
} else {
return const CircularProgressIndicator();
}
}
}
class SuccessPage extends StatelessWidget {
const SuccessPage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('App Bar'),
),
body: const Center(
child: Text('On Success page'),
),
);
}
}
class FailPage extends StatelessWidget {
const FailPage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('App Bar'),
),
body: const Center(
child: Text('On Fail page'),
),
);
}
}
更多关于Flutter支付集成插件sadadpay_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件sadadpay_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中集成sadadpay_flutter
插件以实现支付功能,通常需要按照插件的官方文档进行配置和实现。以下是一个简单的代码示例,展示了如何在Flutter应用中集成和使用sadadpay_flutter
插件。
首先,确保你已经在pubspec.yaml
文件中添加了sadadpay_flutter
依赖:
dependencies:
flutter:
sdk: flutter
sadadpay_flutter: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
以获取依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤进行集成:
- 导入插件:
在你的Dart文件中导入sadadpay_flutter
插件:
import 'package:sadadpay_flutter/sadadpay_flutter.dart';
- 初始化插件:
通常,你需要在应用的某个初始化阶段(如main.dart
中的initState
方法或类似的生命周期方法)中初始化插件。不过,由于sadadpay_flutter
的具体初始化步骤可能依赖于其API和文档,这里假设你需要设置一些必要的参数。
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
// 假设有一个初始化插件的方法
// SadadPayFlutter.initialize(yourConfig); // 根据插件文档调整
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SadadPay Flutter Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 调用支付方法
startPayment();
},
child: Text('Start Payment'),
),
),
),
);
}
void startPayment() async {
try {
// 假设这是调用支付接口的方法
// Map<String, dynamic> paymentData = {
// 'merchantId': 'yourMerchantId',
// 'amount': 'amountToPay',
// 'currency': 'currencyCode',
// // 其他必要的支付参数
// };
// SadadPayFlutter.startPayment(paymentData).then((result) {
// // 处理支付结果
// print('Payment result: $result');
// }).catchError((error) {
// // 处理错误
// print('Payment error: $error');
// });
// 由于具体API可能不同,这里用占位代码表示
var result = await SadadPayFlutter.somePaymentMethod({
'key1': 'value1',
'key2': 'value2',
// 其他参数
});
print('Payment result: $result');
} catch (e) {
print('Error initiating payment: $e');
}
}
}
注意:上面的代码示例中,SadadPayFlutter.initialize
、SadadPayFlutter.startPayment
以及支付数据paymentData
都是假设的,因为具体的API调用和参数需要参考sadadpay_flutter
插件的官方文档。务必根据插件提供的API和参数进行实际的调用。
- 处理支付结果:
支付完成后,插件通常会返回一个结果,你可以根据这个结果进行相应的处理,比如更新UI、保存支付状态等。
由于sadadpay_flutter
插件的具体实现和API可能有所不同,以上代码仅为示例,实际使用时请务必参考插件的官方文档和示例代码。如果遇到任何问题,也可以查阅插件的issue跟踪器或寻求社区的帮助。