Flutter支付集成插件weipl_checkout_flutter的使用

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

Flutter支付集成插件weipl_checkout_flutter的使用

weipl_checkout_flutter 是一个用于集成 Worldline ePayments India Checkout 的官方 Flutter 插件。本文将详细介绍如何在 Flutter 应用中集成并使用该插件。

安装

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

dependencies:
  weipl_checkout_flutter: ^1.1.0

注意:

  • 对于 Android,确保应用的最低 API 级别为 21 或更高。
  • 对于 iOS,确保应用的最低部署目标为 iOS 12.0 或更高。

然后运行以下命令获取依赖包:

flutter packages get

使用

导入包

在需要使用的 Dart 文件中导入插件:

import 'package:weipl_checkout_flutter/weipl_checkout_flutter.dart';

创建插件实例

创建 WeiplCheckoutFlutter 实例:

WeiplCheckoutFlutter wlCheckoutFlutter = WeiplCheckoutFlutter();

绑定事件监听器

插件使用基于事件的通信机制,并在支付成功或失败时发出事件。你可以通过 on(String event, Function handler) 方法绑定事件监听器:

wlCheckoutFlutter.on(WeiplCheckoutFlutter.wlResponse, handleResponse);

定义处理函数:

void handleResponse(Map<dynamic, dynamic> response) {
  // 处理支付响应
}

设置选项

配置支付所需的参数:

var options = {
  "features": {
    "enableAbortResponse": true,
    "enableExpressPay": true,
    "enableInstrumentDeRegistration": true,
    "enableMerTxnDetails": true,
  },
  "consumerData": {
    "deviceId": Platform.isAndroid ? "ANDROIDSH2" : "iOSSH2", // 根据平台选择设备ID
    "token": "a7356fb644fa98999a45d62361c80a574ff24f96b59669381593edbb97ef4feb0ea427d19e79b8d4ef5d82d38bb0eae890615b5054c702695deef11ec771b751",
    "paymentMode": "all",
    "merchantLogoUrl": "https://www.paynimo.com/CompanyDocs/company-logo-vertical.png",
    "merchantId": "L3348",
    "currency": "INR",
    "consumerId": "c964634",
    "consumerMobileNo": "9876543210",
    "consumerEmailId": "test@test.com",
    "txnId": "1684835158539",
    "items": [
      {"itemId": "first", "amount": "10", "comAmt": "0"}
    ],
    "customStyle": {
      "PRIMARY_COLOR_CODE": "#45beaa",
      "SECONDARY_COLOR_CODE": "#FFFFFF",
      "BUTTON_COLOR_CODE_1": "#2d8c8c",
      "BUTTON_COLOR_CODE_2": "#FFFFFF"
    }
  }
};

打开支付界面

调用 open 方法打开支付界面:

wlCheckoutFlutter.open(options);

响应处理

根据文档中的详细说明处理响应数据,并确保在服务器端执行 HASH 匹配逻辑。

示例 Demo

以下是一个完整的示例 Demo:

import 'package:flutter/material.dart';
import 'package:weipl_checkout_flutter/weipl_checkout_flutter.dart';
import 'dart:io' show Platform;

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  WeiplCheckoutFlutter wlCheckoutFlutter = WeiplCheckoutFlutter();

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
                onPressed: () {
                  String deviceID = "";

                  if (Platform.isAndroid) {
                    deviceID = "ANDROIDSH2";
                  } else if (Platform.isIOS) {
                    deviceID = "iOSSH2";
                  }

                  var reqJson = {
                    "features": {
                      "enableAbortResponse": true,
                      "enableExpressPay": true,
                      "enableInstrumentDeRegistration": true,
                      "enableMerTxnDetails": true
                    },
                    "consumerData": {
                      "deviceId": deviceID,
                      "token": "your_token_here",
                      "paymentMode": "all",
                      "merchantLogoUrl": "https://www.paynimo.com/CompanyDocs/company-logo-vertical.png",
                      "merchantId": "your_merchant_id",
                      "currency": "INR",
                      "consumerId": "your_consumer_id",
                      "consumerMobileNo": "your_mobile_number",
                      "consumerEmailId": "your_email@example.com",
                      "txnId": "unique_transaction_id",
                      "items": [
                        {"itemId": "first", "amount": "10", "comAmt": "0"}
                      ],
                      "customStyle": {
                        "PRIMARY_COLOR_CODE": "#45beaa",
                        "SECONDARY_COLOR_CODE": "#FFFFFF",
                        "BUTTON_COLOR_CODE_1": "#2d8c8c",
                        "BUTTON_COLOR_CODE_2": "#FFFFFF"
                      }
                    }
                  };

                  wlCheckoutFlutter.on(WeiplCheckoutFlutter.wlResponse, handleResponse);
                  wlCheckoutFlutter.open(reqJson);
                },
                child: const Text("Proceed")),
          ],
        ),
      ),
    );
  }

  void handleResponse(Map<dynamic, dynamic> response) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text("Payment Response"),
          content: Text(response.toString()),
          actions: [
            TextButton(
              child: const Text("OK"),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }
}

