Flutter支付集成插件payhere_flutter的使用

Flutter支付集成插件payhere_flutter的使用

Payhere插件简介

Payhere是一款为Flutter开发者提供的支付网关插件。它模仿了原生Payhere Android SDK的功能,使支付流程与原生SDK保持一致。

以下是插件的一些截图:





安装插件

在您的项目pubspec.yaml文件中添加以下依赖项:

dependencies:
  payhere_flutter: ^0.1.1

运行flutter pub get以安装插件。


使用插件进行支付

导入插件包

首先需要导入payhere_flutter包:

import 'package:payhere_flutter/payhere_flutter.dart';

创建支付请求对象

创建一个InitRequest对象,并设置必要的参数:

InitRequest req = new InitRequest();

// 必填参数
req.setMerchantId("1210XXX"); // 您的商户PayHere ID
req.setMerchantSecret("ugknesnvn"); // 您的商户密钥(在Settings > Domains & Credentials中获取)
req.setCurrency("LKR"); // 货币代码,例如LKR/USD/GBP/EUR/AUD
req.setAmount(1000.00); // 最终支付金额
req.setOrderId("230000123"); // 唯一订单ID
req.setItemsDescription("门铃无线"); // 商品描述
req.setCustom1("这是自定义消息1");
req.setCustom2("这是自定义消息2");

// 设置客户信息
req.getCustomer().setFirstName("张");
req.getCustomer().setLastName("三");
req.getCustomer().setEmail("zhangsan@example.com");
req.getCustomer().setPhone("+8613800138000");
req.getCustomer().getAddress().setAddress("北京市朝阳区");
req.getCustomer().getAddress().setCity("北京");
req.getCustomer().getAddress().setCountry("中国");

// 可选参数:设置配送地址
req.getCustomer().getDeliveryAddress().setAddress("上海市浦东新区");
req.getCustomer().getDeliveryAddress().setCity("上海");
req.getCustomer().getDeliveryAddress().setCountry("中国");

// 添加商品
req.getItems().add(new Item(null, "门铃无线", 1, 1000.0));

发起支付请求

调用oneTimePaymentSandboxoneTimePaymentLive方法来发起支付请求。示例如下:

RaisedButton(
  onPressed: () async {
    // 测试环境
    PhResponse response =
        await PayhereFlutter.oneTimePaymentSandbox(request: req);
    
    // 生产环境
    // PhResponse response =
    //     await PayhereFlutter.oneTimePaymentLive(request: req);

    print("支付状态: ${response.status}");
    print("支付信息: ${response.data?.toJson()}");
  },
  child: Text("发起一次支付"),
),

返回结果解析

PhResponse对象包含以下字段:

  • status: 支付状态。
  • data: 包含交易详细信息。
  • message: 交易简要说明。

示例返回值:

{
  "status": 1,
  "data": {
    "status": 2,
    "paymentNo": 123456789,
    "currency": "LKR",
    "price": 1000.0,
    "sign": "abcdef123456",
    "message": "支付成功"
  },
  "message": "支付成功"
}

支付状态代码:

状态 代码
STATUS_SUCCESS 1
ERROR_UNKNOWN -1
ERROR_DATA -2
ERROR_VALIDATION -3
ERROR_NETWORK -4
ERROR_PAYMENT -5

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中集成Payhere插件:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:payhere_flutter/payhere_flutter.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PaymentPage(),
    );
  }
}

class PaymentPage extends StatefulWidget {
  @override
  _PaymentPageState createState() => _PaymentPageState();
}

class _PaymentPageState extends State<PaymentPage> {
  InitRequest req = InitRequest();
  String responseText = "";

  @override
  void initState() {
    super.initState();
    initRequest();
  }

