Flutter支付集成插件gq_payment_flutter_sdk的使用

Flutter支付集成插件gq_payment_flutter_sdk的使用

概述

该SDK在ERP中集成了一个支付流程,使用户能够无缝地选择多种支付选项,并且具有更快的集成和部署时间。

安装

将GQPaymentSDK添加到您的pubspec.yaml文件中:

dependencies:
  gq_payment_sdk: ^latest_version

导入它

现在可以在Dart代码中使用以下导入语句:

import 'package:gq_payment_flutter_sdk/gq_payment_flutter_sdk.dart';

使用

初始化

创建一个GQPaymentSDK实例:

final GQPaymentSDK gqPaymentSDK = GQPaymentSDK();

结账方法

结账方法允许您处理支付,并包含全面的回调处理:

// 客户端ID、客户端密钥和GQ API密钥用于访问支付,这些信息将由GrayQuest共享。
// GrayQuest提供了两种环境,一种是用于开发者测试支付流程和响应的阶段环境,另一种是推送至生产的生产环境。此环境可以在客户端对象中设置。

final Map<String, dynamic> configObject = {
   "auth": {
      "client_id": "<client_id>",
      "client_secret_key": "<client_secret_key>",
      "gq_api_key": "<gq_api_key>"
    },
    "env": "<env>",
    "student_id": "<student_id>",
    "customer_number": "<customer_number>",
    "pp_config": {"slug": "<slug>"},
    "customization": {
      "logo_url": "<logo_url>",
      "theme_color": "<theme_color>"
    },
    "fee_headers": {
      "fee_type_1": "<fee_type_1>",
      "fee_type_2": "<fee_type_2>",
      "fee_type_n": "<fee_type_n>",
    },
    "reference_id": "<reference_id>",
    "emi_plan_id": "<emi_plan_id>",
    "udf_details": {
    "key_type_one": "<value_type_one>", 
    "key_type_two": "<value_type_two>", 
    "key_type_three": "<value_type_three>" 
    }
  };

  Map<String, dynamic> studentDetails = {
  "student_first_name": "<student_first_name>",
  "student_last_name": "<student_last_name>",
  "student_type": "<student_type>",
};

Map<String, dynamic> customerDetails = {
  "customer_first_name": "<customer_first_name>",
  "customer_last_name": "<customer_last_name>",
  "customer_dob": "<customer_dob>",
  "customer_gender": "<customer_gender>",
  "customer_email": "<customer_email>",
  "customer_marital_status": "<customer_marital_status>",
};

Map<String, dynamic> kycDetails = {
  "pan_number": "<pan_number>",
};

Map<String, dynamic> employmentDetails = {
  "income_type": "<income_type>",
  "employer_name": "<employer_name>",
  "work_experience": "<work_experience>",
  "net_monthly_salary": "<net_monthly_salary>",
  "business_name": "<business_name>",
  "business_turnover": "<business_turnover>",
  "business_annual_income": "<business_annual_income>",
  "business_category": "<business_category>",
  "business_type": "<business_type>",
  "business_description": "<business_description>",
  "business_employee_count": "<business_employee_count>",
  "years_of_current_business": "<years_of_current_business>",
  "same_as_residence_address": "<same_as_residence_address>",
  "addr_line_1": "<addr_line_1>",
  "addr_line_2": "<addr_line_2>",
  "city": "<city>",
  "state": "<state>",
};

Map<String, dynamic> customization = {
  "fee_helper_text": "<fee_helper_text>",
  "logo_url": "<logo_url>",
  "theme_color": "<theme_color>",
};

Map<String, dynamic> notes = {
  "key": "<value>",
};

Map<String, dynamic> prefillData = {
  "student_details": studentDetails,
  "customer_details": customerDetails,
  "kyc_details": kycDetails,
  "employment_details": employmentDetails,
  "customization": customization,
  "notes": notes,
};

  handleCancel(value) {
    print("OnCancelled: $value ");
  }

  handleFailure(value) {
    print("OnFailure: $value ");
  }

  handleSuccess(value) {
    print("OnSuccess: $value ");
  }

final jsonData = jsonEncode(configObject);
final prefill = jsonEncode(prefillData);

gqPaymentSDK.checkout(
  context,
  onCancel: handleCancel,
  onFailed: handleFailure,
  onSuccess: handleSuccess,
  configData: jsonData,
  options: prefill
);

参数

参数名 类型 描述 必需
context BuildContext 当前应用程序上下文
onCancel Function 支付取消时的回调
onFailed Function 支付失败时的回调
onSuccess Function 支付成功时的回调
configData String 编码后的配置数据
options String 编码后的可选配置数据

错误处理

SDK提供了三个主要的回调方法来管理不同的支付场景:

  • onSuccess: 在支付成功完成时触发
  • onFailed: 在支付遇到错误时触发
  • onCancel: 在用户取消支付过程时触发

最佳实践

  1. 在启动结账之前验证输入
  2. 始终处理所有三种回调场景

故障排查

  • 确保所有必需的参数正确配置
  • 检查网络连接
  • 查看错误日志以获取特定失败原因

许可证

GQPaymentSDK 在 MIT 许可下可用。详情请参阅 LICENSE 文件。

支持

如需额外支持,请联系 GQPaymentSDK 支持团队,邮箱:support@grayquest.com


