Flutter支付集成插件shurjopay的使用

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

Flutter支付集成插件shurjopay的使用

这是官方的shurjoPay flutter包,供商家或服务提供商将其支付系统集成到他们的Flutter应用程序中。目前,它仅支持Android和iOS。

shurjoPay flutter包通过两个方法调用使支付系统更加简单:

  • makePayment()
  • verifyPayment()

仅此而已!要了解更多信息,请参阅下面的详细说明。

添加包依赖到应用

  1. 打开应用文件夹内的pubspec.yaml文件,并在dependencies下添加shurjopay: ^2.0.6
  2. 运行命令flutter pub get以拉取并下载依赖项。

使用

初始化shurjoPay

首先,您必须在使用之前通过调用initializeShurjopay()并传递环境类型作为参数来初始化shurjoPay。

示例:

void main() {
  initializeShurjopay(environment: "sandbox");
  runApp(const MyApp());
}

基本使用示例

创建一个shurjoPay对象。

ShurjoPay shurjoPay = ShurjoPay();

创建支付请求模型并初始化值。

// 创建ShurjopayConfigs对象并设置值,以便您可以在这里传递它。
ShurjopayRequestModel shurjopayRequestModel = ShurjopayRequestModel(
  configs: shurjopayConfigs,
  currency: "BDT",
  amount: 1000,
  // 记住在订单ID前加前缀。例如:如果前缀是'test',则订单ID应为test123456
  orderID: "sp1ab2c3d4",
  discountAmount: 0,
  discountPercentage: 0,
  customerName: "Shajedul Islam",
  customerPhoneNumber: "01628734916",
  customerAddress: "customer address",
  customerCity: "customer city",
  customerPostcode: "1212",
  returnURL: "return_url",
  cancelURL: "cancel_url",
);

创建一个支付响应模型对象以存储makePayment()方法的结果。

ShurjopayResponseModel shurjopayResponseModel = ShurjopayResponseModel();

调用makePayment()方法以启动支付过程。

shurjopayResponseModel = await shurjoPay.makePayment(
  context: context,
  shurjopayRequestModel: shurjopayRequestModel,
);

创建一个验证响应模型对象以存储verifyPayment()方法的结果。

ShurjopayVerificationModel shurjopayVerificationModel = ShurjopayVerificationModel();

如果makePayment()方法结果的状态为true,则可以在任何时候通过调用verifyPayment()方法来验证支付。

if (shurjopayResponseModel.status == true) {
  try {
    shurjopayVerificationModel = await shurjoPay.verifyPayment(
      orderID: shurjopayResponseModel.shurjopayOrderID!,
    );
    if (shurjopayVerificationModel.spCode == "1000") {
      print("Payment Varified");
    }
  } catch (error) {
    print(error.toString());
  }
}

完整示例代码

以下是一个完整的示例代码,展示了如何在应用中集成shurjoPay。

// ignore_for_file: avoid_print

import 'package:flutter/material.dart';
import 'package:pro_widgets/pro_widgets.dart';
import 'package:shurjopay/models/config.dart';
import 'package:shurjopay/models/payment_verification_model.dart';
import 'package:shurjopay/models/shurjopay_request_model.dart';
import 'package:shurjopay/models/shurjopay_response_model.dart';
import 'package:shurjopay/shurjopay.dart';
import 'package:shurjopay/utilities/functions.dart';