以上代码展示了如何在 Flutter 应用中集成 weipl_checkout_flutter 插件,并实现支付功能。请根据实际情况调整参数和配置。


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

1 回复

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


当然,以下是如何在Flutter应用中集成并使用weipl_checkout_flutter插件的一个示例代码案例。这个插件通常用于处理支付功能,假设你已经完成了基本的Flutter开发环境搭建和插件安装。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  weipl_checkout_flutter: ^最新版本号  # 请替换为实际的最新版本号

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

步骤 2: 配置Android和iOS支付环境

由于支付通常涉及到敏感信息和平台特定的配置,确保你已经按照weipl_checkout_flutter的官方文档配置了Android和iOS项目。这可能包括添加必要的权限、配置支付网关等。

步骤 3: 使用插件进行支付

以下是一个简单的Flutter应用示例,展示了如何使用weipl_checkout_flutter插件发起支付请求:

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

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

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

class PaymentScreen extends StatefulWidget {
  @override
  _PaymentScreenState createState() => _PaymentScreenState();
}

class _PaymentScreenState extends State<PaymentScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Payment Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            try {
              // 配置支付参数,这里需要根据实际支付平台的要求来填写
              final paymentParams = WeiplCheckoutParams(
                appId: 'your_app_id', // 替换为你的应用ID
                orderId: 'order_${DateTime.now().millisecondsSinceEpoch}', // 订单ID,需要唯一
                amount: '100', // 支付金额
                currency: 'CNY', // 货币类型
                description: 'Test Order', // 订单描述
                // 其他必要的参数,如回调URL等,根据支付平台要求添加
              );

              // 发起支付请求
              final result = await WeiplCheckoutFlutter.startCheckout(context, paymentParams);

              // 处理支付结果
              if (result.success) {
                showDialog(
                  context: context,
                  builder: (context) => AlertDialog(
                    title: Text('Payment Success'),
                    content: Text('Payment was successful!'),
                    actions: <Widget>[
                      TextButton(
                        onPressed: () => Navigator.of(context).pop(),
                        child: Text('OK'),
                      ),
                    ],
                  ),
                );
              } else {
                showDialog(
                  context: context,
                  builder: (context) => AlertDialog(
                    title: Text('Payment Failed'),
                    content: Text('Payment failed with error: ${result.errorMessage}'),
                    actions: <Widget>[
                      TextButton(
                        onPressed: () => Navigator.of(context).pop(),
                        child: Text('OK'),
                      ),
                    ],
                  ),
                );
              }
            } catch (e) {
              // 处理异常
              showDialog(
                context: context,
                builder: (context) => AlertDialog(
                  title: Text('Error'),
                  content: Text('An error occurred: $e'),
                  actions: <Widget>[
                    TextButton(
                      onPressed: () => Navigator.of(context).pop(),
                      child: Text('OK'),
                    ),
                  ],
                ),
              );
            }
          },
          child: Text('Pay Now'),
        ),
      ),
    );
  }
}

注意事项

  1. 支付参数:上面的WeiplCheckoutParams中的参数需要根据实际的支付平台要求进行调整。
  2. 错误处理:在实际应用中,错误处理应该更加细致,可能需要处理更多的异常情况。
  3. 安全性:确保你的支付参数和敏感信息在传输和存储过程中的安全性。
  4. 测试:在上线之前,务必进行充分的测试,包括模拟支付和真实支付测试。

希望这个示例代码能帮助你在Flutter应用中集成weipl_checkout_flutter插件。如果有任何进一步的问题,建议查阅官方文档或联系插件的维护者。

回到顶部