Flutter支付集成插件easy_pay_develop的使用

Flutter支付集成插件easy_pay_develop的使用

本指南提供了在您的Flutter项目中配置所需Android依赖项和设置的逐步说明。

在flutter项目中实现:

dependencies:
  easy_pay_develop: ^0.0.2

Android端配置

步骤1:将SoftPos-v1.3.66.11-Debug_Test.aar添加到项目中

  1. 导航到您的Flutter项目的android文件夹。
  2. android文件夹内创建一个名为libs的新文件夹。
  3. SoftPos-v1.3.66.11-Debug_Test.aar文件粘贴到libs文件夹中。

步骤2:在AndroidManifest.xml文件中添加以下权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

步骤3:更新build.gradle文件

  1. 打开android/app/build.gradle文件。
  2. dependencies部分,添加以下代码:
implementation 'com.sdk:easypay:1.1.5'
implementation 'com.denovo:topliteapp:1.7.5.1'
compileOnly files('libs/SoftPos-v1.3.66.11-Debug_Test.aar')

步骤4:在MainActivity中扩展FlutterActivity

  1. 导航到android/app/src/main/kotlin/your/package/name/
  2. 创建或更新MainActivity.kt文件,使用以下代码:
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity : FlutterActivity() {

    private val CHANNEL = "easy_pay_develop"
    private var easyPayPlugin: EasyPayPlugin? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 初始化EasyPay插件
        easyPayPlugin = EasyPayPlugin()
        easyPayPlugin?.setActivity(this)
    }

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        GeneratedPluginRegistrant.registerWith(flutterEngine)
        easyPayPlugin?.let {
            flutterEngine.plugins.add(it)
        }

        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            when (call.method) {
                "startPayment" -> {
                    val secretKey = call.argument<String>("secretKey") ?: ""
                    val jsonRequest = call.argument<String>("jsonRequest") ?: ""
                    easyPayPlugin?.onMethodCall(call, result)
                }
                "registerDevice" -> {
                    val tpn = call.argument<String>("tpn") ?: ""
                    val merchantKey = call.argument<String>("merchantKey") ?: ""
                    easyPayPlugin?.onMethodCall(call, result)
                }
                else -> {
                    result.notImplemented()
                }
            }
        }
    }
}

步骤5:在settings.gradle文件的repositories部分添加以下代码

maven {
    url = uri("s3://denovo-android.s3.amazonaws.com")
    credentials(AwsCredentials) {
        accessKey = "accessKey"
        secretKey = "secretKey"
    }
}
maven {
    url = uri("gitUrl")
    credentials {
        username = "Username"
        password = "password"
    }
}

步骤6:在gradle.properties文件中添加以下代码

android.enableJetifier=true
android.disableAutomaticComponentCreation=true

步骤7:Android调用函数

要在Android侧调用函数,请使用以下代码:

Future<void> startTransaction() async {
  try {
    var status = await Permission.location.status;
    if (!status.isGranted) {
      status = await Permission.location.request();
      if (!status.isGranted) {
        showSnackbar('位置权限被拒绝。请允许权限。');
        return;
      }
    }

    final response = await _easyPay.registerDevice('tpnKey', 'merchantKey');
    print("交易成功: $response");

    Map<String, dynamic> decodedResponse = jsonDecode(response ?? '{}');
    String? sessionKey = decodedResponse['session_key'];

    if (sessionKey != null) {
      print('会话密钥: $sessionKey');
      var uuid = Uuid();
      // 更改参数值,除了类型
      Map<String, dynamic> paymentData = {
        'type': 'SALE', // 必须为SALE
        'amount': '1', // 更改金额值
        'isreceiptsneeded': false,
        'showapprovalscreen': false,
        'Customobject': {
          'customeremail': 'graghu@denovosystem.com',
          'PhoneNumber': '919840720372',
          'CreditType': '1',
          'NumberOfPayments': '1',
          'ExtraData': '[]',
          'HolderID': '1',
          'TransactionUniqueIdForQuery': uuid.v1()
        }
      };

      String jsonRequest = jsonEncode(paymentData);

      final paymentResponse = await _easyPay.startPayment(sessionKey, jsonRequest);
      print('付款已启动: $paymentResponse');

    } else {
      print('响应中未找到会话密钥。');
    }

  } catch (e) {
    showSnackbar('启动交易失败: $e');
  }
}

iOS端配置

步骤1:在info.plist文件中添加以下权限

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

<key>NSLocationWhenInUseUsageDescription</key>
<string>请提供原因,说明您的应用为何需要在使用时访问位置。</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>请提供原因,说明您的应用为何需要始终访问位置。</string>

步骤2:iOS示例代码

Future<void> makeRequest() async {
  try {
    final response = await _easyPay.requestWith('merchantKey');
    print("请求成功: $response");
  } catch (e) {
    showSnackbar('请求失败: $e');
  }
}

Future<void> performTransaction() async {
  try {
    final response = await _easyPay.transactionWith(100.0, 1); // 更改金额值
    print("交易成功: $response");
  } catch (e) {
    showSnackbar('交易失败: $e');
  }
}