  void initRequest() {
    req.setMerchantId("YOUR_MERCHANT_ID");
    req.setMerchantSecret("YOUR_MERCHANT_SECRET");
    req.setCurrency("LKR");
    req.setAmount(1000.00);
    req.setOrderId("ORDER12345");
    req.setItemsDescription("门铃无线");
    req.setCustom1("自定义消息1");
    req.setCustom2("自定义消息2");

    req.getCustomer().setFirstName("张");
    req.getCustomer().setLastName("三");
    req.getCustomer().setEmail("zhangsan@example.com");
    req.getCustomer().setPhone("+8613800138000");
    req.getCustomer().getAddress().setAddress("北京市朝阳区");
    req.getCustomer().getAddress().setCity("北京");
    req.getCustomer().getAddress().setCountry("中国");

    req.getCustomer().getDeliveryAddress().setAddress("上海市浦东新区");
    req.getCustomer().getDeliveryAddress().setCity("上海");
    req.getCustomer().getDeliveryAddress().setCountry("中国");

    req.getItems().add(new Item(null, "门铃无线", 1, 1000.0));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Payhere支付示例"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                PhResponse response =
                    await PayhereFlutter.oneTimePaymentSandbox(request: req);

                setState(() {
                  responseText = "支付状态: ${response.status}\n支付信息: ${response.data?.toJson()}";
                });
              },
              child: Text("发起支付"),
            ),
            SizedBox(height: 20),
            Text(responseText),
          ],
        ),
      ),
    );
  }
}

配置代码缩减

如果您启用了R8代码缩减器,请确保配置proguard-rules.pro文件以保留Payhere相关的类:

buildTypes {
  release {
    minifyEnabled true
    useProguard true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    signingConfig signingConfigs.debug
  }
}

proguard-rules.pro中添加以下规则:

-keep class lk.payhere.** { *; }

或者禁用代码缩减:

flutter build --no-shrink

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

1 回复

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


payhere_flutter 是一个用于在 Flutter 应用中集成 PayHere 支付网关的插件。PayHere 是斯里兰卡的一家流行支付网关,支持多种支付方式,包括信用卡、借记卡和移动支付。

以下是如何在 Flutter 项目中使用 payhere_flutter 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 payhere_flutter 依赖:

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

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

2. 配置 Android 和 iOS

Android

android/app/build.gradle 文件中,确保 minSdkVersion 至少为 21:

android {
    defaultConfig {
        minSdkVersion 21
        ...
    }
    ...
}

iOS

ios/Podfile 文件中,确保 platform 设置为 ios 11.0 或更高版本:

platform :ios, '11.0'

然后运行 pod install 来更新 iOS 依赖。

3. 初始化 PayHere

在你的 Flutter 应用中初始化 PayHere 插件。通常,你可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await PayHereFlutter.init(
    sandbox: true, // 使用沙盒环境进行测试
  );
  runApp(MyApp());
}

4. 创建支付请求

你可以使用 PayHerePaymentRequest 类来创建支付请求。以下是一个简单的示例:

import 'package:payhere_flutter/payhere_flutter.dart';

Future<void> makePayment() async {
  final request = PayHerePaymentRequest(
    amount: 100.0, // 支付金额
    currency: 'LKR', // 货币代码
    orderId: 'ORDER123456', // 订单ID
    itemsDescription: 'Test Payment', // 商品描述
    customer: PayHereCustomer(
      firstName: 'John',
      lastName: 'Doe',
      email: 'john.doe@example.com',
      phone: '+94771234567',
    ),
    notifyUrl: 'https://example.com/notify', // 通知URL
    returnUrl: 'https://example.com/return', // 返回URL
  );

  try {
    final response = await PayHereFlutter.startPayment(request);
    if (response.status == PayHerePaymentStatus.success) {
      print('Payment successful: ${response.paymentId}');
    } else {
      print('Payment failed: ${response.message}');
    }
  } catch (e) {
    print('Error: $e');
  }
}

5. 处理支付结果

PayHereFlutter.startPayment 方法会返回一个 PayHerePaymentResponse 对象,你可以根据 status 属性来判断支付是否成功。

6. 运行应用

现在,你可以运行你的 Flutter 应用并测试支付功能。确保在沙盒环境中使用测试卡号和其他支付信息。

7. 生产环境

当你准备将应用部署到生产环境时,请将 sandbox 参数设置为 false

await PayHereFlutter.init(
  sandbox: false,
);
回到顶部