Flutter支付网关插件nagad_payment_gateway的使用
Flutter支付网关插件nagad_payment_gateway的使用
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
包含以下信息:
- merchantId
- orderId
- paymentRefId
- amount
- clientMobileNo
- merchantMobileNo
- orderDateTime
- issuerPaymentDateTime
- issuerPaymentRefNo
- additionalMerchantInfo
- status
- statusCode
- cancelIssuerDateTime
- cancelIssuerRefNo
- 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
更多关于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'),
),
),
);
}
}
注意事项
- 参数替换:在上面的代码中,
merchantId
,amount
,transactionId
,returnUrl
, 和notifyUrl
需要替换为你实际使用的值。 - 错误处理:在实际应用中,你可能需要更详细的错误处理逻辑。
- 支付回调:支付成功后,通常会有支付结果的回调,你可能需要在你的服务器端处理这些回调,并更新订单状态。
这个示例展示了如何使用nagad_payment_gateway
插件在Flutter应用中发起支付请求。具体的实现细节可能会根据插件的版本和API的变化而有所不同,请参考插件的官方文档以获取最新的信息和API参考。