Flutter支付集成插件payable_ipg_flutter的使用

Flutter支付集成插件payable_ipg_flutter的使用

初始化

1. 修改 minSdkVersion

在您的应用级别的 build.gradle 文件中,将 minSdkVersion 修改为 21。

android {
    defaultConfig {
        minSdkVersion 21
    }
}

2. 添加插件到 pubspec.yaml 文件

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

payable_ipg_flutter: ^2.0.4

实现

1. 导入PAYable IPG SDK包

import 'package:payable_ipg_flutter/payable_ipg_flutter.dart';

2. 创建PAYable IPG客户端

PAYableIPGClient ipgClient = PAYableIPGClient(
    merchantKey: "YOUR_MERCHANT_KEY",
    merchantToken: "YOUR_MERCHANT_TOKEN",
    returnUrl: "YOUR_RETURN_URL_TO_REDIRECT",
    logoUrl: "YOUR_COMPANY_LOGO",
    environment: IPGEnvironment.sandbox, // 只用于测试
);

3. 调用 PAYableIPG 在应用中

一次性付款

PAYableIPG(
    ipgClient: ipgClient,
    amount: 100.45,
    currencyCode: "LKR",
    paymentType: 1, // 值为1表示一次性付款
    orderDescription: "Netflix",
    customerFirstName: "John",
    customerLastName: "Doe",
    customerEmail: "johndoe@gmail.com",
    customerMobilePhone: "0777123456",
    billingAddressStreet: "Hill Street",
    billingAddressCity: "Dehiwala",
    billingAddressCountry: "LK",
    billingAddressPostcodeZip: "10350"
)

定期付款

PAYableIPG(
    ipgClient: ipgClient,
    amount: 350.00, // 设置此次付款所需的金额
    currencyCode: "LKR",
    paymentType: 2, // 值为2表示定期付款
    orderDescription: "Play Pass",
    customerFirstName: "John",
    customerLastName: "Doe",
    customerEmail: "johndoe@gmail.com",
    customerMobilePhone: "0777123456",
    billingAddressStreet: "Hill Street",
    billingAddressCity: "Dehiwala",
    billingAddressCountry: "LK", // ISO国家代码(LK, US等)
    billingAddressPostcodeZip: "10350"
    startDate: '2024-05-27',
    endDate: '2024-11-27',
    recurringAmount: 350.00, // 设置定期付款所需的金额
    interval: 'MONTHLY', // 设置付款频率。值可以是MONTHLY, QUARTERLY或ANNUALLY。
    isRetry: '1', // 设置是否允许自动重试付款失败的情况。(1 - 允许,0 - 不允许)
    retryAttempts: '3', // 设置自动重试的天数。(最大为5)
    doFirstPayment: '1', // 设置用户是否在此次付款时进行此订阅的首次付款。
)

可选参数

custom1 // 商户特定数据
custom2 // 商户特定数据
billingPhone
billingCompanyName
billingStreetAddress2
billingProvince
shippingFirstName
shippingLastName
shippingMobile
shippingPhone
shippingEmail
shippingCompanyName
shippingStreetAddress1
shippingStreetAddress2
shippingTownCity
shippingProvince
shippingCountry
shippingPostcode

示例代码

以下是完整的示例代码,展示如何在应用中集成支付功能。

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

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

class _PaymentPageState extends State<PaymentPage> {
  PAYableIPGClient? _myIpgClient;
  PAYableIPG? _payableIPG;
  List<String>? _errorMessages;
  bool _loadIPG = true;

