Flutter支付集成插件sadadpay_flutter的使用

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

Flutter支付集成插件sadadpay_flutter的使用

特性

Sadad SDK用于简化与Sadad REST API在移动应用中的集成。

  • 生成刷新令牌
  • 生成访问令牌
  • 创建发票
  • 通过ID获取发票
  • 提供一个Web视图进行支付流程

安装

要使用此包,请将其添加到您的项目中。

使用命令行安装

运行以下命令:

$ flutter pub add sadadpay_flutter

这将在您的项目的pubspec.yaml文件中添加如下依赖项(并运行隐式的flutter pub get):

dependencies:
  sadadpay_flutter: ^0.0.3

在Dart代码中导入

在Dart代码中,可以这样导入:

import 'package:sadadpay_flutter/config/env.dart';
import 'package:sadadpay_flutter/interceptors/authorization_interceptor.dart';
import 'package:sadadpay_flutter/sadadpay.dart';
import 'package:sadadpay_flutter/service/payment_status.dart';
import 'package:sadadpay_flutter/service/sadad_service.dart';
import 'package:sadadpay_flutter/widgets/web_view.dart';

代码片段详情

生成刷新令牌

使用generateRefreshToken方法生成刷新令牌。该方法返回JSON对象。

sadadPay.generateRefreshToken(clientKey: _clientKey, clientSecret: _clientSecret).then(
    (value) => _refreshToken = value['response']['refreshToken']);

生成访问令牌

使用generateAccessToken方法生成访问令牌。该方法返回JSON对象。

sadadPay.generateAccessToken(refreshToken: _refreshToken).then(
    (value) => _accessToken = value['response']['accessToken']);

创建发票

使用createInvoice方法创建发票。该方法返回JSON对象。

final invoices = {
    "Invoices": [
      {
        "amount": "10",
        "customer_Name": "customer",
        "customer_Email": "customer@example.com",
        "lang": "en",
        "currency_Code": "KWD",
        "items": [
          {"name": "x", "quantity": 2, "amount": 2},
          {"name": "y", "quantity": 6, "amount": 1}
        ]
      }
    ]
  };

sadadPay.createInvoice(invoices: invoices, token: _accessToken).then(
        (value) => setState(() => _invoiceId = value['response']['invoiceId']));

获取发票

使用getInvoice方法通过ID获取发票。该方法返回JSON对象。

sadadPay.getInvoice(invoiceId: _invoiceId, token: _accessToken).then(
        (value) => setState(() => _invoiceKey = value['response']['key']));

使用Sadad Web视图

使用SadadWebView来展示支付页面。该方法返回一个Widget。

[@override](/user/override)
Widget build(BuildContext context) {
  if (_invoiceKey != '') {
    return SadadWebView(
      invoiceKey: _invoiceKey,
      onSuccess: () {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const SuccessPage()),
        );
      },
      onFail: () {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const FailPage()),
        );
      },
      appBar: AppBar(
        title: const Text('App Bar'),
      ),
    );
  } else {
    return const CircularProgressIndicator();
  }
}

完整示例

以下是一个完整的示例,展示了如何使用sadadpay_flutter插件进行支付集成。

import 'package:flutter/material.dart';
import 'package:sadadpay_flutter/config/env.dart';
import 'package:sadadpay_flutter/sadadpay.dart';
import 'package:sadadpay_flutter/widgets/web_view.dart';

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

class SadadDemo extends StatelessWidget {
  const SadadDemo({super.key});
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sadad Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Sadad Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 设置您的clientKey和clientSecret,它们必须存储在一个安全的地方,例如数据库。
  final String _clientKey = "xxxxxxxxxxxx";
  final String _clientSecret = "xxxxxxxxxxxx";
  late String _refreshToken;
  late String _accessToken;
  late String _invoiceId;
  late String _invoiceUrl = "";
  final invoices = {
    "Invoices": [
      {
        "amount": "10",
        "customer_Name": "Bondok",
        "customer_Email": "bondok@sadadkw.com",
        "lang": "en",
        "currency_Code": "KWD",
        "items": [
          {"name": "Orange", "quantity": 2, "amount": 2},
          {"name": "Apple", "quantity": 6, "amount": 1}
        ]
      }
    ]
  };

