Flutter支付功能插件payme_sdk_flutter的使用
Flutter支付功能插件payme_sdk_flutter的使用
PayME SDK Flutter 是一个用于将应用与PayME平台集成的插件。
开始使用
本项目是一个Flutter插件包的起点,包含Android和/或iOS的特定平台实现代码。
如果你需要开始使用Flutter,可以查看官方文档,其中包括教程、示例、移动开发指南以及完整的API引用。
Android
- 设置
minSdk
版本至少为21。 - 修改
MainActivity
类,继承自FlutterFragmentActivity
。
iOS
- 确保iOS版本大于等于11。
- 在
plist
文件中添加NSContactsUsageDescription
。
完整示例Demo
以下是使用payme_sdk_flutter
插件的完整示例代码:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:payme_sdk_flutter/payme_sdk_flutter.dart';
import 'package:payme_sdk_flutter_example/row_input.dart';
void main() {
runApp(MaterialApp(home: MyApp()));
}
// 提供默认的沙盒环境参数
const APP_TOKEN_DEFAULT_SANDBOX = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTQsImlhdCI6MTYxNDE2NDI3MH0.MmzNL81YTx8XyTu6SczAqZtnCA_ALsn9GHsJGBKJSIk";
const PUBLIC_KEY_DEFAULT_SANDBOX = "-----BEGIN PUBLIC KEY-----\n" +
" MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMyTFdiYBiaSIBgqFdxSgzk5LYXKocgT\n" +
" MCx/g1gz9k2jadJ1PDohCs7N65+dh/0dTbT8CIvXrrlAgQT1zitpMPECAwEAAQ==\n" +
" -----END PUBLIC KEY-----";
const SECRET_KEY_DEFAULT_SANDBOX = "de7bbe6566b0f1c38898b7751b057a94";
const PRIVATE_KEY_DEFAULT_SANDBOX = "-----BEGIN RSA PRIVATE KEY-----\n" +
" MIIBOQIBAAJAZCKupmrF4laDA7mzlQoxSYlQApMzY7EtyAvSZhJs1NeW5dyoc0XL\n" +
" yM+/Uxuh1bAWgcMLh3/0Tl1J7udJGTWdkQIDAQABAkAjzvM9t7kD84PudR3vEjIF\n" +
" 5gCiqxkZcWa5vuCCd9xLUEkdxyvcaLWZEqAjCmF0V3tygvg8EVgZvdD0apgngmAB\n" +
" AiEAvTF57hIp2hkf7WJnueuZNY4zhxn7QNi3CQlGwrjOqRECIQCHfqO53A5rvxCA\n" +
" ILzx7yXHzk6wnMcGnkNu4b5GH8usgQIhAKwv4WbZRRnoD/S+wOSnFfN2DlOBQ/jK\n" +
" xBsHRE1oYT3hAiBSfLx8OAXnfogzGLsupqLfgy/QwYFA/DSdWn0V/+FlAQIgEUXd\n" +
" A8pNN3/HewlpwTGfoNE8zCupzYQrYZ3ld8XPGeQ=\n" +
" -----END RSA PRIVATE KEY-----";
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _accountStatus = '未连接。请先登录';
PaymeSdkFlutterPayCode _payCode = PaymeSdkFlutterPayCode.PAYME;
TextEditingController _userIdController = TextEditingController();
TextEditingController _phoneController = TextEditingController();
[@override](/user/override)
Widget build(BuildContext context) {
final sdkArgs = PaymeSdkFlutterConfig(
appToken: APP_TOKEN_DEFAULT_SANDBOX,
publicKey: PUBLIC_KEY_DEFAULT_SANDBOX,
privateKey: PRIVATE_KEY_DEFAULT_SANDBOX,
secretKey: SECRET_KEY_DEFAULT_SANDBOX,
);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('PayME SDK 示例'),
),
body: GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
print('aaaaa');
FocusManager.instance.primaryFocus?.unfocus();
},
child: Center(
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(10.0),
child: Text(_accountStatus),
),
_buildTextField('用户ID', _userIdController),
_buildTextField('电话', _phoneController),
Container(
width: double.infinity,
child: Row(
mainAxisSize: MainAxisSize.max,
children: [
_buildButton(() async {
try {
final status = await PaymeSdkFlutter.login(
_userIdController.text,
_phoneController.text,
sdkArgs);
setState(() {
_accountStatus = status.toString();
});
print(status);
} catch (e) {
print(e);
}
}, '登录'),
_buildButton(() async {
try {
await PaymeSdkFlutter.logout();
setState(() {
_accountStatus = '未连接。请先登录';
});
} catch (e) {
print(e);
}
}, '登出'),
],
),
),
Expanded(
child: ListView(
children: [
_buildDropdown(),
_buildButton(() {
PaymeSdkFlutter.openWallet();
}, '打开钱包'),
_buildButton(() async {
try {
await PaymeSdkFlutter.openKYC();
} on PlatformException catch (e) {
showAlertDialog(context,
content: e.message ?? '发生错误');
}
}, '打开KYC'),
RowFunction(
placeholder: '存款金额',
onPress: (value) async {
if (value.isEmpty) {
return;
}
try {
final response = await PaymeSdkFlutter.deposit(
amount: int.parse(value));
print(response);
} on PlatformException catch (e) {
print(e);
showAlertDialog(context,
title: '错误',
content: e.message ?? '发生错误');
}
},
text: '存款',
),
RowFunction(
placeholder: '取款金额',
onPress: (value) async {
if (value.isEmpty) {
return;
}
try {
final response = await PaymeSdkFlutter.withdraw(
amount: int.parse(value));
print(response);
} on PlatformException catch (e) {
print(e);
showAlertDialog(context,
title: '错误',
content: e.message ?? '发生错误');
}
},
text: '取款',
),
RowFunction(
placeholder: '转账金额',
onPress: (value) async {
if (value.isEmpty) {
return;
}
try {
final response = await PaymeSdkFlutter.transfer(
amount: int.parse(value));
print(response);
} on PlatformException catch (e) {
print(e);
showAlertDialog(context,
title: '错误',
content: e.message ?? '发生错误');
}
},
text: '转账',
),
RowFunction(
placeholder: '支付金额',
onPress: (value) async {
if (value.isEmpty) {
return;
}
try {
final response = await PaymeSdkFlutter.pay(
int.parse(value),
DateTime.now()
.millisecondsSinceEpoch
.toString(),
_payCode,
storeId: '10581207');
print(response);
} on PlatformException catch (e) {
print(e);
if (e.code != 'USER_CANCELLED') {
showAlertDialog(context,
title: '错误',
content: e.message ?? '发生错误');
}
}
},
text: '支付',
),
_buildButton(() async {
try {
final response =
await PaymeSdkFlutter.getSupportedServices();
showAlertDialog(context,
title: '获取服务列表成功',
content: response.toString());
} on PlatformException catch (e) {
showAlertDialog(context,
content: e.message ?? '发生错误');
}
}, '获取服务列表'),
],
),
),
],
),
),
),
),
);
}
Widget _buildButton(VoidCallback onPress, String text) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 18),
child: Container(
height: 40,
child: ElevatedButton(
style: ButtonStyle(
foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
backgroundColor: MaterialStateProperty.all<Color>(Colors.blue),
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
))),
onPressed: onPress,
child: Text(text),
)),
);
}
Widget _buildTextField(String placeholder, TextEditingController controller) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 16),
child: TextField(
controller: controller,
decoration: InputDecoration(
contentPadding: const EdgeInsets.symmetric(horizontal: 20),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(26.0),
),
hintText: placeholder,
),
),
);
}
Widget _buildDropdown() {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16),
child: Row(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(0, 0, 20, 0),
child: Text('选择PAYCODE: '),
),
Container(
height: 40,
decoration: BoxDecoration(
color: Colors.black12, borderRadius: BorderRadius.circular(30)),
child: DropdownButton<PaymeSdkFlutterPayCode>(
value: _payCode,
icon: Icon(Icons.arrow_drop_down),
iconSize: 42,
underline: SizedBox(),
items: [
PaymeSdkFlutterPayCode.PAYME,
PaymeSdkFlutterPayCode.ATM,
PaymeSdkFlutterPayCode.CREDIT,
PaymeSdkFlutterPayCode.MANUAL_BANK,
PaymeSdkFlutterPayCode.VN_PAY,
PaymeSdkFlutterPayCode.MOMO
].map((PaymeSdkFlutterPayCode value) {
return DropdownMenuItem(
value: value,
child: Padding(
padding:
const EdgeInsets.symmetric(vertical: 0, horizontal: 20),
child: Text(value.toString().split('.').last),
),
);
}).toList(),
onChanged: (value) {
setState(() {
_payCode = value!;
});
},
),
),
],
),
);
}
showAlertDialog(BuildContext context,
{String title = '通知', String content = '发生错误'}) {
// 显示对话框
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(title),
content: Text(content),
actions: [
TextButton(
child: Text("已理解"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
}
更多关于Flutter支付功能插件payme_sdk_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter支付功能插件payme_sdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
Flutter 是一个由 Google 开发的开源框架,用于构建跨平台的移动应用程序。Flutter 提供了丰富的插件生态系统,使开发者能够轻松地集成各种功能,包括支付功能。payme_sdk_flutter
是一个专为 Flutter 应用程序设计的支付插件,允许开发者集成支付功能到他们的应用程序中。这个插件可能提供了与特定支付网关或支付服务提供商的集成,使开发者能够处理支付交易。
为了有效地使用 payme_sdk_flutter
插件,开发者需要遵循以下步骤:
- 安装插件:首先,开发者需要在
pubspec.yaml
文件中添加payme_sdk_flutter
插件的依赖项。这可以通过在dependencies
部分添加插件名称和版本号来完成。
dependencies:
flutter:
sdk: flutter
payme_sdk_flutter: ^1.0.0
- 导入插件:在需要使用支付功能的 Dart 文件中,开发者需要导入
payme_sdk_flutter
插件。这可以通过在文件顶部添加import 'package:payme_sdk_flutter/payme_sdk_flutter.dart';
来实现。
import 'package:payme_sdk_flutter/payme_sdk_flutter.dart';
- 初始化插件:在应用程序启动时,开发者需要初始化
payme_sdk_flutter
插件。这通常涉及设置一些配置参数,如支付网关的 API 密钥、商户 ID 等。
PaymeSdkFlutter.initialize(
apiKey: 'your_api_key',
merchantId: 'your_merchant_id',
);
- 创建支付请求:开发者需要创建一个支付请求对象,该对象包含支付所需的所有信息,如订单金额、货币类型、商品描述等。
final paymentRequest = PaymentRequest(
amount: 1000, // 订单金额
currency: 'USD', // 货币类型
description: 'Sample Payment', // 商品描述
);
- 处理支付响应:开发者需要设置一个回调函数来处理支付响应。这通常涉及检查支付是否成功,并根据响应更新应用程序的状态或执行其他操作。
PaymeSdkFlutter.onPaymentResponse((response) {
if (response.success) {
print('Payment successful!');
} else {
print('Payment failed: ${response.errorMessage}');
}
});
- 启动支付:最后,开发者可以调用插件提供的方法来启动支付流程。这可能会打开一个支付界面,用户可以在其中输入支付信息并完成支付。
PaymeSdkFlutter.startPayment(paymentRequest);
以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:payme_sdk_flutter/payme_sdk_flutter.dart';
void main() async {
// 初始化插件
PaymeSdkFlutter.initialize(
apiKey: 'your_api_key',
merchantId: 'your_merchant_id',
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Payme SDK Flutter Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 创建支付请求
final paymentRequest = PaymentRequest(
amount: 1000, // 订单金额
currency: 'USD', // 货币类型
description: 'Sample Payment', // 商品描述
);
// 处理支付响应
PaymeSdkFlutter.onPaymentResponse((response) {
if (response.success) {
print('Payment successful!');
} else {
print('Payment failed: ${response.errorMessage}');
}
});
// 启动支付
PaymeSdkFlutter.startPayment(paymentRequest);
},
child: Text('Pay Now'),
),
),
),
);
}
}