Flutter集成Snapmint服务插件flutter_snapmint_sdk的使用

开始使用

flutter_snapmint_sdk 是一个用于在 Flutter 应用中集成 Snapmint 服务的插件。它允许开发者轻松地将 Snapmint 的支付功能嵌入到他们的应用程序中。

初始化项目

首先,确保你已经创建了一个 Flutter 项目。如果你还没有创建项目,可以使用以下命令:

flutter create snapmint_example

然后进入项目目录:

cd snapmint_example

添加依赖

pubspec.yaml 文件中添加 flutter_snapmint_sdk 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_snapmint_sdk: ^1.0.0 # 请根据实际版本号进行调整

保存文件后运行以下命令以安装依赖:

flutter pub get

配置插件

main.dart 文件中配置并使用插件。以下是完整的示例代码:

import 'dart:convert';

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

import 'package:flutter/services.dart';
import 'package:flutter_snapmint_sdk/src/SnapmintButtonGoldWidget.dart';
import 'package:flutter_snapmint_sdk/src/SnapmintButtonWidget.dart';
import 'package:flutter_snapmint_sdk/flutter_snapmint_sdk.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  late Map<String, dynamic> _response;

  final _flutterSnapmintSdkPlugin = FlutterSnapmintSdk();

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化平台状态
    initPlatformState();
  }

  Future<void> openSnapMintModule() async {
    Map<String, dynamic> responseData;
    try {
      String jsonString = getJsonString();
      String nativeData = await _flutterSnapmintSdkPlugin.openSnapmintModule(jsonString) ?? {}.toString();
      print("TEST! $nativeData");
      responseData = jsonDecode(nativeData);
      print("TEST! data is code => ${responseData["statusCode"]} message is => ${responseData["responseMsg"]}");
    } on Exception {
      responseData = <String, dynamic>{};
      print("TEST! Exception handled");
    }

    if (!mounted) return;

    setState(() {
      _response = responseData;
    });
  }

  // 平台消息是异步的,因此我们在异步方法中初始化
  Future<void> initPlatformState() async {
    String platformVersion;
    // 平台消息可能会失败,所以我们使用 try/catch 来处理 PlatformException。
    // 我们还处理了消息可能返回 null 的情况。
    try {
      platformVersion = await _flutterSnapmintSdkPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 如果小部件从树中被移除,而异步平台消息仍在飞行中,我们希望丢弃回复而不是调用
    // setState 来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Snapmint 插件示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Container(
                margin: const EdgeInsets.only(left: 20, right: 20),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    ElevatedButton(
                      onPressed: () {
                        openSnapMintModule();
                      },
                      child: const Text(
                        "打开 SDK",
                        style: TextStyle(
                          fontSize: 14,
                          color: Colors.blue,
                          fontFamily: 'Roboto',
                          fontWeight: FontWeight.w400,
                        ),
                      ),
                    ),
                    const SizedBox(
                      height: 10,
                    ),
                    SnapmintButtonWidget(
                      amount: 100.0.toString(),
                      jsonUrl:
                          'https://preemi.snapmint.com/assets/merchant/1616/snap_ketch.json',
                      fontFamily: const TextStyle(fontFamily: 'Roboto'),
                      disablePopup: false,
                    ),
                    const SizedBox(
                      height: 10,
                    ),
                    SnapmintButtonGoldWidget(
                      amount: 8355,
                      goldAmount: 2997,
                      jsonUrl:
                          'https://preemi.snapmint.com/assets/merchant/1616/snap_ketch.json',
                      fontFamilyStyle: const TextStyle(fontFamily: 'Roboto'),
                      disablePopup: false,
                      disableSecondLine: false,
                    )
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  String getJsonString() {
    Map<String, dynamic> finalData = {
      "merchant_key": "cQ_kvgB0",
      "merchant_token": "UOYY0R_n",
      "merchant_id": 1456,
      "merchant_confirmation_url":
          "https://services-pp-customer.melorralabsinfra.com/api/snapmint/snapmint_order/order_success/",
      "merchant_failure_url":
          "https://services-pp-customer.melorralabsinfra.com/api/snapmint/snapmint_order/order_failure/",
      "mobile": "9004559365",
      "store_id": 1,
      "order_id":
          "MELORRA-${DateTime.now().millisecondsSinceEpoch}", // 随机值可以是 DateTime
      "order_value": 75163,
      "udf1": 1.91,
      "udf2": 7147,
      "full_name": "test",
      "email": "khem.raj@snapmint.com",
      "billing_address_line1": "test",
      "billing_zip": "560037",
      "shipping_address_line1": "test",
      "shipping_zip": "560037",
      "deviceType": "android",
      "products": [
        {
          "sku": "227285",
          "name": "Bold Show Diamond Earrings",
          "quantity": 1,
          "unit_price": 75163,
          "udf2": 7147,
          "udf1": "1.910 g"
        }
      ]
    };

    // 创建完整的 JSON 结构
    Map<String, dynamic> jsonData = {
      "finalData": finalData,
      "base_url": "https://qaapi.snapmint.com/v1/public/s2s_online_checkout",
      "suc_url":
          "https://services-pp-customer.melorralabsinfra.com/api/snapmint/snapmint_order/order_success/",
      "fail_url":
          "https://services-pp-customer.melorralabsinfra.com/api/snapmint/snapmint_order/order_failure/",
    };

    // 将 Map 转换为 JSON 字符串
    String jsonString = jsonEncode(jsonData);

    print(jsonString);
    return jsonString; // 输出 JSON 字符串
  }
}

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

1 回复

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


要在Flutter应用中集成Snapmint服务插件 flutter_snapmint_sdk,你可以按照以下步骤进行操作:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_snapmint_sdk: ^1.0.0  # 请使用最新版本

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

2. 初始化 Snapmint SDK

在你的 Flutter 应用中初始化 Snapmint SDK。通常,你可以在 main.dart 文件中进行初始化。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Snapmint SDK
  await SnapmintSdk.initialize(
    apiKey: 'YOUR_API_KEY',  // 替换为你的 Snapmint API Key
    environment: SnapmintEnvironment.sandbox,  // 使用沙盒环境或生产环境
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Snapmint Demo',
      home: HomeScreen(),
    );
  }
}