  SadadPay sadadPay = SadadPay(env: Environment.stage);

  Future<void> initPaymentProcess() async {
    await sadadPay
        .generateRefreshToken(
            clientKey: _clientKey, clientSecret: _clientSecret)
        .then((value) => _refreshToken = value['response']['refreshToken']);
    await sadadPay
        .generateAccessToken(refreshToken: _refreshToken)
        .then((value) => _accessToken = value['response']['accessToken']);
    await sadadPay.createInvoice(invoices: invoices, token: _accessToken).then(
        (value) => setState(() => _invoiceId = value['response']['invoiceId']));
    await sadadPay.getInvoice(invoiceId: _invoiceId, token: _accessToken).then(
        (value) => setState(() => _invoiceUrl = value['response']['url']));
  }

  [@override](/user/override)
  initState() {
    super.initState();
    initPaymentProcess();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    if (_invoiceUrl != '') {
      return SadadWebView(
        url: _invoiceUrl,
        onSuccess: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => const SuccessPage()),
          );
        },
        onFail: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => const FailPage()),
          );
        },
        appBar: AppBar(
          title: const Text('App Bar'),
        ),
      );
    } else {
      return const CircularProgressIndicator();
    }
  }
}

class SuccessPage extends StatelessWidget {
  const SuccessPage({super.key});
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('App Bar'),
      ),
      body: const Center(
        child: Text('On Success page'),
      ),
    );
  }
}

class FailPage extends StatelessWidget {
  const FailPage({super.key});
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('App Bar'),
      ),
      body: const Center(
        child: Text('On Fail page'),
      ),
    );
  }
}

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

1 回复

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


在Flutter中集成sadadpay_flutter插件以实现支付功能,通常需要按照插件的官方文档进行配置和实现。以下是一个简单的代码示例,展示了如何在Flutter应用中集成和使用sadadpay_flutter插件。

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

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

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

接下来,在你的Flutter应用中,你可以按照以下步骤进行集成:

  1. 导入插件

在你的Dart文件中导入sadadpay_flutter插件:

import 'package:sadadpay_flutter/sadadpay_flutter.dart';
  1. 初始化插件

通常,你需要在应用的某个初始化阶段(如main.dart中的initState方法或类似的生命周期方法)中初始化插件。不过,由于sadadpay_flutter的具体初始化步骤可能依赖于其API和文档,这里假设你需要设置一些必要的参数。

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    // 假设有一个初始化插件的方法
    // SadadPayFlutter.initialize(yourConfig); // 根据插件文档调整
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SadadPay Flutter Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 调用支付方法
              startPayment();
            },
            child: Text('Start Payment'),
          ),
        ),
      ),
    );
  }

  void startPayment() async {
    try {
      // 假设这是调用支付接口的方法
      // Map<String, dynamic> paymentData = {
      //   'merchantId': 'yourMerchantId',
      //   'amount': 'amountToPay',
      //   'currency': 'currencyCode',
      //   // 其他必要的支付参数
      // };

      // SadadPayFlutter.startPayment(paymentData).then((result) {
      //   // 处理支付结果
      //   print('Payment result: $result');
      // }).catchError((error) {
      //   // 处理错误
      //   print('Payment error: $error');
      // });
      
      // 由于具体API可能不同,这里用占位代码表示
      var result = await SadadPayFlutter.somePaymentMethod({
        'key1': 'value1',
        'key2': 'value2',
        // 其他参数
      });

      print('Payment result: $result');
    } catch (e) {
      print('Error initiating payment: $e');
    }
  }
}

注意:上面的代码示例中,SadadPayFlutter.initializeSadadPayFlutter.startPayment以及支付数据paymentData都是假设的,因为具体的API调用和参数需要参考sadadpay_flutter插件的官方文档。务必根据插件提供的API和参数进行实际的调用。

  1. 处理支付结果

支付完成后,插件通常会返回一个结果,你可以根据这个结果进行相应的处理,比如更新UI、保存支付状态等。

由于sadadpay_flutter插件的具体实现和API可能有所不同,以上代码仅为示例,实际使用时请务必参考插件的官方文档和示例代码。如果遇到任何问题,也可以查阅插件的issue跟踪器或寻求社区的帮助。

回到顶部