Flutter支付宝支付插件alipay_kit的使用
Flutter支付宝支付插件alipay_kit的使用
alipay_kit
Flutter版支付宝SDK。
相关工具
Dart/Flutter Pub 私服
相关文档
开始使用
Android
# 不需要做任何额外接入工作
# 混淆已打入 Library,随 Library 引用,自动添加到 apk 打包混淆
- 获取 Android 签名信息
- 新版已没有「UTDID冲突的问题」
iOS
# 不需要做任何额外接入工作
# 配置已集成到脚本里
- UTDID冲突的问题解决方案
alipay_kit:
+ ios: noutdid # 默认 utdid
Flutter
- 配置
dependencies:
alipay_kit: ^${latestTag} # 默认不包含iOS支付
# alipay_kit_ios: ^${latestTag} # iOS支付
alipay_kit:
# ios: noutdid # 默认 utdid
scheme: ${your alipay scheme} # scheme 不能为纯数字,推荐:alipay${appId}
- 安装(仅iOS)
# step.1 安装必要依赖
sudo gem install plist
# step.2 切换工作目录,插件里为 example/ios/,普通项目为 ios/
cd example/ios/
# step.3 执行脚本
pod install
示例代码
以下是一个完整的示例代码,展示了如何在Flutter项目中使用alipay_kit
进行支付和授权:
import 'dart:async';
import 'dart:convert';
import 'package:alipay_kit/alipay_kit.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
);
}
}
class Home extends StatefulWidget {
const Home({super.key});
@override
State<Home> createState() => _HomeState();
}
/// pkcs1 -> '-----BEGIN RSA PRIVATE KEY-----\n${支付宝RSA签名工具生产的私钥}\n-----END RSA PRIVATE KEY-----'
/// pkcs8 -> '-----BEGIN PRIVATE KEY-----\n${支付宝RSA签名工具生产的私钥}\n-----END PRIVATE KEY-----'
class _HomeState extends State<Home> {
static const bool _ALIPAY_USE_RSA2 = true;
static const String _ALIPAY_APPID = 'your alipay appId'; // 支付/登录
static const String _ALIPAY_PID = 'your alipay pid'; // 登录
static const String _ALIPAY_TARGETID = 'your alipay targetId'; // 登录
static const String _ALIPAY_PRIVATEKEY =
'your alipay rsa private key(pkcs1/pkcs8)'; // 支付/登录
late final StreamSubscription<AlipayResp> _paySubs;
late final StreamSubscription<AlipayResp> _authSubs;
@override
void initState() {
super.initState();
_paySubs = AlipayKitPlatform.instance.payResp().listen(_listenPay);
_authSubs = AlipayKitPlatform.instance.authResp().listen(_listenAuth);
}
void _listenPay(AlipayResp resp) {
final String content = 'pay: ${resp.resultStatus} - ${resp.result}';
_showTips('支付', content);
}
void _listenAuth(AlipayResp resp) {
final String content = 'auth: ${resp.resultStatus} - ${resp.result}';
_showTips('授权登录', content);
}
@override
void dispose() {
_paySubs.cancel();
_authSubs.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Alipay Kit Demo'),
),
body: ListView(
children: <Widget>[
ListTile(
title: Text('环境检查'),
onTap: () async {
final String content =
'alipay: ${await AlipayKitPlatform.instance.isInstalled()}';
_showTips('环境检查', content);
},
),
ListTile(
title: Text('支付'),
onTap: () {
final Map<String, dynamic> bizContent = <String, dynamic>{
'timeout_express': '30m',
'product_code': 'QUICK_MSECURITY_PAY',
'total_amount': '0.01',
'subject': '测试支付',
'body': '我是测试数据',
'out_trade_no': DateTime.now().millisecondsSinceEpoch.toString(),
};
final Map<String, dynamic> orderInfo = <String, dynamic>{
'app_id': _ALIPAY_APPID,
'biz_content': json.encode(bizContent),
'charset': 'utf-8',
'method': 'alipay.trade.app.pay',
'timestamp': DateTime.now().toIso8601String().substring(0, 19),
'version': '1.0',
};
AlipayKitPlatform.instance.unsafePay(
orderInfo: orderInfo,
signType: _ALIPAY_USE_RSA2
? UnsafeAlipayKitPlatform.SIGNTYPE_RSA2
: UnsafeAlipayKitPlatform.SIGNTYPE_RSA,
privateKey: _ALIPAY_PRIVATEKEY,
);
},
),
ListTile(
title: Text('授权'),
onTap: () {
AlipayKitPlatform.instance.unsafeAuth(
appId: _ALIPAY_APPID,
pid: _ALIPAY_PID,
targetId: _ALIPAY_TARGETID,
signType: _ALIPAY_USE_RSA2
? UnsafeAlipayKitPlatform.SIGNTYPE_RSA2
: UnsafeAlipayKitPlatform.SIGNTYPE_RSA,
privateKey: _ALIPAY_PRIVATEKEY,
);
},
),
],
),
);
}
void _showTips(String title, String content) {
showDialog<void>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(title),
content: Text(content),
);
},
);
}
}
注意事项
- 替换密钥和APP ID:请将代码中的
_ALIPAY_APPID
、_ALIPAY_PID
、_ALIPAY_TARGETID
和_ALIPAY_PRIVATEKEY
替换为你的实际值。 - 环境检查:确保设备上已安装支付宝客户端,并且版本支持支付宝SDK的功能。
- 支付参数:根据实际业务需求调整支付参数,如金额、订单号等。
通过以上步骤和示例代码,你应该能够在Flutter项目中成功集成并使用支付宝支付功能。如果有任何问题或需要进一步的帮助,请参考官方文档或访问相关GitHub仓库。
更多关于Flutter支付宝支付插件alipay_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付宝支付插件alipay_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用alipay_kit
插件来实现支付宝支付的示例代码。这个示例假设你已经有一个Flutter项目,并且已经添加了alipay_kit
依赖。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加alipay_kit
依赖:
dependencies:
flutter:
sdk: flutter
alipay_kit: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 配置Android和iOS
Android配置
- 在
android/app/src/main/AndroidManifest.xml
中添加必要的权限:
<uses-permission android:name="android.permission.INTERNET"/>
- 在
android/app/build.gradle
中添加以下内容以配置签名(你需要使用你自己的签名信息):
android {
...
signingConfigs {
release {
keyAlias 'your_key_alias'
keyPassword 'your_key_password'
storeFile file('path/to/your/keystore.jks')
storePassword 'your_store_password'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
- 将支付宝SDK的配置文件(如
alipaySdk.properties
)放置在android/app/src/main/assets/
目录下。
iOS配置
-
在
ios/Runner/Info.plist
中添加必要的配置,如URL Scheme等(具体配置请参考支付宝官方文档)。 -
确保在Xcode中配置了正确的签名和权限。
步骤 3: 实现支付功能
在你的Flutter代码中,你可以这样使用alipay_kit
来实现支付:
import 'package:flutter/material.dart';
import 'package:alipay_kit/alipay_kit.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Alipay Payment Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _startAlipayPayment,
child: Text('Pay with Alipay'),
),
),
),
);
}
Future<void> _startAlipayPayment() async {
try {
// 替换为你的实际订单信息
final orderString = '''{
"app_id": "你的app_id",
"method": "alipay.trade.app.pay",
"format": "JSON",
"charset": "utf-8",
"sign_type": "RSA2",
"timestamp": "2023-10-10 10:10:10",
"version": "1.0",
"biz_content": {
"out_trade_no": "20231010000001",
"product_code": "QUICK_MSECURITY_PAY",
"total_amount": "88.88",
"subject": "Test Order",
"body": "Test order description"
},
"sign": "签名信息" // 这里需要放置签名后的字符串
}''';
final result = await AlipayKit.pay(orderString: orderString);
if (result['resultCode'] == '9000') {
print('支付成功');
} else {
print('支付失败: ${result['resultMsg'] ?? '未知错误'}');
}
} catch (e) {
print('支付过程中发生错误: $e');
}
}
}
注意事项
-
签名:上面的代码示例中,
orderString
的sign
字段需要根据你的私钥和支付宝的算法进行签名。你需要自己实现签名逻辑或使用支付宝提供的工具生成签名。 -
安全性:不要在生产环境中硬编码敏感信息(如app_id、私钥等)。你应该使用环境变量或安全的存储方式来管理这些信息。
-
测试环境:在测试支付宝支付功能时,建议使用支付宝沙箱环境,以避免对真实账户造成影响。
-
错误处理:在生产代码中,你应该添加更详细的错误处理和用户反馈机制。
希望这个示例代码能帮助你在Flutter项目中集成支付宝支付功能!