Flutter支付集成插件ecommpay_flutter_plugin的使用

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

Flutter支付集成插件ecommpay_flutter_plugin的使用

使用

打开支付表单

要打开支付表单,请遵循以下步骤:

  1. 创建EcmpPaymentInfo对象。

该对象必须包含以下必需参数:

  • projectId(int)——由Ecommpay分配的项目标识符
  • paymentId(String)——在项目内唯一的支付标识符
  • paymentCurrency(String)——以ISO 4217 alpha-3格式表示的支付货币代码
  • paymentAmount(int)——以最小货币单位表示的支付金额
  • customerId(String)——项目内的客户标识符
  • signature(String)——在指定所有必需参数后生成的请求签名
final paymentInfo = EcmpPaymentInfo(
  projectId: 12312,
  paymentId: "paymentId",
  paymentAmount: 100,
  paymentCurrency: "USD",
);
  1. EcmpPaymentInfo对象中包含的参数进行签名。
final paramsForSignature = await ecmpPlugin.getParamsForSignature(paymentInfo);
paymentInfo.signature = "CALCULATED_SIGNATURE_FROM_YOUR_BACKEND";
  1. 创建EcmpPaymentOptions对象,其中包含必需的参数actionType(枚举),其值指定所需的操作类型:
  • EcmpActionType.sale
  • EcmpActionType.auth
  • EcmpActionType.verify
  • EcmpActionType.tokenize

除了必需的EcmpPaymentInfo对象和actionType参数外,示例还包含几个额外的参数,包括用于收集客户信息的EcmpAdditionalFields对象。

final paymentOptions = EcmpPaymentOptions(
  actionType: EcmpActionType.Sale,
  paymentInfo: paymentInfo,
  isDarkTheme: false,
  //如果需要使用真实服务,请设置为EcmpMockModeType.disabled
  mockModeType: EcmpMockModeType.success,
  //如果需要,设置显示模式
  screenDisplayModes: [EcmpScreenDisplayMode.hideDeclineFinalScreen],
  //如果需要,设置附加字段
  additionalFields: [
    EcmpAdditionalField(type: "email", value: "mail@mail.com"),
    EcmpAdditionalField(type: "first_name", value: "firstName"),
  ],
  //如果需要,设置收款人信息
  recipientInfo: EcmpRecipientInfo(),
  //如果需要,设置定期信息
  recurrentData: EcmpRecurrentData(),
);
  1. 创建EcmpPlugin对象。
final ecmpPlugin = EcmpPlugin();
  1. 打开支付表单并处理结果。
final response = await ecmpPlugin.sdkRun(paymentOptions);

完整示例Demo

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

