Flutter支付集成插件youcanpay_sdk的使用

Flutter支付集成插件youcanpay_sdk的使用

YouCanPay Flutter SDK 可以帮助您在Android和iOS应用中快速轻松地构建出色的支付体验。我们提供了强大的可定制的UI屏幕,使您的支付更加简单。

基本用法

服务器端

这种集成需要在您的服务器上设置端点,以便与YouCanPay API通信。您可以使用我们的官方库从服务器访问YouCanPay API。以下步骤将指导您完成过程:

安装YouCan Pay SDK

在您的pubspec.yaml文件中添加youcanpay

dependencies:
  youcanpay_sdk: <version>

或者运行以下命令行:

flutter pub add youcanpay_sdk

导入它

现在在您的Dart代码中,可以使用:

import 'package:youcanpay_sdk/youcanpay_sdk.dart';

设置支付

初始化YCPay

第一步是通过创建一个实例来初始化YouCanPay SDK,该实例需要以下参数:pub_keycontext

late YCPay ycPay;

并在initState方法中实例化它:

[@override](/user/override)
void initState() {
  super.initState();
  ycPay = YCPay(
    publicKey: publicKey,
    context: context
  );
}

公钥(pub_key)

卖家的YouCanPay账户公钥。这让我们知道谁会收到付款。

加载支持的支付方式

在初始化ycPay后,我们可以使用以下方法加载支持的支付方式:

ycPay.getAccountConfig().then((accountConfig) {
  if (!accountConfig.success) {
    // 加载配置失败。
    return;
  }

  if (accountConfig.acceptsCashPlus) {
    // CashPlus可用
  }

  if (accountConfig.acceptsCreditCards) {
    // 信用卡支付可用
  }
});

使用信用卡开始支付

当您得到accountConfig.acceptsCreditCard == true时,意味着可以使用信用卡支付方式。

初始化卡信息
try {
  cardInformation = CardInformation(
    cardHolderName: 'Holder Name',
    cardNumber: '1234123412341234',
    expireDateYear: '35', // 年份
    expireDateMonth: '12', // 月份
    cvv: '123'
  );
} catch (e) {
  print(e); // 无效的卡信息异常错误
}
使用信用卡进行支付

您可以使用ycPay.payWithCard来处理您的支付,并作为参数传递token_id,该ID可以从您的服务器生成并通过端点接收移动应用程序。要生成令牌,请参阅文档中的令牌化部分。

ycPay.payWithCard(
  token: "token_id",
  cardInformation: cardInformation,
  onSuccessfulPayment: (transactionId) {
    // 支付成功
  },
  onFailedPayment: (errorMessage) {
    // 支付失败
  },
);

一旦onSuccessfulPayment回调被调用,这意味着交易已成功处理,您将收到一个transactionId参数,可以将其与您的订单详情一起提交。类似地,当支付过程中发生错误时,onFailedPayment会被调用,并且您会收到errorMessage参数以显示给客户。

使用CashPlus开始支付

如果您得到accountConfig.acceptsCashPlus == true,这意味着您有CashPlus作为支付方式。

使用CashPlus进行支付

您可以使用ycPay.payWithCashPlus来处理您的支付,并作为参数传递token_id,该ID可以从您的服务器生成并通过端点接收移动应用程序。要生成令牌,请参阅文档中的令牌化部分。

ycPay.payWithCashPlus(
  token: "token_id",
  onSuccessfulPayment: (transactionId, cashPlusToken) {
    // 支付成功
  },
  onFailedPayment: (errorMessage) {
    // 支付失败
  }
);

一旦onSuccessfulPayment回调被调用,这意味着交易已成功处理,您将收到transactionIdcashPlusToken参数,可以将其与您的订单详情一起提交。类似地,当支付过程中发生错误时,onFailedPayment会被调用,并且您会收到errorMessage参数以显示给客户。

沙箱模式

YouCan Pay沙箱为您提供了一种在测试环境中测试YouCan Pay的简便方法。

// 设置沙箱模式
ycPay = YCPay(
  publicKey: publicKey,
  context: context,
  sandbox: true // 沙箱模式
);

示例代码