3. 使用 Snapmint SDK

在你的应用中使用 Snapmint SDK 提供的功能。例如,你可以启动 Snapmint 的支付流程。

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

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Snapmint Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            try {
              // 启动 Snapmint 支付流程
              final result = await SnapmintSdk.startPayment(
                orderId: 'ORDER_ID',  // 替换为你的订单 ID
                amount: 1000,  // 替换为订单金额
                customerName: 'John Doe',  // 替换为客户名称
                customerPhone: '1234567890',  // 替换为客户电话
                customerEmail: 'john.doe@example.com',  // 替换为客户邮箱
              );

              // 处理支付结果
              if (result.status == SnapmintPaymentStatus.success) {
                print('Payment successful');
              } else {
                print('Payment failed: ${result.message}');
              }
            } catch (e) {
              print('Error: $e');
            }
          },
          child: Text('Start Payment'),
        ),
      ),
    );
  }
}

4. 处理支付结果

startPayment 方法中,你可以处理支付结果。SnapmintPaymentResult 对象包含了支付的状态和消息。

final result = await SnapmintSdk.startPayment(
  orderId: 'ORDER_ID',
  amount: 1000,
  customerName: 'John Doe',
  customerPhone: '1234567890',
  customerEmail: 'john.doe@example.com',
);

if (result.status == SnapmintPaymentStatus.success) {
  print('Payment successful');
} else {
  print('Payment failed: ${result.message}');
}

5. 配置 Android 和 iOS

确保你的 Android 和 iOS 项目已经正确配置了 Snapmint SDK 所需的权限和设置。

Android

android/app/build.gradle 文件中,确保你启用了 multidex 并添加了必要的依赖。

android {
    defaultConfig {
        multiDexEnabled true
    }
}

dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}

iOS

ios/Podfile 文件中,确保你添加了必要的依赖。

platform :ios, '11.0'

target 'Runner' do
  use_frameworks!
  # Pods for Runner
  pod 'SnapmintSDK', '~> 1.0.0'  # 请使用最新版本
end
回到顶部