void main() {
  initializeShurjopay(environment: "sandbox");
  runApp(const MyApp());
}

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  ShurjoPay shurjoPay = ShurjoPay();

  ShurjopayConfigs shurjopayConfigs = ShurjopayConfigs(
    prefix: "NOK",
    userName: "sp_sandbox",
    password: "pyyk97hu&6u6",
    clientIP: "127.0.0.1",
  );

  ShurjopayResponseModel shurjopayResponseModel = ShurjopayResponseModel();
  ShurjopayVerificationModel shurjopayVerificationModel = ShurjopayVerificationModel();

  TextEditingController nameFieldController = TextEditingController();
  TextEditingController amountFieldController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('shurjoPay Demo'),
        backgroundColor: Colors.green,
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(16),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ProTextField(
                hint: "Enter Name",
                controller: nameFieldController,
                height: 45,
              ),
              const ProGap(y: 16),
              ProTextField(
                hint: "Enter Amount",
                controller: amountFieldController,
                height: 45,
              ),
              const ProGap(y: 16),
              ProButtonBasic(
                text: "Pay",
                fontSize: 18,
                backgroundColor: Colors.green,
                height: 45,
                width: double.infinity,
                onTap: () async {
                  FocusScope.of(context).unfocus();
                  ShurjopayRequestModel shurjopayRequestModel = ShurjopayRequestModel(
                    configs: shurjopayConfigs,
                    currency: "BDT",
                    amount: double.parse(amountFieldController.text),
                    orderID: "sp1ab2c3d4",
                    discountAmount: 0,
                    discountPercentage: 0,
                    customerName: nameFieldController.text,
                    customerPhoneNumber: "01711486915",
                    customerAddress: "customer address",
                    customerCity: "customer city",
                    customerPostcode: "1212",
                    // 测试:https://www.sandbox.shurjopayment.com/return_url
                    returnURL: "https://www.sandbox.shurjopayment.com/return_url",
                    // 测试:https://www.sandbox.shurjopayment.com/cancel_url
                    cancelURL: "https://www.sandbox.shurjopayment.com/cancel_url",
                  );
                  shurjopayResponseModel = await shurjoPay.makePayment(
                    context: context,
                    shurjopayRequestModel: shurjopayRequestModel,
                  );
                  if (shurjopayResponseModel.status == true) {
                    try {
                      shurjopayVerificationModel = await shurjoPay.verifyPayment(
                        orderID: shurjopayResponseModel.shurjopayOrderID!,
                      );
                      print(shurjopayVerificationModel.spCode);
                      print(shurjopayVerificationModel.spMessage);
                      if (shurjopayVerificationModel.spCode == "1000") {
                        print("Payment Varified");
                      }
                    } catch (error) {
                      print(error.toString());
                    }
                  }
                  nameFieldController.clear();
                  amountFieldController.clear();
                },
              )
            ],
          ),
        ),
      ),
    );
  }
}

以上就是所有内容!现在您可以使用我们的shurjoPay flutter包,使您的支付系统变得简单和流畅。


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

1 回复

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


当然,下面是一个关于如何在Flutter应用中集成并使用shurjopay支付插件的示例代码。请注意,实际使用时需要根据shurjopay插件的官方文档进行调整,并确保你已经正确设置了相关的API密钥和支付参数。

首先,确保你已经在pubspec.yaml文件中添加了shurjopay依赖:

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

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

接下来,在你的Flutter项目中,你需要进行以下步骤来集成shurjopay支付功能:

  1. 导入shurjopay

在你的Dart文件中导入shurjopay包:

import 'package:shurjopay/shurjopay.dart';
  1. 初始化ShurjoPay

在应用的初始化阶段(例如main.dart中),你可以配置ShurjoPay

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化ShurjoPay配置
  ShurjoPay.init(
    key: 'your_api_key', // 替换为你的API密钥
    environment: ShurjoPayEnvironment.sandbox, // 或ShurjoPayEnvironment.production,根据你的需求选择
  );

  runApp(MyApp());
}
  1. 创建支付请求

在你的支付页面上,创建一个支付请求并启动支付流程:

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

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

class _PaymentScreenState extends State<PaymentScreen> {
  void startPayment() async {
    try {
      // 创建支付请求参数
      final paymentParams = ShurjoPayPaymentParams(
        amount: 1000, // 支付金额,单位通常是该支付系统所支持的最小货币单位(例如,1000可能代表10.00美元)
        currencyCode: 'USD', // 货币代码
        description: 'Product Purchase', // 支付描述
        orderId: 'order_123456', // 订单ID,确保唯一
        returnUrl: 'https://yourwebsite.com/success', // 支付成功后返回的URL
        notifyUrl: 'https://yourwebsite.com/notify', // 支付通知URL
      );

      // 启动支付流程
      final result = await ShurjoPay.startPayment(paymentParams);

      if (result.status == ShurjoPayPaymentStatus.success) {
        // 支付成功处理
        print('Payment successful: ${result.responseData}');
      } else if (result.status == ShurjoPayPaymentStatus.failed) {
        // 支付失败处理
        print('Payment failed: ${result.errorMessage}');
      } else if (result.status == ShurjoPayPaymentStatus.canceled) {
        // 支付取消处理
        print('Payment canceled');
      }
    } catch (e) {
      // 错误处理
      print('Error: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Payment Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: startPayment,
          child: Text('Start Payment'),
        ),
      ),
    );
  }
}
  1. 处理支付结果

在上面的代码中,我们已经处理了支付成功、失败和取消的情况。你可以根据实际需求进一步处理这些结果,例如更新UI、发送通知等。

请注意,上述代码是一个简化的示例,实际使用时你可能需要处理更多的细节,如用户身份验证、支付参数的动态生成、错误处理等。务必参考shurjopay插件的官方文档和API参考,以确保正确集成和使用。

回到顶部