Flutter插件flutter_eghl的使用方法

Flutter插件flutter_eghl的使用方法

Flutter eGHL SDK

A eGHL packages for Flutter project.

⚠️ 注意事项

eGHL Flutter SDK 目前仅实现了 ECR 功能!

Flutter插件flutter_eghl特性 ✨

  • Ecr Sale
  • Ecr Void
  • Ecr Refund
  • Ecr Settlement
  • Ecr Last Settlement

Flutter

在您的代码中导入该包:

import 'package:flutter_eghl/flutter_eghl_sdk.dart';

Android

在 Android 中,请在 AndroidManifest.xml 文件中添加以下权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.your.app">
   <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

iOS

  1. 平台版本必须至少为 11.0
  2. 修改 ios/Podfile 文件并相应更新。
platform :ios, '11.0'

如果行首有 # 号,请移除。

MacOS

  1. 平台版本必须至少为 10.15
  2. 修改 macos/Podfile 文件并相应更新。
platform :osx, '10.15'

如果行首有 # 号,请移除。

  1. 设置 macOS 的最低部署目标为 10.15

  2. 使用 XCode 打开 macos/Runner.xcworkspace

  3. 按照 iOS 指令修改 Info.plist

  4. macos/Runner/DebugProfile.entitlementsmacos/Runner/Release.entitlements 中添加以下内容:

<key>com.apple.security.network.client</key>
<true/>

简单使用

// 您的 eGHL 公钥路径(PEM 格式)
final String _publicKeyPath = "";

// 您的 eGHL 私钥路径(PEM 格式)
final String _privateKeyPath = "";

// 您的 eGHL URL
final String _url = "";

// eGHL 商户ID
final String _merchantID = "";

// eGHL 终端ID
final String _terminalID = "";

void main() {
  EghlSdk.init(
    publicKeyPath: _publicKeyPath,
    privateKeyPath: _privateKeyPath,
    url: _url,
    merchantID: _merchantID,
    terminalID: _terminalID,
  );
}

// 获取 eGHL 实例
final sdk = EghlSdk.instance;

// 检查 eGHL 网络是否正常工作
await sdk.networkCheck();

ercSale

通知 eGHL 终端进行销售操作:

// 通知 eGHL 终端销售
sdk.ecrSale(amount: 4.5, operatorID: "LISHII");

ecrSale 字段说明:

名称 类型 描述
amount String 交易金额(必填)
operatorID String 操作员ID(可选)
customField String 自定义字段(可选)

ercVoid

撤销交易:

// 撤销交易
sdk.ecrVoid(amount: 4.5);

ecrVoid 字段说明:

名称 类型 描述
amount String 交易金额(必填)
operatorID String 操作员ID(可选)
orgTxnRef String 交易引用码(可选)
txnTraceID String 唯一标识每个交易请求的ID(可选)
customField String 自定义字段(可选)

ercRefund

退款交易:

// 退款交易
sdk.ecrRefund(amount: 4.5, operatorID: "LSHII");

ecrRefund 字段说明:

名称 类型 描述
amount String 交易金额(必填)
operatorID String 操作员ID(可选)
orgTxnRef String 交易引用码(可选)
txnTraceID String 唯一标识每个交易请求的ID(可选)
productCode String 提供商提供的产品代码(可选)
customField String 自定义字段(可选)

ecrSettlement

通知 eGHL 终端显示结算信息:

// 通知 eGHL 终端显示结算
sdk.ecrSettlement();

ecrLastSettlement

通知 eGHL 终端显示上次结算信息:

// 通知 eGHL 终端显示上次结算
sdk.ecrLastSettlement();

eGHL 响应代码

