Flutter支付网关插件nagad_payment_gateway的使用

Flutter支付网关插件nagad_payment_gateway的使用


Nagad Logo

Nagad在线支付API集成Flutter包

这是一个Flutter包,适用于希望将Nagad提供的新在线支付方式整合到其应用中的商家和服务提供商。

注意:请通过联系Nagad获取您的商户凭证。

需要由Nagad提供的凭证

final merchantID = "特定商户ID"
final merchantPrivateKey = "商户私钥"
final pgPublicKey = "Nagad支付网关公钥"

初始化Nagad实例

创建一个Credentials实例并将其提供给Nagad实例:

Nagad nagad = Nagad(
      credentials: const Credentials(
          merchantID: merchantID,
          merchantPrivateKey: merchantPrivateKey,
          pgPublicKey: merchantPrivateKey,
          isSandbox: true)); // 切换为false以用于生产环境

注意:请确保替换提供的凭证为您的Nagad沙盒或生产凭证。

设置额外的商户信息

额外商户信息字段 长度 描述
serviceName 25 商户提供的服务名称
serviceLogoURL 1~1024 公共可访问的logo URL
additionalFieldNameEN 20 用于EN语言的附加字段名
additionalFieldNameBN 20 用于BN语言的附加字段名
additionalFieldValue 20 英文的附加字段值
Map<String, dynamic> additionalMerchantInfo = {
        "serviceName" : "T恤",
        "serviceLogoURL" : "tinyurl.com/sampleLogoUrl",
        "additionalFieldNameEN" : "颜色",
        "additionalFieldNameBN" : "রং",
        "additionalFieldValue" : "白色"
    };

nagad.setAdditionalMerchantInfo(additionalMerchantInfo);

N.B: additionalMerchantInfo必须是Map<String, dynamic>类型。额外的商户信息可以是任何东西,并将在后续使用中保存。然而,只有这些字段会显示在支付页面上。

普通支付

要进行普通商户支付,请使用pay方法:

请求

final nagadResponse = await nagad.regularPayment(context, amount: 10.25, orderId: orderId);

参数

  • amount: 支付金额。建议使用double类型。
  • orderID: 唯一标识符,用于订单支付。您可以使用当前的millisecondsSinceEpoch来保证唯一性。
DateTime now = DateTime.now();
String orderId = 'order${now.millisecondsSinceEpoch}';

响应

nagadResponse包含以下信息:

  1. merchantId
  2. orderId
  3. paymentRefId
  4. amount
  5. clientMobileNo
  6. merchantMobileNo
  7. orderDateTime
  8. issuerPaymentDateTime
  9. issuerPaymentRefNo
  10. additionalMerchantInfo
  11. status
  12. statusCode
  13. cancelIssuerDateTime
  14. cancelIssuerRefNo
  15. serviceType

N.B: 如果需要,请将所需的信息保存到您的数据库中。

许可证

nagad_payment_gateway 包的许可证是 GNU通用公共许可证(GPL)版本3.0

©2024


完整示例Demo

