Flutter支付集成插件paytm_allinonesdk的使用

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

Flutter支付集成插件paytm_allinonesdk的使用

paytm_allinonesdk 是一个用于在Flutter应用程序中集成Paytm支付网关的插件。它简化了开发者将Paytm支付功能添加到其应用的过程。本文档将引导您完成如何在Flutter项目中使用 paytm_allinonesdk 插件来实现支付功能。

1. 使用此包作为库

1.1 依赖于它

首先,在您的项目的 pubspec.yaml 文件中添加对 paytm_allinonesdk 的依赖:

dependencies:
  paytm_allinonesdk: ^1.2.7

1.2 安装它

安装包可以通过命令行执行以下命令:

flutter pub get

或者,如果您的编辑器支持 flutter pub get,可以直接通过编辑器进行操作。请查阅您的编辑器文档以获取更多信息。

1.3 导入它

接下来,在Dart代码中导入 paytm_allinonesdk 包:

import 'package:paytm_allinonesdk/paytm_allinonesdk.dart';

2. 调用交易方法

为了发起支付请求,您可以使用 AllInOneSdk.startTransaction 方法。下面是一个完整的示例,展示了如何构建一个包含所有必要参数的支付界面,并处理支付结果。

import 'package:flutter/material.dart';
import 'package:paytm_allinonesdk/paytm_allinonesdk.dart';
import './edit_text.dart'; // 假设这是自定义文本输入组件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(brightness: Brightness.dark),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Paytm Payment'),
        ),
        body: HomeScreen(),
      ),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String mid = "", orderId = "", amount = "", txnToken = "";
  String result = "";
  bool isStaging = false;
  bool isApiCallInProgress = false;
  String callbackUrl = "";
  bool restrictAppInvoke = false;
  bool enableAssist = true;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Card(
      child: SingleChildScrollView(
        child: Container(
          margin: EdgeInsets.all(8),
          child: Column(
            children: <Widget>[
              EditText('Merchant ID', mid, onChange: (val) => mid = val),
              EditText('Order ID', orderId, onChange: (val) => orderId = val),
              EditText('Amount', amount, onChange: (val) => amount = val),
              EditText('Transaction Token', txnToken, onChange: (val) => txnToken = val),
              EditText('Callback URL', callbackUrl, onChange: (val) => callbackUrl = val),
              Row(
                children: <Widget>[
                  Checkbox(
                    activeColor: Colors.lightBlue,
                    value: isStaging,
                    onChanged: (bool? val) {
                      setState(() {
                        isStaging = val!;
                      });
                    },
                  ),
                  Text("Staging"),
                ],
              ),
              Row(
                children: <Widget>[
                  Checkbox(
                    activeColor: Colors.lightBlue,
                    value: restrictAppInvoke,
                    onChanged: (bool? val) {
                      setState(() {
                        restrictAppInvoke = val!;
                      });
                    },
                  ),
                  Text("Restrict AppInvoke"),
                ],
              ),
              Container(
                margin: EdgeInsets.all(16),
                child: ElevatedButton(
                  onPressed: isApiCallInProgress ? null : () {
                    _startTransaction();
                  },
                  child: Text('Start Transaction'),
                ),
              ),
              Container(
                alignment: Alignment.bottomLeft,
                child: Text("Message : "),
              ),
              Container(
                child: Text(result),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> _startTransaction() async {
    if (txnToken.isEmpty) {
      return;
    }
    var sendMap = <String, dynamic>{
      "mid": mid,
      "orderId": orderId,
      "amount": amount,
      "txnToken": txnToken,
      "callbackUrl": callbackUrl,
      "isStaging": isStaging,
      "restrictAppInvoke": restrictAppInvoke,
      "enableAssist": enableAssist
    };
    print(sendMap);
    try {
      setState(() {
        isApiCallInProgress = true;
      });

      var response = AllInOneSdk.startTransaction(
        mid, 
        orderId, 
        amount, 
        txnToken, 
        callbackUrl, 
        isStaging, 
        restrictAppInvoke, 
        enableAssist
      );

      response.then((value) {
        print(value);
        setState(() {
          result = value.toString();
          isApiCallInProgress = false;
        });
      }).catchError((onError) {
        if (onError is PlatformException) {
          setState(() {
            result = onError.message.toString() + " \n  " + onError.details.toString();
            isApiCallInProgress = false;
          });
        } else {
          setState(() {
            result = onError.toString();
            isApiCallInProgress = false;
          });
        }
      });
    } catch (err) {
      setState(() {
        result = err.toString();
        isApiCallInProgress = false;
      });
    }
  }
}

请注意:

  • EditText 组件是假设存在的自定义文本输入框,请根据实际情况替换或创建。
  • 在实际使用时,mid(商户ID)、orderId(订单ID)、amount(金额)、txnToken(交易令牌)和 callbackUrl(回调URL)需要从后端服务获取。
  • isStaging 标志表示是否使用测试环境,默认为 false 表示生产环境;restrictAppInvoke 控制是否限制调起Paytm应用进行支付,默认为 false
  • enableAssist 参数用来决定是否启用辅助模式,默认为 true

以上就是关于如何在Flutter中集成 paytm_allinonesdk 插件并实现支付功能的基本指南。希望这对您有所帮助!


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

1 回复

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


当然,以下是一个关于如何在Flutter项目中集成和使用paytm_allinonesdk插件的示例代码。这个插件允许你使用Paytm进行支付集成。

前提条件

  1. 确保你已经设置好Flutter开发环境。
  2. 确保你已经注册了Paytm开发者账号,并获取了必要的API密钥(MID, MERCHANT_KEY, etc.)。

步骤

1. 添加依赖

在你的pubspec.yaml文件中添加paytm_allinonesdk依赖:

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

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

2. 配置Android项目

android/app/src/main/AndroidManifest.xml中添加必要的权限:

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

然后在android/app/build.gradle文件中添加以下内容以启用ProGuard(如果你需要):

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

并在proguard-rules.pro文件中添加以下规则(如果需要):

-keep class com.paytm.** { *; }
-dontwarn com.paytm.**

3. 配置iOS项目

如果你也需要在iOS上集成,你需要在Info.plist中添加必要的权限(例如网络访问权限)。

4. 初始化Paytm SDK

在你的Flutter代码中,你需要初始化Paytm SDK并设置必要的参数。例如,在一个Dart文件中:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Paytm Integration Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              _initiatePaytmPayment();
            },
            child: Text('Pay with Paytm'),
          ),
        ),
      ),
    );
  }

  void _initiatePaytmPayment() async {
    // Paytm配置参数
    Map<String, dynamic> paytmConfig = {
      "MID": "your_merchant_id",           // 替换为你的MID
      "CHANNEL_ID": "WAP",
      "INDUSTRY_TYPE_ID": "Retail",
      "WEBSITE": "your_website",           // 替换为你的网站名
      "APP_ID": "your_app_id",             // 替换为你的APP ID(如果适用)
      "MERCHANT_KEY": "your_merchant_key", // 替换为你的MERCHANT_KEY
      "THEME": {"color": "#1A73E8"},
      "CHECK_SUM": "",  // 这个值在调用支付接口前需要通过Paytm提供的算法生成
      "TXN_ID": "unique_transaction_id",   // 每次交易唯一的交易ID
      "ORDER_ID": "unique_order_id",       // 每次订单唯一的订单ID
      "CUST_ID": "customer_id",            // 客户的唯一标识(可选)
      "MOBILE_NO": "customer_mobile_no",   // 客户的手机号(可选)
      "EMAIL": "customer_email",           // 客户的邮箱(可选)
      "AMOUNT": "100.00",                  // 交易金额(单位:元)
      "CALLBACK_URL": "your_callback_url"  // 回调URL(可选)
    };

    // 调用Paytm SDK进行支付
    try {
      bool result = await PaytmAllinoneSdk.startTransaction(paytmConfig);
      if (result) {
        print("Payment initiated successfully.");
      } else {
        print("Payment initiation failed.");
      }
    } catch (e) {
      print("Error initiating payment: $e");
    }
  }
}

注意

  1. CHECK_SUM 字段需要按照Paytm提供的算法生成,具体算法请参考Paytm官方文档。
  2. TXN_IDORDER_ID 应该是唯一的,以防止重复支付。
  3. 示例代码中的字段值需要替换为你从Paytm开发者后台获取的实际值。

调试和测试

在真实环境中测试支付功能时,请确保使用有效的Paytm账号和银行卡信息。此外,使用沙箱环境(如果Paytm提供)进行初步测试,以避免实际支付和资金损失。

以上代码展示了如何在Flutter中集成Paytm支付插件并进行支付操作。实际使用中,请根据Paytm的官方文档和API进行具体配置和参数调整。

回到顶部