以下是完整的示例代码:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'YouCan Pay Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'YouCan Pay Demo'),
    );
  }
}

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> {
  String token = "token";
  String publicKey = "pubKey";
  late YCPay ycPay;
  late CardInformation cardInformation;

  [@override](/user/override)
  void initState() {
    super.initState();
    initYCPay();
    initCardInformation();
  }

  // 初始化YCPay
  // publicKey: 您的公钥
  // context: 您的上下文
  // sandbox: 如果您想使用沙箱模式,则为true
  // locale: 您的语言环境(默认为en)
  initYCPay() {
    ycPay = YCPay(publicKey: publicKey, context: context, sandbox: true);
  }

  // 初始化卡信息
  // 您可以从用户那里获取此信息
  initCardInformation() {
    try {
      cardInformation = CardInformation(
        cardHolderName: 'Holder Name',
        cardNumber: '1234123412341234',
        expireDateYear: '35',
        expireDateMonth: '12',
        cvv: '123'
      );
    } catch (e) {
      debugPrint(e.toString());
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            payWithCardButton(),
            const SizedBox(height: 20),
            payWithCashPlusButton()
          ],
        ),
      ),
    );
  }

  Widget payWithCardButton() {
    return ElevatedButton(
      onPressed: () => payWithCard(),
      child: SizedBox(
        height: 50,
        width: MediaQuery.of(context).size.width,
        child: const Center(
          child: Text(
            "Pay with card",
            style: TextStyle(fontSize: 20),
          )
        )
      )
    );
  }

  Widget payWithCashPlusButton() {
    return ElevatedButton(
      style: ElevatedButton.styleFrom(backgroundColor: Colors.green),
      onPressed: () => payWithCashPlus(),
      child: SizedBox(
        height: 50,
        width: MediaQuery.of(context).size.width,
        child: const Center(
          child: Text(
            "Pay with CashPlus",
            style: TextStyle(fontSize: 20),
          )
        )
      )
    );
  }

  void payWithCashPlus() {
    ycPay.payWithCashPlus(
      token: token,
      onSuccessfulPayment: (transactionId, cashPlusToken) {
        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
          content: Text('pay success cashPlus token: $transactionId'),
          backgroundColor: Colors.green,
        ));
      },
      onFailedPayment: (message) {
        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
          content: Text('pay failed $message'),
          backgroundColor: Colors.red,
        ));
      }
    );
  }

  void payWithCard() {
    ycPay.payWithCard(
      token: token,
      cardInformation: cardInformation,
      onSuccessfulPayment: (transactionId) {
        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
          content: Text('pay success $transactionId'),
          backgroundColor: Colors.green,
        ));
      },
      onFailedPayment: (message) {
        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
          content: Text('pay failed $message'),
          backgroundColor: Colors.red,
        ));
      }
    );
  }
}

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

1 回复

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


在Flutter项目中集成并使用youcanpay_sdk插件进行支付功能,可以遵循以下步骤。以下是一个基本的代码示例,展示了如何集成并使用该插件。

1. 添加依赖

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

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

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

2. 配置Android和iOS

根据youcanpay_sdk的官方文档,您可能需要在AndroidManifest.xmlInfo.plist中进行一些配置。这些配置通常包括必要的权限声明和API密钥等。由于这些信息是敏感且特定于应用的,因此请参考youcanpay_sdk的官方文档进行配置。

3. 初始化插件

在您的Flutter应用中,初始化youcanpay_sdk插件。通常,这会在应用启动时进行。

import 'package:youcanpay_sdk/youcanpay_sdk.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  YouCanPaySdk.init(); // 初始化插件,可能需要根据文档传递一些初始化参数
  runApp(MyApp());
}

4. 实现支付功能

接下来,实现支付功能。以下是一个简单的示例,展示了如何启动支付流程:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('YouCanPay SDK Demo'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 替换为您的实际支付参数
              final paymentParams = {
                'amount': '100.00', // 金额
                'currency': 'USD',  // 货币
                'description': 'Test Payment', // 描述
                // 可能还有其他必要的参数,请参考YouCanPay SDK文档
              };

              try {
                final result = await YouCanPaySdk.startPayment(paymentParams);
                if (result['status'] == 'success') {
                  // 支付成功处理
                  print('Payment successful: ${result['data']}');
                } else {
                  // 支付失败处理
                  print('Payment failed: ${result['error']}');
                }
              } catch (e) {
                // 异常处理
                print('Error initiating payment: $e');
              }
            },
            child: Text('Pay Now'),
          ),
        ),
      ),
    );
  }
}

5. 处理回调和结果

在实际应用中,您可能需要处理支付结果回调,比如支付成功或失败后的页面跳转或状态更新。上面的示例中已经展示了如何检查支付结果并根据结果进行相应的处理。

注意事项

  • 安全性:确保您的支付密钥和其他敏感信息不会硬编码在客户端代码中,并且遵循最佳安全实践。
  • 错误处理:在实际应用中,添加更多的错误处理和用户反馈机制,以提高用户体验。
  • 测试环境:在将支付功能部署到生产环境之前,请在测试环境中进行充分的测试。

以上代码提供了一个基本的框架,用于在Flutter应用中集成youcanpay_sdk插件。请务必参考youcanpay_sdk的官方文档,以获取最准确和最新的集成指南。

回到顶部