import 'package:ecommpay_flutter_plugin/ecmpplugin.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_additional_field.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_payment_info.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_payment_options.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_recipient_info.dart';
import 'package:ecommpay_flutter_plugin/models/ecmp_recurrent_data.dart';
import 'package:ecommpay_flutter_plugin_example/signature_generator.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.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> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: ProductDetailsPage(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('产品详情'),
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: () async {
          final ecmpPlugin = EcmpPlugin();
          // 创建支付信息
          final paymentInfo = EcmpPaymentInfo(
            projectId: 138723,
            paymentId: "paymentId",
            paymentAmount: 100,
            paymentCurrency: "USD",
          );

          // 获取签名参数
          final paramsForSignature = await ecmpPlugin.getParamsForSignature(paymentInfo);
          debugPrint(paramsForSignature);
          // 计算并设置签名,并将其设置到支付信息中
          paymentInfo.signature = SignatureGenerator.generateSignature(
              paramsForSignature!, "secret key");

          final paymentOptions = EcmpPaymentOptions(
            actionType: EcmpActionType.sale,
            paymentInfo: paymentInfo,
            isDarkTheme: false,
            // 如果需要使用真实服务,请设置为EcmpMockModeType.disabled
            mockModeType: EcmpMockModeType.success,
            // 如果需要,设置显示模式
            screenDisplayModes: [EcmpScreenDisplayMode.hideDeclineFinalScreen],
            // 如果需要,设置附加字段
            additionalFields: [
              EcmpAdditionalField(type: "email", value: "mail@mail.com"),
              EcmpAdditionalField(type: "first_name", value: "firstName"),
            ],
            // 如果需要,设置收款人信息
            recipientInfo: EcmpRecipientInfo(),
            // 如果需要,设置定期信息
            recurrentData: EcmpRecurrentData(),
          );

          try {
            final response = await ecmpPlugin.sdkRun(paymentOptions);
            debugPrint(response.toString());
          } on PlatformException {
            debugPrint("PlatformException");
          }
        },
        label: const Text('购买'),
      ),
      body: ListView(
        children: [
          // 产品图片
          Container(
            height: 300,
            color: Colors.grey,
          ),

          // 产品标题
          const Padding(
            padding: EdgeInsets.symmetric(horizontal: 8.0, vertical: 10.0),
            child: Text(
              '数字印花纯棉果阿风格热带男式衬衫,半袖,魔法棉',
              style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18.0),
            ),
          ),

          // 产品描述
          const Padding(
            padding: EdgeInsets.symmetric(horizontal: 8.0),
            child: Text(
                'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla eget risus lacus. Curabitur a turpis eros. Cras congue dui nec magna aliquet, quis vehicula libero egestas. Nullam at sollicitudin sem. Sed a augue dictum, tempor mi quis, feugiat neque. Aliquam egestas lectus orci, et rhoncus augue suscipit quis. Ut quis porta magna.'),
          ),

          // 产品价格
          const Padding(
            padding: EdgeInsets.all(16.0),
            child: Text(
              '\$100',
              style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.w500),
            ),
          ),
          const SizedBox(
            height: 30.0,
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用ecommpay_flutter_plugin进行支付的示例代码。请注意,实际使用时需要根据eCommPay提供的文档和API密钥进行配置。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加ecommpay_flutter_plugin依赖:

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

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

2. 配置插件

在你的Flutter应用中,你需要在适当的位置(例如main.dart或专门的支付页面)配置和初始化eCommPay插件。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PaymentScreen(),
    );
  }
}

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

class _PaymentScreenState extends State<PaymentScreen> {
  final EcommpayFlutterPlugin _ecommpay = EcommpayFlutterPlugin();

  @override
  void initState() {
    super.initState();
    // 初始化插件,通常这里需要传递你的API密钥和其他配置
    _initializePlugin();
  }

  Future<void> _initializePlugin() async {
    try {
      // 假设你的API密钥和其他配置信息如下
      String apiKey = "your_api_key_here"; // 替换为你的实际API密钥
      String merchantId = "your_merchant_id_here"; // 替换为你的实际商户ID
      String publicKey = "your_public_key_here"; // 替换为你的实际公钥

      // 初始化eCommPay插件
      await _ecommpay.initialize(
        apiKey: apiKey,
        merchantId: merchantId,
        publicKey: publicKey,
      );
    } catch (e) {
      print("初始化插件失败: $e");
    }
  }

  void _startPayment() async {
    try {
      // 构建支付请求参数,这里需要根据eCommPay的文档填写实际参数
      Map<String, dynamic> paymentData = {
        "amount": 100.0, // 支付金额
        "currency": "USD", // 货币类型
        "paymentMethod": "card", // 支付方式,例如信用卡
        "returnUrl": "https://yourwebsite.com/return", // 支付完成后的返回URL
        // 其他必要的支付参数...
      };

      // 发起支付请求
      var response = await _ecommpay.startPayment(paymentData);
      print("支付响应: $response");

      // 根据响应处理支付结果
      if (response["status"] == "success") {
        // 支付成功处理逻辑
      } else {
        // 支付失败处理逻辑
      }
    } catch (e) {
      print("支付失败: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('支付示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _startPayment,
          child: Text('发起支付'),
        ),
      ),
    );
  }
}

3. 处理支付回调

在实际应用中,支付完成后通常会有回调处理,例如通知用户支付结果或更新订单状态。这部分逻辑需要根据eCommPay提供的回调文档进行实现,通常涉及服务器端代码来处理支付通知。

注意事项

  1. 安全性:确保你的API密钥和其他敏感信息不会泄露。
  2. 测试环境:在正式集成之前,请先在eCommPay提供的测试环境中进行测试。
  3. 文档参考:详细集成步骤和参数说明请参考eCommPay官方文档。

以上代码提供了一个基本的集成示例,具体实现时请根据eCommPay的最新文档和API进行调整。

回到顶部