// 首先调用makeRequest()函数。然后调用performTransaction()。

完整示例代码

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:easy_pay_develop/easy_pay_develop.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:uuid/uuid.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final EasyPay _easyPay = EasyPay();
  String? _sessionKey;

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

  Future<void> initPlatformState() async {
    try {
      final version = await _easyPay.getPlatformVersion() ?? '未知平台版本';
      setState(() {
        _platformVersion = version;
      });
    } catch (e) {
      print('获取平台版本失败: $e');
    }
  }

  void showSnackbar(String message) {
    final snackBar = SnackBar(content: Text(message));
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }

  Future<void> startTransaction() async {
    try {
      var status = await Permission.location.status;
      if (!status.isGranted) {
        status = await Permission.location.request();
        if (!status.isGranted) {
          showSnackbar('位置权限被拒绝。请允许权限。');
          return;
        }
      }

      final response = await _easyPay.registerDevice('128922769414', '139453877702');
      print("交易成功: $response");

      Map<String, dynamic> decodedResponse = jsonDecode(response ?? '{}');
      String? sessionKey = decodedResponse['session_key'];

      if (sessionKey != null) {
        print('会话密钥: $sessionKey');
        var uuid = Uuid();

        Map<String, dynamic> paymentData = {
          'type': 'SALE',
          'amount': '1',
          'isreceiptsneeded': false,
          'showapprovalscreen': false,
          'Customobject': {
            'customeremail': 'graghu@denovosystem.com',
            'PhoneNumber': '919840720372',
            'CreditType': '1',
            'NumberOfPayments': '1',
            'ExtraData': '[]',
            'HolderID': '1',
            'TransactionUniqueIdForQuery': uuid.v1()
          }
        };

        String jsonRequest = jsonEncode(paymentData);

        final paymentResponse = await _easyPay.startPayment('5', sessionKey, jsonRequest);
        print('付款已启动: $paymentResponse');

      } else {
        print('响应中未找到会话密钥。');
      }

    } catch (e) {
      showSnackbar('启动交易失败: $e');
    }
  }

  Future<void> makeRequest() async {
    try {
      final response = await _easyPay.requestWith('128922769414');
      print("请求成功: $response");
    } catch (e) {
      showSnackbar('请求失败: $e');
    }
  }

  Future<void> performTransaction() async {
    try {
      final response = await _easyPay.transactionWith(100.0, 1); // 示例值
      print("交易成功: $response");
    } catch (e) {
      showSnackbar('交易失败: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('运行于: $_platformVersion\n'),
              ElevatedButton(
                onPressed: () => startTransaction(),
                child: const Text('开始交易'),
              ),
              ElevatedButton(
                onPressed: () => makeRequest(),
                child: const Text('发起请求'),
              ),
              ElevatedButton(
                onPressed: () => performTransaction(),
                child: const Text('执行交易'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


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

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  easy_pay_develop: ^latest_version

然后运行 flutter pub get 以获取依赖。

2. 配置支付平台

根据你使用的支付平台(如支付宝、微信支付),你需要在相应的平台进行配置。

2.1 支付宝配置

AndroidManifest.xml 中添加以下内容:

<activity
    android:name="com.alipay.sdk.app.H5PayActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="false"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />

2.2 微信支付配置

AndroidManifest.xml 中添加以下内容:

<activity
    android:name="com.tencent.mm.opensdk.openapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

3. 初始化支付插件

在应用启动时初始化支付插件。通常可以在 main.dart 文件中进行初始化:

import 'package:easy_pay_develop/easy_pay_develop.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyPayDevelop.init();
  runApp(MyApp());
}

4. 发起支付

在需要发起支付的地方,调用支付方法。以下是一个示例:

import 'package:easy_pay_develop/easy_pay_develop.dart';

void payWithAlipay() async {
  try {
    String orderInfo = "your_order_info"; // 从服务器获取的订单信息
    Map<String, dynamic> result = await EasyPayDevelop.alipay(orderInfo);
    if (result['resultStatus'] == '9000') {
      // 支付成功
      print('支付成功');
    } else {
      // 支付失败
      print('支付失败: ${result['resultStatus']}');
    }
  } catch (e) {
    print('支付异常: $e');
  }
}

void payWithWeChat() async {
  try {
    Map<String, dynamic> params = {
      "appid": "your_appid",
      "partnerid": "your_partnerid",
      "prepayid": "your_prepayid",
      "package": "Sign=WXPay",
      "noncestr": "your_noncestr",
      "timestamp": "your_timestamp",
      "sign": "your_sign"
    };
    Map<String, dynamic> result = await EasyPayDevelop.weChatPay(params);
    if (result['errCode'] == 0) {
      // 支付成功
      print('支付成功');
    } else {
      // 支付失败
      print('支付失败: ${result['errCode']}');
    }
  } catch (e) {
    print('支付异常: $e');
  }
}
回到顶部