  @override
  Widget build(BuildContext context) {
    _loadData();

    Widget children;
    if (_payableIPG != null && _loadIPG) {
      children = _payableIPG as Widget;
    } else if (_errorMessages != null) {
      children = Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          ...?_errorMessages?.map((errorMessage) =>
              Padding(
                padding: const EdgeInsets.all(8),
                child: Text(
                  errorMessage,
                  style: const TextStyle(color: Colors.red),
                ),
              )),
        ],
      );
    } else {
      children = Container();
    }
    return Scaffold(
      appBar: AppBar(
        title: const Text('Checkout'),
      ),
      body: Stack(
        children: [
          children
        ],
      ),
    );
  }

  Future<void> _loadData() async {
    setState(() {
      _myIpgClient = PAYableIPGClient(
        logoUrl: "https://i.imgur.com/l21F5us.png",
        returnUrl: "https://example.com/receipt",
        merchantKey: "A748BFC24F8F6C61",
        merchantToken: "09FD8632EED1D1FEB9AD9A5E55427452",
        webhookUrl: "https://ipgv2-ntb.payable.lk/new-js-sdk/api/"
      );

      _payableIPG = PAYableIPG(
        ipgClient: _myIpgClient!,
        amount: "100.00",
        currencyCode: "LKR",
        paymentType: "1",
        orderDescription: "Order description goes here",
        invoiceId: _generateInvoiceId(),
        customerFirstName: "John",
        customerLastName: "Doe",
        customerMobilePhone: "0777123456",
        customerEmail: "johndoe@gmail.com",
        billingAddressStreet: "Hill Street",
        billingAddressCity: "Colombo",
        billingAddressCountry: "LK",
        billingAddressPostcodeZip: "70000",

        onPaymentStarted: (data) {
          print('Payment started');
        },
        onPaymentCompleted: (data) {
          print('Payment completed');
          Navigator.popUntil(context, (route) => route.isFirst);
        },
        onPaymentError: (data) {
          print('Payment error');
          if (data.status == 3009) {
            final errorMap = data.error;
            final errorMessages = errorMap.values.expand((list) => list).toList();
            setState(() {
              _loadIPG = false;
              _errorMessages = errorMessages.cast<String>();
            });
          }
        },
        onPaymentCancelled: () {
          print('Payment cancelled');
          Navigator.pop(context);
        }
      );
    });
  }

  String _generateInvoiceId() {
    // 生成唯一发票ID
    return DateTime.now().millisecondsSinceEpoch.toString();
  }
}

高级用法

您可以使用 uidresultIndicator 来检查交易状态。

var data = await ipgClient.getStatus("uid", "resultIndicator");

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

1 回复

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


payable_ipg_flutter 是一个用于在 Flutter 应用中集成支付功能的插件。它通常用于处理在线支付,例如信用卡支付、移动支付等。以下是如何在 Flutter 项目中使用 payable_ipg_flutter 插件的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 payable_ipg_flutter 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  payable_ipg_flutter: ^1.0.0  # 请根据实际情况替换为最新版本

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

2. 配置支付参数

在使用 payable_ipg_flutter 之前,你需要配置支付网关的参数,例如商户 ID、API 密钥、支付金额等。

import 'package:payable_ipg_flutter/payable_ipg_flutter.dart';

void configurePayment() {
  PayableIpgFlutter.configure(
    merchantId: 'your_merchant_id',
    apiKey: 'your_api_key',
    amount: 100.0, // 支付金额
    currency: 'USD', // 货币类型
    orderId: 'order_123', // 订单 ID
    customerEmail: 'customer@example.com', // 客户邮箱
    customerPhone: '1234567890', // 客户电话
    description: 'Payment for Order 123', // 支付描述
  );
}

3. 发起支付

配置好支付参数后,你可以调用 PayableIpgFlutter.initiatePayment 方法来发起支付。

void initiatePayment() async {
  try {
    final paymentResult = await PayableIpgFlutter.initiatePayment();
    if (paymentResult['status'] == 'success') {
      print('Payment successful: ${paymentResult['transactionId']}');
    } else {
      print('Payment failed: ${paymentResult['message']}');
    }
  } catch (e) {
    print('Error occurred: $e');
  }
}

4. 处理支付结果

支付完成后,你需要处理支付结果。通常,支付结果会包含交易状态、交易 ID 等信息。你可以根据这些信息来更新订单状态或通知用户。

void handlePaymentResult(Map<String, dynamic> paymentResult) {
  if (paymentResult['status'] == 'success') {
    // 支付成功,更新订单状态
    print('Payment successful: ${paymentResult['transactionId']}');
  } else {
    // 支付失败,显示错误信息
    print('Payment failed: ${paymentResult['message']}');
  }
}

5. 示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 payable_ipg_flutter 插件。

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

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

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

class PaymentScreen extends StatelessWidget {
  void configurePayment() {
    PayableIpgFlutter.configure(
      merchantId: 'your_merchant_id',
      apiKey: 'your_api_key',
      amount: 100.0,
      currency: 'USD',
      orderId: 'order_123',
      customerEmail: 'customer@example.com',
      customerPhone: '1234567890',
      description: 'Payment for Order 123',
    );
  }

  void initiatePayment() async {
    try {
      final paymentResult = await PayableIpgFlutter.initiatePayment();
      if (paymentResult['status'] == 'success') {
        print('Payment successful: ${paymentResult['transactionId']}');
      } else {
        print('Payment failed: ${paymentResult['message']}');
      }
    } catch (e) {
      print('Error occurred: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Payment Integration'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            configurePayment();
            initiatePayment();
          },
          child: Text('Pay Now'),
        ),
      ),
    );
  }
}
回到顶部