Flutter支付功能插件eyflutter_pays的使用

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

Flutter支付功能插件eyflutter_pays的使用

插件简介

eyflutter_pays 是一个用于实现 Flutter 应用内支付功能的插件。该插件支持 Android 和 iOS 平台,并提供了完整的支付流程管理,包括产品获取、购买、校验支付结果等功能。


使用步骤

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  eyflutter_pays: ^版本号

运行 flutter pub get 安装依赖。


2. 初始化插件

在应用初始化时,注册支付相关的回调函数。

import 'package:eyflutter_pays/eyflutter_pays.dart';

class _MyAppState extends State<MyApp> {
  final _eyflutterPaysPlugin = EyflutterPays();

  [@override](/user/override)
  void initState() {
    super.initState();

    /// 注册支付相关回调
    _eyflutterPaysPlugin.addListen(
      getProductError: (arguments) {
        // 获取产品失败
        print('获取产品失败: $arguments');
      },
      verifyPurchaseResult: (arguments) {
        // 校验支付结果
        print('去服务端校验支付结果: $arguments');
        // 示例: 提交支付结果到服务端进行验证
        _verifyPurchaseResult(arguments);
      },
      buyProductError: (arguments) {
        // 购买失败
        print('购买失败: $arguments');
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('支付功能示例')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () => _buyProduct('399319940751949893'),
                child: Text('购买产品1'),
              ),
              ElevatedButton(
                onPressed: () => _buyProduct('399319749353275461'),
                child: Text('购买产品2'),
              ),
              ElevatedButton(
                onPressed: () => _buyProduct('399319650032156741', orderNo: '437209513930522693'),
                child: Text('购买产品3'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  /// 购买指定产品ID
  void _buyProduct(String productId, {String orderNo = ''}) {
    _eyflutterPaysPlugin.buyProduct(productId: productId, orderNo: orderNo);
  }
}

3. 服务端校验支付结果

支付完成后,需要将支付结果提交到服务端进行验证。以下是一个简单的校验逻辑示例:

import 'dart:convert';
import 'dart:math';
import 'package:http/http.dart' as http;
import 'package:md5/md5.dart';

void _verifyPurchaseResult(Map<String, dynamic> arguments) async {
  print('开始校验支付结果');

  // 获取支付凭证
  String receiptData = arguments['receipt-data'];

  // 组装请求参数
  String receiptJson = jsonEncode({'receipt-data': receiptData});
  String orderNo = arguments['orderNo'];
  String transactionId = arguments['transactionId'];
  String productId = arguments['productId'];
  String userId = '用户ID'; // 替换为实际用户ID
  String sign = md5.convert(utf8.encode('$receiptJson$orderNo$transactionId$productId$userId')).toString();

  Map<String, dynamic> params = {
    'receipt': receiptJson,
    'orderNo': orderNo,
    'transactionId': transactionId,
    'productId': productId,
    'sign': sign,
  };

  try {
    // 发送请求到服务端
    final response = await http.post(
      Uri.parse('https://your-server-url/verify'), // 替换为实际服务端地址
      body: params,
    );

    print('服务端响应: ${response.body}');
    if (response.statusCode == 200) {
      print('支付成功');
    } else {
      print('支付失败');
    }
  } catch (e) {
    print('校验失败: $e');
  } finally {
    // 移除本地存储的支付凭证
    _eyflutterPaysPlugin.deleteByPaymentVoucher(arguments);
  }
}

4. 效果展示

运行示例代码后,点击按钮即可触发支付流程。支付完成后,会自动跳转到服务端进行校验,并根据校验结果提示支付成功或失败。


注意事项

  1. 服务端校验:支付完成后,必须通过服务端对支付结果进行验证,以确保支付的安全性。
  2. 本地凭证清理:支付完成后,记得调用 deleteByPaymentVoucher 方法清理本地存储的支付凭证。
  3. 测试环境:在开发和测试阶段,请使用沙盒账号进行支付测试。

完整示例代码

以下是完整的示例代码,可以直接运行:

import 'package:flutter/material.dart';
import 'package:eyflutter_pays/eyflutter_pays.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PaymentExample(),
    );
  }
}

class PaymentExample extends StatefulWidget {
  [@override](/user/override)
  _PaymentExampleState createState() => _PaymentExampleState();
}

class _PaymentExampleState extends State<PaymentExample> {
  final _eyflutterPaysPlugin = EyflutterPays();