响应码 响应消息
0 成功
XT 超时
01-99 来自 MAH 主机的错误
B0 银行端交易超时
C0 扩展设备端交易超时
C1 不支持的卡
C2 金额超过最大限制
C3 未找到交易(例如:无效发票号)
C4 EMV 相关错误(例如:卡片被拒绝)
C5 交易已被撤销
C6 扩展设备内存满
C7 交易已取消
C8 无效的卡输入方式
C9 必须先执行结算才能继续
CA 通信错误
CB 批次为空
CC 结算失败
D1 CRC 失败(例如:确保设备日期时间正确,输入请求消息正确)

…(其他响应码省略)

常见问题 ❔

我已经设置了所有正确的设置,但仍然收到超时响应

请确保您的终端已成功连接。

致谢

感谢 Dart-Basic-Utils 提供加密工具。


示例代码

import 'package:flutter/material.dart';
import 'package:flutter_eghl/flutter_eghl_sdk.dart';
import 'package:flutter_eghl_example/app.dart';

const String _publicKeyPath = ""; // 您的 eGHL 公钥路径
const String _privateKeyPath = ""; // 您的 eGHL 私钥路径
const String _url = ""; // 您的 eGHL URL
const String _merchantID = ""; // eGHL 商户ID
const String _terminalID = ""; // eGHL 终端ID

void main() {
  EghlSdk.init(
    publicKeyPath: _publicKeyPath,
    privateKeyPath: _privateKeyPath,
    url: _url,
    merchantID: _merchantID,
    terminalID: _terminalID,
  );
  runApp(const EghlExampleApp());
}

更多关于Flutter插件flutter_eghl的使用方法的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用flutter_eghl插件的示例代码案例。假设flutter_eghl是一个用于集成某种特定功能(例如电子网关或支付功能)的Flutter插件。请注意,由于flutter_eghl可能不是一个实际存在的插件(我未能在Flutter的官方或社区插件库中找到它),以下示例将基于一个假设的支付插件功能进行构建。

首先,确保你已经在pubspec.yaml文件中添加了flutter_eghl依赖项(假设它存在):

dependencies:
  flutter:
    sdk: flutter
  flutter_eghl: ^x.y.z  # 替换为实际版本号

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

接下来,在你的Flutter应用中,你可以按照以下方式使用flutter_eghl插件:

import 'package:flutter/material.dart';
import 'package:flutter_eghl/flutter_eghl.dart';  // 假设的包导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final FlutterEghl _flutterEghl = FlutterEghl();

  Future<void> initiatePayment() async {
    try {
      // 假设支付配置需要这些参数
      Map<String, String> paymentDetails = {
        'amount': '100.00',
        'currency': 'USD',
        'description': 'Test Payment',
        // 其他必要的支付参数
      };

      // 发起支付请求
      var result = await _flutterEghl.initiatePayment(paymentDetails);

      // 处理支付结果
      if (result['status'] == 'success') {
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('Payment Successful'),
              content: Text('Payment has been successfully processed.'),
              actions: <Widget>[
                FlatButton(
                  child: Text('OK'),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                ),
              ],
            );
          },
        );
      } else {
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('Payment Failed'),
              content: Text('Payment failed with error: ${result['error']}'),
              actions: <Widget>[
                FlatButton(
                  child: Text('OK'),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                ),
              ],
            );
          },
        );
      }
    } catch (e) {
      // 处理异常
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text('Error'),
            content: Text('An error occurred: $e'),
            actions: <Widget>[
              FlatButton(
                child: Text('OK'),
                onPressed: () {
                  Navigator.of(context).pop();
                },
              ),
            ],
          );
        },
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter EGHL Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: initiatePayment,
          child: Text('Initiate Payment'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮用于发起支付请求。当用户点击按钮时,initiatePayment函数会被调用,该函数使用flutter_eghl插件的initiatePayment方法来发送支付请求,并处理支付结果。

请注意,由于flutter_eghl可能不是一个实际存在的插件,因此上述代码中的方法调用和参数可能需要根据实际插件的API进行调整。如果你正在使用一个特定的插件,请查阅该插件的官方文档以获取正确的使用方法和参数。

回到顶部