示例代码

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:gq_payment_flutter_sdk/gq_payment_flutter_sdk.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(home: PaymentScreen());
  }
}

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

  [@override](/user/override)
  State<PaymentScreen> createState() => _PaymentScreenState();
}

class _PaymentScreenState extends State<PaymentScreen> {
  final GQPaymentSDK gqPaymentSDK = GQPaymentSDK();

  handleSuccess(value) {
    debugPrint("Success data: $value ");
  }

  handleFailure(value) {
    debugPrint("Failed data: $value ");
  }

  handleCancel(value) {
    debugPrint("Cancel data: $value ");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text("GrayQuest Payment Example"),
        centerTitle: true,
      ),
      body: Center(
        child: ElevatedButton(
            onPressed: () {
              Map<String, dynamic> clientObject = {
                // REQUIRED FIELD
                "auth": {
                  "client_id": "<YOUR_CLIENT_ID>",
                  "client_secret_key": "<YOUR_SECRET_KEY>",
                  "gq_api_key": "<YOUR_GQ_API_KEY>"
                },
                "student_id": "<student_id>", // REQUIRED FIELD
                "env": "test", // REQUIRED FIELD
                "customer_number": "<customer_number>", // Optional field
                "pp_config": {"slug": "<slug>"}, // Optional field
                // Optional field
                "customization": {
                  "logo_url": "<logo_url>",
                  "theme_color": "<theme_color>" // Must be 6 digit hex color code. ex. #2C3E50
                },
                // Optional field
                "fee_headers": {
                  "fee_type_1": "<fee_type_1>",
                  "fee_type_2": "<fee_type_2>",
                  "fee_type_n": "<fee_type_n>",
                },
              };

              final configData = jsonEncode(clientObject);

              gqPaymentSDK.checkout(
                context,
                onCancel: handleCancel,
                onFailed: handleFailure,
                onSuccess: handleSuccess,
                configData: configData,
              );
            },
            child: const Text("Open GQ SDK")),
      ),
    );
  }
}

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

1 回复

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


gq_payment_flutter_sdk 是一个用于在 Flutter 应用中集成支付功能的插件。以下是如何使用该插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  gq_payment_flutter_sdk: ^1.0.0  # 请确保使用最新版本

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

2. 初始化 SDK

在你的 Flutter 应用中初始化支付 SDK。通常你会在 main.dart 或应用的入口文件中进行初始化。

import 'package:gq_payment_flutter_sdk/gq_payment_flutter_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化支付 SDK
  await GQPaymentFlutterSdk.init(
    appId: 'your_app_id',
    appKey: 'your_app_key',
    environment: Environment.SANDBOX, // 或 Environment.PRODUCTION
  );
  
  runApp(MyApp());
}

3. 设置支付监听器

在支付过程中,你需要监听支付结果。可以通过设置监听器来捕获支付成功、失败或取消的事件。

GQPaymentFlutterSdk.setPaymentListener(
  onPaymentSuccess: (PaymentResult result) {
    // 处理支付成功逻辑
    print('Payment成功: ${result.transactionId}');
  },
  onPaymentFailure: (PaymentError error) {
    // 处理支付失败逻辑
    print('Payment失败: ${error.message}');
  },
  onPaymentCancel: () {
    // 处理支付取消逻辑
    print('Payment取消');
  },
);

4. 发起支付请求

在需要支付的地方,调用 SDK 提供的支付方法。通常你需要提供订单信息、支付金额等。

void initiatePayment() async {
  try {
    await GQPaymentFlutterSdk.startPayment(
      orderId: 'your_order_id',
      amount: 100.0, // 支付金额
      currency: 'USD', // 货币类型
      productName: 'Test Product', // 产品名称
      productDescription: 'This is a test product', // 产品描述
    );
  } catch (e) {
    print('支付启动失败: $e');
  }
}

5. 处理支付结果

根据支付监听器的回调,处理支付成功、失败或取消的逻辑。

6. 其他功能

gq_payment_flutter_sdk 可能还提供其他功能,如查询订单、退款等。你可以参考插件的文档或源代码来使用这些功能。

7. 调试与发布

在开发过程中,你可以使用沙盒环境进行测试。发布应用时,确保将环境切换到生产环境。

await GQPaymentFlutterSdk.init(
  appId: 'your_app_id',
  appKey: 'your_app_key',
  environment: Environment.PRODUCTION, // 切换到生产环境
);

8. 注意事项

  • 确保在 AndroidManifest.xmlInfo.plist 中添加必要的权限和配置。
  • 确保在支付回调中处理订单状态,避免重复支付或其他异常情况。

9. 参考文档

详细的使用方法和 API 文档可以参考插件的官方文档或 GitHub 仓库。

示例代码

以下是一个完整的示例代码:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  await GQPaymentFlutterSdk.init(
    appId: 'your_app_id',
    appKey: 'your_app_key',
    environment: Environment.SANDBOX,
  );
  
  runApp(MyApp());
}

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

class PaymentScreen extends StatelessWidget {
  void initiatePayment() async {
    try {
      await GQPaymentFlutterSdk.startPayment(
        orderId: 'your_order_id',
        amount: 100.0,
        currency: 'USD',
        productName: 'Test Product',
        productDescription: 'This is a test product',
      );
    } catch (e) {
      print('支付启动失败: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('支付示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: initiatePayment,
          child: Text('发起支付'),
        ),
      ),
    );
  }
}
回到顶部