Flutter支付集成插件ecommpay_flutter_plugin的使用
Flutter支付集成插件ecommpay_flutter_plugin的使用
使用
打开支付表单
要打开支付表单,请遵循以下步骤:
- 创建
EcmpPaymentInfo
对象。
该对象必须包含以下必需参数:
projectId
(int)——由Ecommpay分配的项目标识符paymentId
(String)——在项目内唯一的支付标识符paymentCurrency
(String)——以ISO 4217 alpha-3格式表示的支付货币代码paymentAmount
(int)——以最小货币单位表示的支付金额customerId
(String)——项目内的客户标识符signature
(String)——在指定所有必需参数后生成的请求签名
final paymentInfo = EcmpPaymentInfo(
projectId: 12312,
paymentId: "paymentId",
paymentAmount: 100,
paymentCurrency: "USD",
);
- 对
EcmpPaymentInfo
对象中包含的参数进行签名。
final paramsForSignature = await ecmpPlugin.getParamsForSignature(paymentInfo);
paymentInfo.signature = "CALCULATED_SIGNATURE_FROM_YOUR_BACKEND";
- 创建
EcmpPaymentOptions
对象,其中包含必需的参数actionType
(枚举),其值指定所需的操作类型:
EcmpActionType.sale
EcmpActionType.auth
EcmpActionType.verify
EcmpActionType.tokenize
除了必需的EcmpPaymentInfo
对象和actionType
参数外,示例还包含几个额外的参数,包括用于收集客户信息的EcmpAdditionalFields
对象。
final paymentOptions = EcmpPaymentOptions(
actionType: EcmpActionType.Sale,
paymentInfo: paymentInfo,
isDarkTheme: false,
//如果需要使用真实服务,请设置为EcmpMockModeType.disabled
mockModeType: EcmpMockModeType.success,
//如果需要,设置显示模式
screenDisplayModes: [EcmpScreenDisplayMode.hideDeclineFinalScreen],
//如果需要,设置附加字段
additionalFields: [
EcmpAdditionalField(type: "email", value: "mail@mail.com"),
EcmpAdditionalField(type: "first_name", value: "firstName"),
],
//如果需要,设置收款人信息
recipientInfo: EcmpRecipientInfo(),
//如果需要,设置定期信息
recurrentData: EcmpRecurrentData(),
);
- 创建
EcmpPlugin
对象。
final ecmpPlugin = EcmpPlugin();
- 打开支付表单并处理结果。
final response = await ecmpPlugin.sdkRun(paymentOptions);
完整示例Demo
以下是一个完整的示例,展示了如何使用ecommpay_flutter_plugin
插件进行支付集成。
import 'package:ecommpay_flutter_plugin/ecmpplugin.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_additional_field.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_payment_info.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_payment_options.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_recipient_info.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_recurrent_data.dart';
import 'package:ecommpay_flutter_plugin_example/signature_generator.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: ProductDetailsPage(),
);
}
}
class ProductDetailsPage extends StatelessWidget {
const ProductDetailsPage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('产品详情'),
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () async {
final ecmpPlugin = EcmpPlugin();
// 创建支付信息
final paymentInfo = EcmpPaymentInfo(
projectId: 138723,
paymentId: "paymentId",
paymentAmount: 100,
paymentCurrency: "USD",
);
// 获取签名参数
final paramsForSignature = await ecmpPlugin.getParamsForSignature(paymentInfo);
debugPrint(paramsForSignature);
// 计算并设置签名,并将其设置到支付信息中
paymentInfo.signature = SignatureGenerator.generateSignature(
paramsForSignature!, "secret key");
final paymentOptions = EcmpPaymentOptions(
actionType: EcmpActionType.sale,
paymentInfo: paymentInfo,
isDarkTheme: false,
// 如果需要使用真实服务,请设置为EcmpMockModeType.disabled
mockModeType: EcmpMockModeType.success,
// 如果需要,设置显示模式
screenDisplayModes: [EcmpScreenDisplayMode.hideDeclineFinalScreen],
// 如果需要,设置附加字段
additionalFields: [
EcmpAdditionalField(type: "email", value: "mail@mail.com"),
EcmpAdditionalField(type: "first_name", value: "firstName"),
],
// 如果需要,设置收款人信息
recipientInfo: EcmpRecipientInfo(),
// 如果需要,设置定期信息
recurrentData: EcmpRecurrentData(),
);
try {
final response = await ecmpPlugin.sdkRun(paymentOptions);
debugPrint(response.toString());
} on PlatformException {
debugPrint("PlatformException");
}
},
label: const Text('购买'),
),
body: ListView(
children: [
// 产品图片
Container(
height: 300,
color: Colors.grey,
),
// 产品标题
const Padding(
padding: EdgeInsets.symmetric(horizontal: 8.0, vertical: 10.0),
child: Text(
'数字印花纯棉果阿风格热带男式衬衫,半袖,魔法棉',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18.0),
),
),
// 产品描述
const Padding(
padding: EdgeInsets.symmetric(horizontal: 8.0),
child: Text(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla eget risus lacus. Curabitur a turpis eros. Cras congue dui nec magna aliquet, quis vehicula libero egestas. Nullam at sollicitudin sem. Sed a augue dictum, tempor mi quis, feugiat neque. Aliquam egestas lectus orci, et rhoncus augue suscipit quis. Ut quis porta magna.'),
),
// 产品价格
const Padding(
padding: EdgeInsets.all(16.0),
child: Text(
'\$100',
style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.w500),
),
),
const SizedBox(
height: 30.0,
),
],
),
);
}
}
更多关于Flutter支付集成插件ecommpay_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件ecommpay_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成并使用ecommpay_flutter_plugin
进行支付的示例代码。请注意,实际使用时需要根据eCommPay提供的文档和API密钥进行配置。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加ecommpay_flutter_plugin
依赖:
dependencies:
flutter:
sdk: flutter
ecommpay_flutter_plugin: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来获取依赖。
2. 配置插件
在你的Flutter应用中,你需要在适当的位置(例如main.dart
或专门的支付页面)配置和初始化eCommPay插件。
import 'package:flutter/material.dart';
import 'package:ecommpay_flutter_plugin/ecommpay_flutter_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: PaymentScreen(),
);
}
}
class PaymentScreen extends StatefulWidget {
@override
_PaymentScreenState createState() => _PaymentScreenState();
}
class _PaymentScreenState extends State<PaymentScreen> {
final EcommpayFlutterPlugin _ecommpay = EcommpayFlutterPlugin();
@override
void initState() {
super.initState();
// 初始化插件,通常这里需要传递你的API密钥和其他配置
_initializePlugin();
}
Future<void> _initializePlugin() async {
try {
// 假设你的API密钥和其他配置信息如下
String apiKey = "your_api_key_here"; // 替换为你的实际API密钥
String merchantId = "your_merchant_id_here"; // 替换为你的实际商户ID
String publicKey = "your_public_key_here"; // 替换为你的实际公钥
// 初始化eCommPay插件
await _ecommpay.initialize(
apiKey: apiKey,
merchantId: merchantId,
publicKey: publicKey,
);
} catch (e) {
print("初始化插件失败: $e");
}
}
void _startPayment() async {
try {
// 构建支付请求参数,这里需要根据eCommPay的文档填写实际参数
Map<String, dynamic> paymentData = {
"amount": 100.0, // 支付金额
"currency": "USD", // 货币类型
"paymentMethod": "card", // 支付方式,例如信用卡
"returnUrl": "https://yourwebsite.com/return", // 支付完成后的返回URL
// 其他必要的支付参数...
};
// 发起支付请求
var response = await _ecommpay.startPayment(paymentData);
print("支付响应: $response");
// 根据响应处理支付结果
if (response["status"] == "success") {
// 支付成功处理逻辑
} else {
// 支付失败处理逻辑
}
} catch (e) {
print("支付失败: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('支付示例'),
),
body: Center(
child: ElevatedButton(
onPressed: _startPayment,
child: Text('发起支付'),
),
),
);
}
}
3. 处理支付回调
在实际应用中,支付完成后通常会有回调处理,例如通知用户支付结果或更新订单状态。这部分逻辑需要根据eCommPay提供的回调文档进行实现,通常涉及服务器端代码来处理支付通知。
注意事项
- 安全性:确保你的API密钥和其他敏感信息不会泄露。
- 测试环境:在正式集成之前,请先在eCommPay提供的测试环境中进行测试。
- 文档参考:详细集成步骤和参数说明请参考eCommPay官方文档。
以上代码提供了一个基本的集成示例,具体实现时请根据eCommPay的最新文档和API进行调整。