import 'package:example/pg_response.dart';
import 'package:flutter/material.dart';
import 'package:nagad_payment_gateway/nagad_payment_gateway.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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> {
  Nagad nagad = Nagad(
      credentials: const NagadCredentials(
          merchantID: '683002007104225',
          merchantPrivateKey:
          'MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCJakyLqojWTDAVUdNJLvuXhROV+LXymqnukBrmiWwTYnJYm9r5cKHj1hYQRhU5eiy6NmFVJqJtwpxyyDSCWSoSmIQMoO2KjYyB5cDajRF45v1GmSeyiIn0hl55qM8ohJGjXQVPfXiqEB5c5REJ8Toy83gzGE3ApmLipoegnwMkewsTNDbe5xZdxN1qfKiRiCL720FtQfIwPDp9ZqbG2OQbdyZUB8I08irKJ0x/psM4SjXasglHBK5G1DX7BmwcB/PRbC0cHYy3pXDmLI8pZl1NehLzbav0Y4fP4MdnpQnfzZJdpaGVE0oI15lq+KZ0tbllNcS+/4MSwW+afvOw9bazAgMBAAECggEAIkenUsw3GKam9BqWh9I1p0Xmbeo+kYftznqai1pK4McVWW9//+wOJsU4edTR5KXK1KVOQKzDpnf/CU9SchYGPd9YScI3n/HR1HHZW2wHqM6O7na0hYA0UhDXLqhjDWuM3WEOOxdE67/bozbtujo4V4+PM8fjVaTsVDhQ60vfv9CnJJ7dLnhqcoovidOwZTHwG+pQtAwbX0ICgKSrc0elv8ZtfwlEvgIrtSiLAO1/CAf+uReUXyBCZhS4Xl7LroKZGiZ80/JE5mc67V/yImVKHBe0aZwgDHgtHh63/50/cAyuUfKyreAH0VLEwy54UCGramPQqYlIReMEbi6U4GC5AQKBgQDfDnHCH1rBvBWfkxPivl/yNKmENBkVikGWBwHNA3wVQ+xZ1Oqmjw3zuHY0xOH0GtK8l3Jy5dRL4DYlwB1qgd/Cxh0mmOv7/C3SviRk7W6FKqdpJLyaE/bqI9AmRCZBpX2PMje6Mm8QHp6+1QpPnN/SenOvoQg/WWYM1DNXUJsfMwKBgQCdtddE7A5IBvgZX2o9vTLZY/3KVuHgJm9dQNbfvtXw+IQfwssPqjrvoU6hPBWHbCZl6FCl2tRh/QfYR/N7H2PvRFfbbeWHw9+xwFP1pdgMug4cTAt4rkRJRLjEnZCNvSMVHrri+fAgpv296nOhwmY/qw5Smi9rMkRY6BoNCiEKgQKBgAaRnFQFLF0MNu7OHAXPaW/ukRdtmVeDDM9oQWtSMPNHXsx+crKY/+YvhnujWKwhphcbtqkfj5L0dWPDNpqOXJKV1wHt+vUexhKwus2mGF0flnKIPG2lLN5UU6rs0tuYDgyLhAyds5ub6zzfdUBG9Gh0ZrfDXETRUyoJjcGChC71AoGAfmSciL0SWQFU1qjUcXRvCzCK1h25WrYS7E6pppm/xia1ZOrtaLmKEEBbzvZjXqv7PhLoh3OQYJO0NM69QMCQi9JfAxnZKWx+m2tDHozyUIjQBDehve8UBRBRcCnDDwU015lQN9YNb23Fz+3VDB/LaF1D1kmBlUys3//r2OV0Q4ECgYBnpo6ZFmrHvV9IMIGjP7XIlVa1uiMCt41FVyINB9SJnamGGauW/pyENvEVh+ueuthSg37e/l0Xu0nm/XGqyKCqkAfBbL2Uj/j5FyDFrpF27PkANDo99CdqL5A4NQzZ69QRlCQ4wnNCq6GsYy2WEJyU2D+K8EBSQcwLsrI7QL7fvQ==',
          pgPublicKey:
          'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjBH1pFNSSRKPuMcNxmU5jZ1x8K9LPFM4XSu11m7uCfLUSE4SEjL30w3ockFvwAcuJffCUwtSpbjr34cSTD7EFG1Jqk9Gg0fQCKvPaU54jjMJoP2toR9fGmQV7y9fz31UVxSk97AqWZZLJBT2lmv76AgpVV0k0xtb/0VIv8pd/j6TIz9SFfsTQOugHkhyRzzhvZisiKzOAAWNX8RMpG+iqQi4p9W9VrmmiCfFDmLFnMrwhncnMsvlXB8QSJCq2irrx3HG0SJJCbS5+atz+E1iqO8QaPJ05snxv82Mf4NlZ4gZK0Pq/VvJ20lSkR+0nk+s/v3BgIyle78wjZP1vWLU4wIDAQAB',
          isSandbox: true));
  var error = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    Map<String, dynamic> additionalMerchantInfo = {
      'serviceName': '品牌',
      'serviceLogoURL':
      'https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png',
      'additionalFieldNameEN': '类型',
      'additionalFieldNameBN': 'টাইপ',
      'additionalFieldValue': '支付',
    };
    nagad.setAdditionalMerchantInfo(additionalMerchantInfo);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              child: const Text('进行支付'),
              onPressed: () async {
                error = '';

                DateTime now = DateTime.now();
                String orderId = 'order${now.millisecondsSinceEpoch}';

                try {
                  final nagadResponse = await nagad.regularPayment(context, amount: 10.25, orderId: orderId);
                  Navigator.push(
                      context,
                      MaterialPageRoute(
                          builder: (context) => PGResponse(
                              nagadResponse: nagadResponse)));
                } catch (e) {
                  print(e);
                  setState(() {
                    error = e.toString();
                  });
                }
              },
            ),
            const SizedBox(
              height: 20,
            ),
            Text(error)
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用nagad_payment_gateway插件的示例代码。假设你已经将这个插件添加到了你的pubspec.yaml文件中,并且已经运行了flutter pub get

1. 添加依赖

首先,确保在你的pubspec.yaml文件中添加了nagad_payment_gateway依赖:

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

2. 导入插件

在你的Dart文件中导入插件:

import 'package:nagad_payment_gateway/nagad_payment_gateway.dart';

3. 初始化并使用插件

以下是一个简单的示例,展示如何初始化并使用nagad_payment_gateway插件进行支付操作。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Nagad Payment Gateway Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PaymentScreen(),
    );
  }
}

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

class _PaymentScreenState extends State<PaymentScreen> {
  final NagadPaymentGateway _nagadPaymentGateway = NagadPaymentGateway();

  void _initiatePayment() async {
    try {
      // 替换为实际的支付参数
      String merchantId = 'your_merchant_id';
      String amount = '100'; // 支付金额
      String transactionId = 'unique_transaction_id'; // 交易ID
      String returnUrl = 'your_return_url'; // 返回URL
      String notifyUrl = 'your_notify_url'; // 通知URL

      // 发起支付请求
      var response = await _nagadPaymentGateway.initiatePayment(
        merchantId: merchantId,
        amount: amount,
        transactionId: transactionId,
        returnUrl: returnUrl,
        notifyUrl: notifyUrl,
      );

      // 处理支付响应
      if (response.isSuccess) {
        // 支付成功处理逻辑
        print('Payment successful!');
      } else {
        // 支付失败处理逻辑
        print('Payment failed: ${response.errorMessage}');
      }
    } catch (e) {
      // 异常处理
      print('Error initiating payment: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Nagad Payment Gateway Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _initiatePayment,
          child: Text('Initiate Payment'),
        ),
      ),
    );
  }
}

注意事项

  1. 参数替换:在上面的代码中,merchantId, amount, transactionId, returnUrl, 和 notifyUrl 需要替换为你实际使用的值。
  2. 错误处理:在实际应用中,你可能需要更详细的错误处理逻辑。
  3. 支付回调:支付成功后,通常会有支付结果的回调,你可能需要在你的服务器端处理这些回调,并更新订单状态。

这个示例展示了如何使用nagad_payment_gateway插件在Flutter应用中发起支付请求。具体的实现细节可能会根据插件的版本和API的变化而有所不同,请参考插件的官方文档以获取最新的信息和API参考。

回到顶部