Flutter支付宝支付插件alipay_kit的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter支付宝支付插件alipay_kit的使用

alipay_kit

Pub Package License

Flutter版支付宝SDK。

相关工具

Dart/Flutter Pub 私服

相关文档

开始使用

Android

# 不需要做任何额外接入工作
# 混淆已打入 Library,随 Library 引用,自动添加到 apk 打包混淆

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),
        );
      },
    );
  }
}

注意事项

  1. 替换密钥和APP ID:请将代码中的_ALIPAY_APPID_ALIPAY_PID_ALIPAY_TARGETID_ALIPAY_PRIVATEKEY替换为你的实际值。
  2. 环境检查:确保设备上已安装支付宝客户端,并且版本支持支付宝SDK的功能。
  3. 支付参数:根据实际业务需求调整支付参数,如金额、订单号等。

通过以上步骤和示例代码,你应该能够在Flutter项目中成功集成并使用支付宝支付功能。如果有任何问题或需要进一步的帮助,请参考官方文档或访问相关GitHub仓库。


更多关于Flutter支付宝支付插件alipay_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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配置

  1. android/app/src/main/AndroidManifest.xml中添加必要的权限:
<uses-permission android:name="android.permission.INTERNET"/>
  1. 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'
        }
    }
}
  1. 将支付宝SDK的配置文件(如alipaySdk.properties)放置在android/app/src/main/assets/目录下。

iOS配置

  1. ios/Runner/Info.plist中添加必要的配置,如URL Scheme等(具体配置请参考支付宝官方文档)。

  2. 确保在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');
    }
  }
}

注意事项

  1. 签名:上面的代码示例中,orderStringsign字段需要根据你的私钥和支付宝的算法进行签名。你需要自己实现签名逻辑或使用支付宝提供的工具生成签名。

  2. 安全性:不要在生产环境中硬编码敏感信息(如app_id、私钥等)。你应该使用环境变量或安全的存储方式来管理这些信息。

  3. 测试环境:在测试支付宝支付功能时,建议使用支付宝沙箱环境,以避免对真实账户造成影响。

  4. 错误处理:在生产代码中,你应该添加更详细的错误处理和用户反馈机制。

希望这个示例代码能帮助你在Flutter项目中集成支付宝支付功能!

回到顶部