Flutter支付集成插件weipl_checkout_flutter的使用
Flutter支付集成插件weipl_checkout_flutter的使用
weipl_checkout_flutter
是一个用于集成 Worldline ePayments India Checkout 的官方 Flutter 插件。本文将详细介绍如何在 Flutter 应用中集成并使用该插件。
安装
首先,在你的 pubspec.yaml
文件中添加依赖:
dependencies:
weipl_checkout_flutter: ^1.1.0
注意:
- 对于 Android,确保应用的最低 API 级别为 21 或更高。
- 对于 iOS,确保应用的最低部署目标为 iOS 12.0 或更高。
然后运行以下命令获取依赖包:
flutter packages get
使用
导入包
在需要使用的 Dart 文件中导入插件:
import 'package:weipl_checkout_flutter/weipl_checkout_flutter.dart';
创建插件实例
创建 WeiplCheckoutFlutter
实例:
WeiplCheckoutFlutter wlCheckoutFlutter = WeiplCheckoutFlutter();
绑定事件监听器
插件使用基于事件的通信机制,并在支付成功或失败时发出事件。你可以通过 on(String event, Function handler)
方法绑定事件监听器:
wlCheckoutFlutter.on(WeiplCheckoutFlutter.wlResponse, handleResponse);
定义处理函数:
void handleResponse(Map<dynamic, dynamic> response) {
// 处理支付响应
}
设置选项
配置支付所需的参数:
var options = {
"features": {
"enableAbortResponse": true,
"enableExpressPay": true,
"enableInstrumentDeRegistration": true,
"enableMerTxnDetails": true,
},
"consumerData": {
"deviceId": Platform.isAndroid ? "ANDROIDSH2" : "iOSSH2", // 根据平台选择设备ID
"token": "a7356fb644fa98999a45d62361c80a574ff24f96b59669381593edbb97ef4feb0ea427d19e79b8d4ef5d82d38bb0eae890615b5054c702695deef11ec771b751",
"paymentMode": "all",
"merchantLogoUrl": "https://www.paynimo.com/CompanyDocs/company-logo-vertical.png",
"merchantId": "L3348",
"currency": "INR",
"consumerId": "c964634",
"consumerMobileNo": "9876543210",
"consumerEmailId": "test@test.com",
"txnId": "1684835158539",
"items": [
{"itemId": "first", "amount": "10", "comAmt": "0"}
],
"customStyle": {
"PRIMARY_COLOR_CODE": "#45beaa",
"SECONDARY_COLOR_CODE": "#FFFFFF",
"BUTTON_COLOR_CODE_1": "#2d8c8c",
"BUTTON_COLOR_CODE_2": "#FFFFFF"
}
}
};
打开支付界面
调用 open
方法打开支付界面:
wlCheckoutFlutter.open(options);
响应处理
根据文档中的详细说明处理响应数据,并确保在服务器端执行 HASH 匹配逻辑。
示例 Demo
以下是一个完整的示例 Demo:
import 'package:flutter/material.dart';
import 'package:weipl_checkout_flutter/weipl_checkout_flutter.dart';
import 'dart:io' show Platform;
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
WeiplCheckoutFlutter wlCheckoutFlutter = WeiplCheckoutFlutter();
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () {
String deviceID = "";
if (Platform.isAndroid) {
deviceID = "ANDROIDSH2";
} else if (Platform.isIOS) {
deviceID = "iOSSH2";
}
var reqJson = {
"features": {
"enableAbortResponse": true,
"enableExpressPay": true,
"enableInstrumentDeRegistration": true,
"enableMerTxnDetails": true
},
"consumerData": {
"deviceId": deviceID,
"token": "your_token_here",
"paymentMode": "all",
"merchantLogoUrl": "https://www.paynimo.com/CompanyDocs/company-logo-vertical.png",
"merchantId": "your_merchant_id",
"currency": "INR",
"consumerId": "your_consumer_id",
"consumerMobileNo": "your_mobile_number",
"consumerEmailId": "your_email@example.com",
"txnId": "unique_transaction_id",
"items": [
{"itemId": "first", "amount": "10", "comAmt": "0"}
],
"customStyle": {
"PRIMARY_COLOR_CODE": "#45beaa",
"SECONDARY_COLOR_CODE": "#FFFFFF",
"BUTTON_COLOR_CODE_1": "#2d8c8c",
"BUTTON_COLOR_CODE_2": "#FFFFFF"
}
}
};
wlCheckoutFlutter.on(WeiplCheckoutFlutter.wlResponse, handleResponse);
wlCheckoutFlutter.open(reqJson);
},
child: const Text("Proceed")),
],
),
),
);
}
void handleResponse(Map<dynamic, dynamic> response) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text("Payment Response"),
content: Text(response.toString()),
actions: [
TextButton(
child: const Text("OK"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
}
以上代码展示了如何在 Flutter 应用中集成 weipl_checkout_flutter
插件,并实现支付功能。请根据实际情况调整参数和配置。
更多关于Flutter支付集成插件weipl_checkout_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件weipl_checkout_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中集成并使用weipl_checkout_flutter
插件的一个示例代码案例。这个插件通常用于处理支付功能,假设你已经完成了基本的Flutter开发环境搭建和插件安装。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加weipl_checkout_flutter
依赖:
dependencies:
flutter:
sdk: flutter
weipl_checkout_flutter: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来获取依赖。
步骤 2: 配置Android和iOS支付环境
由于支付通常涉及到敏感信息和平台特定的配置,确保你已经按照weipl_checkout_flutter
的官方文档配置了Android和iOS项目。这可能包括添加必要的权限、配置支付网关等。
步骤 3: 使用插件进行支付
以下是一个简单的Flutter应用示例,展示了如何使用weipl_checkout_flutter
插件发起支付请求:
import 'package:flutter/material.dart';
import 'package:weipl_checkout_flutter/weipl_checkout_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Payment Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PaymentScreen(),
);
}
}
class PaymentScreen extends StatefulWidget {
@override
_PaymentScreenState createState() => _PaymentScreenState();
}
class _PaymentScreenState extends State<PaymentScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Payment Screen'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
// 配置支付参数,这里需要根据实际支付平台的要求来填写
final paymentParams = WeiplCheckoutParams(
appId: 'your_app_id', // 替换为你的应用ID
orderId: 'order_${DateTime.now().millisecondsSinceEpoch}', // 订单ID,需要唯一
amount: '100', // 支付金额
currency: 'CNY', // 货币类型
description: 'Test Order', // 订单描述
// 其他必要的参数,如回调URL等,根据支付平台要求添加
);
// 发起支付请求
final result = await WeiplCheckoutFlutter.startCheckout(context, paymentParams);
// 处理支付结果
if (result.success) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Payment Success'),
content: Text('Payment was successful!'),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: Text('OK'),
),
],
),
);
} else {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Payment Failed'),
content: Text('Payment failed with error: ${result.errorMessage}'),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: Text('OK'),
),
],
),
);
}
} catch (e) {
// 处理异常
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Error'),
content: Text('An error occurred: $e'),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: Text('OK'),
),
],
),
);
}
},
child: Text('Pay Now'),
),
),
);
}
}
注意事项
- 支付参数:上面的
WeiplCheckoutParams
中的参数需要根据实际的支付平台要求进行调整。 - 错误处理:在实际应用中,错误处理应该更加细致,可能需要处理更多的异常情况。
- 安全性:确保你的支付参数和敏感信息在传输和存储过程中的安全性。
- 测试:在上线之前,务必进行充分的测试,包括模拟支付和真实支付测试。
希望这个示例代码能帮助你在Flutter应用中集成weipl_checkout_flutter
插件。如果有任何进一步的问题,建议查阅官方文档或联系插件的维护者。