  [@override](/user/override)
  void initState() {
    super.initState();

    // 注册支付回调
    _eyflutterPaysPlugin.addListen(
      getProductError: (arguments) {
        print('获取产品失败: $arguments');
      },
      verifyPurchaseResult: (arguments) {
        print('校验支付结果: $arguments');
        _verifyPurchaseResult(arguments);
      },
      buyProductError: (arguments) {
        print('购买失败: $arguments');
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('支付功能示例')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () => _buyProduct('399319940751949893'),
              child: Text('购买产品1'),
            ),
            ElevatedButton(
              onPressed: () => _buyProduct('399319749353275461'),
              child: Text('购买产品2'),
            ),
            ElevatedButton(
              onPressed: () => _buyProduct('399319650032156741', orderNo: '437209513930522693'),
              child: Text('购买产品3'),
            ),
          ],
        ),
      ),
    );
  }

  void _buyProduct(String productId, {String orderNo = ''}) {
    _eyflutterPaysPlugin.buyProduct(productId: productId, orderNo: orderNo);
  }

  void _verifyPurchaseResult(Map<String, dynamic> arguments) async {
    print('开始校验支付结果');
    String receiptData = arguments['receipt-data'];
    String receiptJson = jsonEncode({'receipt-data': receiptData});
    String orderNo = arguments['orderNo'];
    String transactionId = arguments['transactionId'];
    String productId = arguments['productId'];
    String userId = '用户ID'; // 替换为实际用户ID
    String sign = md5.convert(utf8.encode('$receiptJson$orderNo$transactionId$productId$userId')).toString();

    Map<String, dynamic> params = {
      'receipt': receiptJson,
      'orderNo': orderNo,
      'transactionId': transactionId,
      'productId': productId,
      'sign': sign,
    };

    try {
      final response = await http.post(Uri.parse('https://your-server-url/verify'), body: params);
      print('服务端响应: ${response.body}');
      if (response.statusCode == 200) {
        print('支付成功');
      } else {
        print('支付失败');
      }
    } catch (e) {
      print('校验失败: $e');
    } finally {
      _eyflutterPaysPlugin.deleteByPaymentVoucher(arguments);
    }
  }
}

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

1 回复

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


eyflutter_pays 是一个用于在 Flutter 应用中集成支付功能的插件。它支持多种支付方式,如支付宝、微信支付等。以下是如何使用 eyflutter_pays 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 eyflutter_pays 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  eyflutter_pays: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 配置支付平台

根据你使用的支付平台(如支付宝、微信支付等),你可能需要在项目中配置相应的平台设置。

Android 配置

android/app/build.gradle 文件中,确保你已添加必要的依赖和配置。

iOS 配置

ios/Runner/Info.plist 文件中,添加必要的权限和配置。

3. 初始化支付插件

在你的 Dart 代码中,首先需要初始化支付插件:

import 'package:eyflutter_pays/eyflutter_pays.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EyflutterPays.init();  // 初始化支付插件
  runApp(MyApp());
}

4. 调用支付功能

使用 EyflutterPays 类中的方法来调用支付功能。以下是一个简单的示例,展示如何使用支付宝支付:

import 'package:flutter/material.dart';
import 'package:eyflutter_pays/eyflutter_pays.dart';

class PaymentPage extends StatelessWidget {
  Future<void> _payWithAlipay() async {
    try {
      // 替换为你的支付订单信息
      String orderInfo = "your_order_info_here";
      
      // 调用支付宝支付
      String result = await EyflutterPays.alipay(orderInfo);
      
      // 处理支付结果
      if (result == "success") {
        print("支付成功");
      } else {
        print("支付失败: $result");
      }
    } catch (e) {
      print("支付异常: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('支付页面'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _payWithAlipay,
          child: Text('支付宝支付'),
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!