Flutter支付集成插件sasapay_sdk的使用
Flutter支付集成插件sasapay_sdk的使用
特性
该插件提供了以下功能:
- [√] C2B(客户到商家)
- [√] B2C(商家到客户)
- [√] B2B(商家到商家)
- [√] 验证交易
- [√] 交易状态查询
- [√] 获取商户账户余额
- [√] 瞬时支付通知 (IPN)
- ✅ 公用事业支付
开始使用
凭据
- 在SasaPay开发者门户创建一个账户。
- 创建一个沙箱应用(C2B / B2C / B2B 范围)。
- 点击查看以查看更多应用详情。
- 获取您的密钥 -
客户端ID
和客户端密钥
。
详细的教程请访问SasaPay文档。
使用
要运行示例应用,请进入示例文件夹并更改MERCHANT_CODE
和 CALL_BACK_URL
。
在pubspec.yaml
文件中添加依赖项:
dependencies:
sasapay_sdk: [ADD_LATEST_VERSION_HERE]
第一步
初始化SDK,传入客户端ID
和 客户端密钥
。
final sasaPay = SasaPay(
clientId: CLIENT_ID,
clientSecret: CLIENT_SECRET,
environment: EnvironmentSasaPay.Testing,
);
// 或者使用Getx进行状态管理
Get.lazyPut(
() => SasaPay(
clientId: CLIENT_ID,
clientSecret: CLIENT_SECRET,
environment: EnvironmentSasaPay.Testing,
),
);
商家到客户 (B2C)
var resp = await sasaPay.business2Customer(
merchantCode: MERCHANT_CODE,
amount: "1729",
receiverNumber: "0701234567",
channelCode: "0",
callBackURL: CALLBACK_URL,
transactionDesc: "stock payment",
accountReference: "071234",
);
处理B2C支付
var res = await sasaPay.processC2Bpayment(
merchantCode: MERCHANT_CODE,
checkoutRequestID: "4040359-0f8****1-4779-85b3-44e575166f7a",
verificationCode: "123456",
);
客户到商家 (C2B)
var resp = await sasaPay.customer2BusinessPhoneNumber(
merchantCode: MERCHANT_CODE,
networkCode: "0",
transactionDesc: "Pay for groceries",
phoneNumber: "2547******280",
accountReference: "07******0",
amount: 1,
callBackURL: CALLBACK_URL,
);
商家到商家 (B2B)
var resp = await sasaPay.business2Business(
merchantCode: MERCHANT_CODE,
amount: 1,
receiverMerchantCode: "3209",
transactionReason: "Payment of transportation fee",
transactiontReference: "87065",
callBackURL: CALLBACK_URL,
);
获取商户余额
var resp = await sasaPay.queryMerchantAccountBalance(
merchantCode: MERCHANT_CODE,
);
获取银行代码
List<BanksChannelCode?> result = SasaPay.getBanksCodes();
SDK演示
示例代码
以下是完整的示例代码:
import 'package:example/helpers/custom_button.dart';
import 'package:example/helpers/themes_colors.dart';
import 'package:example/screens/business_to_business.dart';
import 'package:example/screens/business_to_customer.dart';
import 'package:example/screens/check_transaction.dart';
import 'package:example/screens/customer_to_business.dart';
import 'package:example/screens/utilities/utilities_main.dart';
import 'package:example/screens/verify_transaction.dart';
import 'package:example/utils/init_services.dart';
import 'package:example/utils/utils_helpers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_json_view/flutter_json_view.dart';
import 'package:get/get.dart';
import 'package:sasapay_sdk/sasapay_sdk.dart';
import 'package:sasapay_sdk/utils/helper_enums_consts.dart';
import 'package:sasapay_sdk/models/bank_model.dart';
void main() async {
sasaPayServicesInit();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter SASA PAY SDK'),
);
}
}
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> {
int _counter = 0;
SasaPay sasaPay = Get.find<SasaPay>();
Map<String, dynamic> response = {};
bool loading = false;
Future<void> registerConfirmationUrl() async {
setState(() {
loading = true;
response = {"Registering call back url...": "...."};
});
var resp = await sasaPay.registerConfirmationUrl(
merchantCode: MERCHANT_CODE,
confirmationCallbackURL: CALLBACK_URL,
);
setState(() {
response = resp?.data;
loading = false;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
var height = MediaQuery.of(context).size.height;
var width = MediaQuery.of(context).size.width;
return Scaffold(
backgroundColor: CustomColor.blueColor.withOpacity(0.7),
appBar: AppBar(
backgroundColor: CustomColor.appBarColor,
centerTitle: true,
title: Text(widget.title),
),
body: Center(
child: SingleChildScrollView(
child: SizedBox(
height: height * 1.2,
width: width,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
alignment: Alignment.topCenter,
child: Visibility(
visible: loading,
child: const Center(
child: CircularProgressIndicator(),
),
),
),
CustomElevatedButton(
onPressed: () {
Get.to(() => Customer2Business());
},
label: "CUSTOMER to Business.",
),
SizedBox(height: height / 33),
CustomElevatedButton(
onPressed: () {
Get.to(() => Business2Customer());
},
label: "BUSINESS to Customer.",
),
const SizedBox(height: 20),
CustomElevatedButton(
onPressed: () {
Get.to(() => Business2Business());
},
label: "BUSINESS to BUSINESS.",
),
const SizedBox(height: 20),
CustomElevatedButton(
label: "Get Merchant Account Balance.",
onPressed: () async {
setState(() {
loading = true;
response = {"Getting account balance...": "...."};
});
var resp = await sasaPay.queryMerchantAccountBalance(
merchantCode: MERCHANT_CODE);
setState(() {
response = resp?.data;
loading = false;
});
},
gradient: const LinearGradient(colors: [
Color.fromARGB(255, 13, 103, 167),
Color(0xff005492),
Color(0xff003359),
]),
),
const SizedBox(height: 20),
CustomElevatedButton(
onPressed: () {
Get.to(() => CheckTransaction());
},
label: "CHECK transaction Status.",
),
const SizedBox(height: 20),
CustomElevatedButton(
onPressed: () {
Get.to(() => VerifyTransaction());
},
label: "Verify a transaction.",
),
const SizedBox(height: 20),
CustomElevatedButton(
label: "Register confirmation url",
onPressed: () {
registerConfirmationUrl();
},
),
const SizedBox(height: 30),
CustomElevatedButton(
label: "Get bank channel codes",
onPressed: () async {
setState(() {
loading = true;
response = {"Getting bank codes": "...."};
});
List<BanksChannelCode?> result = SasaPay.getBanksCodes();
setState(() {
loading = false;
response = Map.fromIterable(
result,
key: (v) => v?.bankName ?? "",
value: (v) => v?.bankCode ?? "",
);
});
},
),
const SizedBox(height: 10),
Divider(color: CustomColor.blueColor, thickness: 2),
const SizedBox(height: 10),
CustomElevatedButton(
onPressed: () {
Get.to(() => utilitiesMainPage());
},
label: "UTILITIES.",
gradient: const LinearGradient(colors: [
Color.fromARGB(255, 13, 103, 167),
Color(0xff005492),
Color(0xff003359),
]),
),
const SizedBox(height: 30),
JsonView.map(response),
const SizedBox(height: 30),
],
),
),
),
),
),
);
}
}
更多关于Flutter支付集成插件sasapay_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter支付集成插件sasapay_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
要在Flutter应用中集成SasaPay支付功能,你可以使用 sasapay_sdk
插件。以下是一个简单的步骤指南,帮助你快速集成并使用该插件。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 sasapay_sdk
依赖:
dependencies:
flutter:
sdk: flutter
sasapay_sdk: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化 SasaPay SDK
在你的应用启动时,初始化 SasaPay SDK。通常你可以在 main.dart
中进行初始化:
import 'package:sasapay_sdk/sasapay_sdk.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 SasaPay SDK
SasaPay.initialize(
apiKey: 'YOUR_API_KEY', // 你的 SasaPay API 密钥
merchantCode: 'YOUR_MERCHANT_CODE', // 你的商户代码
isProduction: false, // 设置为 true 以使用生产环境
);
runApp(MyApp());
}
3. 发起支付请求
在需要发起支付的地方,使用 SasaPay
实例来发起支付请求。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:sasapay_sdk/sasapay_sdk.dart';
class PaymentPage extends StatelessWidget {
Future<void> initiatePayment() async {
try {
// 创建支付请求
final paymentResponse = await SasaPay.initiatePayment(
amount: 100.0, // 支付金额
phoneNumber: '254712345678', // 用户手机号码
transactionDesc: 'Payment for goods', // 交易描述
callbackUrl: 'https://your-callback-url.com', // 回调 URL
);
// 处理支付响应
if (paymentResponse.success) {
print('Payment initiated successfully: ${paymentResponse.transactionId}');
} else {
print('Payment failed: ${paymentResponse.message}');
}
} catch (e) {
print('Error initiating payment: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SasaPay Payment'),
),
body: Center(
child: ElevatedButton(
onPressed: initiatePayment,
child: Text('Pay with SasaPay'),
),
),
);
}
}
4. 处理支付回调
SasaPay 支付完成后,会将支付结果发送到你提供的回调 URL。你需要在服务器端处理这些回调,并根据支付结果更新订单状态。
5. 查询支付状态
你还可以使用 SasaPay
插件来查询支付状态:
Future<void> checkPaymentStatus(String transactionId) async {
try {
final statusResponse = await SasaPay.checkPaymentStatus(transactionId);
if (statusResponse.success) {
print('Payment status: ${statusResponse.status}');
} else {
print('Failed to check payment status: ${statusResponse.message}');
}
} catch (e) {
print('Error checking payment status: $e');
}
}