Flutter三星支付集成插件samsung_pay_sdk_flutter的使用

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

Flutter三星支付集成插件samsung_pay_sdk_flutter的使用

简介

Samsung Pay Flutter Plugin 允许你在Flutter应用程序中集成三星支付功能,为三星设备上的用户提供安全便捷的应用内支付。此插件作为官方三星支付Flutter SDK的包装器。有关可用功能和功能的详细信息,请参考官方文档

Android 设置

android/app/src/main/AndroidManifest.xml 文件中的 <application> 标签下添加API级别到元数据:

<meta-data 
    android:name="spay_sdk_api_level" 
    android:value="2.19" /> <!-- 使用最新版本以利用最新的API -->

配置 SamsungPay 对象

定义 SamsungPaySdkFlutter 实例。注意:请使用你的 serviceId,下面示例中的 serviceId 仅用于测试目的。

final samsungPaySdkFlutterPlugin = SamsungPaySdkFlutter(
  PartnerInfo(
    serviceId: '0b89048b46b64cd3a3e60c',
    data: {SpaySdk.PARTNER_SERVICE_TYPE:ServiceType.INAPP_PAYMENT.name},
  ),
);

示例 Demo

以下是完整的示例代码,展示了如何使用 samsung_pay_sdk_flutter 插件进行三星支付集成。

主页面代码

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

void main() {
  runApp(const MaterialApp(home: MyHomePage(title: "Sample Merchant")));
}

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

  static final samsungPaySdkFlutterPlugin = SamsungPaySdkFlutter(PartnerInfo(serviceId: '0b89048b46b64cd3a3e60c', data: {SpaySdk.PARTNER_SERVICE_TYPE:ServiceType.INAPP_PAYMENT.name}));

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                await MyHomePage.samsungPaySdkFlutterPlugin.activateSamsungPay();
              },
              child: const Text('激活三星支付'),
            ),
            ElevatedButton(
              onPressed: () {
                getSamsungPayStatus();
              },
              child: const Text('获取三星支付状态'),
            ),
            ElevatedButton(
              onPressed: () {
                requestCardInfo();
              },
              child: const Text('请求卡信息'),
            ),
            ElevatedButton(
              onPressed: () {
                startInAppPayWithCustomSheet();
              },
              child: const Text('开始应用内支付'),
            ),
          ],
        ),
      ),
    );
  }

  void getSamsungPayStatus() {
    // 获取三星支付状态的逻辑
  }

  void requestCardInfo(){
    // 请求卡片信息的逻辑
  }

  void startInAppPayWithCustomSheet()
  {
    // 开始自定义表单支付的逻辑
  }
}

状态响应页面

class StatusResponse extends StatefulWidget {
  const StatusResponse({Key? key}) : super(key: key);

  [@override](/user/override)
  State<StatusResponse> createState() => _StatusResponseState();
}

class _StatusResponseState extends State<StatusResponse> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final statusHolder = ModalRoute.of(context)!.settings.arguments as StatusHolder;
    return Scaffold(
        appBar: AppBar(
          title: const Text('三星支付SDK Flutter'),
        ),
        body: Column(
          children: [
            Text(statusHolder.status ? "成功" : "失败"),
            Text(statusHolder.statusCode),
            Text(statusHolder.bundle.toString()),
          ],
        ));
  }
}

请求卡片数据页面

class RequestCardData extends StatefulWidget {
  const RequestCardData({Key? key}) : super(key: key);

  [@override](/user/override)
  State<RequestCardData> createState() => _RequestCardDataState();
}

class _RequestCardDataState extends State<RequestCardData> {

  [@override](/user/override)
  Widget build(BuildContext context) {
    final cardList = ModalRoute.of(context)!.settings.arguments as List<PaymentCardInfo>;
    return Scaffold(
      appBar: AppBar(title: const Text('三星支付SDK Flutter')),
      body: cardList.isNotEmpty
          ? ListView.separated(
        itemCount: cardList.length,
        itemBuilder: (BuildContext context, int index) {
          return Container(
              padding: const EdgeInsets.all(8),
              color: Colors.grey[200],
              child: Column(
                children: [
                  Text('Card: ${cardList[index].brand}'),
                ],
              )
          );
        }, separatorBuilder: (BuildContext context, int index) => const Divider(),
      )
          : const Center(child: Text('无卡片')),
    );
  }
}

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

1 回复

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


在Flutter项目中集成Samsung Pay,你可以使用samsung_pay_sdk_flutter插件。以下是一个简要的集成指南和代码示例,帮助你快速上手。

步骤 1:添加依赖

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

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

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

步骤 2:配置Android项目

2.1 添加Samsung Pay SDK权限

在你的android/app/src/main/AndroidManifest.xml文件中添加必要的权限和元数据。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <!-- 其他配置 -->

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.NFC"/>

    <application
        android:label="your_app_name"
        android:icon="@mipmap/ic_launcher">

        <!-- Samsung Pay SDK元数据 -->
        <meta-data
            android:name="com.samsung.android.sdk.pay.merchant.id"
            android:value="你的Samsung Pay商户ID"/>

        <!-- 其他配置 -->

    </application>
</manifest>

2.2 配置ProGuard(可选)

如果你的项目使用了ProGuard,你需要在proguard-rules.pro文件中添加以下规则,以避免Samsung Pay SDK被混淆。

-keep class com.samsung.android.sdk.pay.** { *; }
-keep interface com.samsung.android.sdk.pay.** { *; }

步骤 3:初始化Samsung Pay SDK

在你的Flutter项目中,你可以通过以下代码初始化并使用Samsung Pay SDK。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Samsung Pay Integration'),
        ),
        body: Center(
          child: SamsungPayButton(),
        ),
      ),
    );
  }
}

class SamsungPayButton extends StatefulWidget {
  @override
  _SamsungPayButtonState createState() => _SamsungPayButtonState();
}

class _SamsungPayButtonState extends State<SamsungPayButton> {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        try {
          // 初始化Samsung Pay SDK
          await SamsungPaySdkFlutter.initialize();

          // 创建支付请求
          final paymentRequest = PaymentRequest(
            merchantId: '你的Samsung Pay商户ID',
            merchantName: '你的商户名称',
            totalAmount: '100.00', // 总金额
            currencyCode: 'USD', // 货币代码
            items: [
              PaymentItem(
                label: '商品名称',
                amount: '100.00',
                quantity: '1',
              ),
            ],
            shippingMethods: [
              ShippingMethod(
                id: 'shipping_method_1',
                label: '免费送货',
                amount: '0.00',
                selected: true,
              ),
            ],
            shippingOptionRequired: false,
          );

          // 发起支付请求
          final result = await SamsungPaySdkFlutter.startPayment(paymentRequest);
          print('Samsung Pay支付结果: $result');
        } catch (e) {
          print('Samsung Pay初始化或支付失败: $e');
        }
      },
      child: Text('支付'),
    );
  }
}

注意事项

  1. 商户ID:确保你在Samsung Pay商户平台上获取了正确的商户ID,并在代码中正确配置。
  2. 支付参数:根据你的实际需求调整支付请求的参数,如总金额、货币代码、商品信息等。
  3. 错误处理:在实际应用中,你需要添加更详细的错误处理逻辑,以提高用户体验。

通过上述步骤和代码示例,你应该能够在Flutter项目中成功集成Samsung Pay SDK。

回到顶部