Flutter支付集成插件flutter_pinelabs的使用
Flutter支付集成插件flutter_pinelabs的使用
本项目提供了访问Pinelabs API的接口。通过使用Pinelabs设备的Android实现,而不是混合应用程序方法。这是一个诚实的尝试,为访问Pinelabs API提供一个简单且易于使用的界面。
Pinelabs请求和响应
doTransaction
如Pinelabs所述:
此API将在计费应用完成产品选择并准备接受客户付款时调用。计费应用会在其应用中添加所有必要的支付选项,并调用此API,例如销售、预付卡兑换等。
此API还可用于加载、激活、撤销交易等。参考交易类型以获取支持的所有交易列表。
此API采用以下参数:
transactionType
:可以是TransactionType枚举中的任何选项。目前支持现金、卡、UPI和BharatQR。billingRefNo
:这是由计费应用生成的参考编号。这用于标识交易。它可以为空。paymentAmount
:这是要支付的金额。这是计费应用所在货币中的金额。overrideHeader
:这是要在交易中使用的标头。这用于覆盖在初始化flutter_pinelabs时配置的标头。只有在初始化时提供了标头的情况下才能为空。mobileNumberForEChargeSlip
:可以发送电子收费单的手机号码。此功能必须由Pinelabs启用后才能使用。它可以为空。
// 实现doTransaction的片段
final response = await _flutterPinelabsPlugin.doTransaction(
transactionType: TransactionType.cash,
billingRefNo: '12345',
paymentAmount: 32.52,
overrideHeader: HeaderModel(
applicationId: 'your application id issued by pinelabs.',
methodId: '1001',
versionNo: '1.0',
userId: 'logged in user id. nullable',
),
mobileNumberForEChargeSlip: '9876543210',
);
/// 提供包含来自pinelabs设备响应的ResponseModel。
setState(() {
_responseMessage = response?.responseMsg ?? '';
});
在调用上述方法时,向设备发送的JSON格式请求将如下所示:
{
"Header": {
"ApplicationId": "your application id issued by pinelabs.",
"UserId": "1",
"MethodId": "1001",
"VersionNo": "1.0"
},
"Detail": {
"TransactionType": "4001",
"BillingRefNo": "12345",
"PaymentAmount": "32.52",
"MobileNumberForEChargeSlip": "9876543210"
}
}
getUpiStatus
此方法可用于查询给定UPI交易的状态。提供计费参考号和UPI支付的金额。
此API采用以下参数:
billingRefNo
:这是由计费应用生成的参考编号。这用于标识交易。它可以为空。paymentAmount
:这是要支付的金额。这是计费应用所在货币中的金额。overrideHeader
:这是要在交易中使用的标头。这用于覆盖在初始化flutter_pinelabs时配置的标头。只有在初始化时提供了标头的情况下才能为空。
// 实现getUpiStatus的片段
final response = await _flutterPinelabsPlugin.getUpiStatus(
paymentAmount: [Amount],
billingRefNo: [BillingNumber],
overrideHeader: HeaderModel(
applicationId: 'your application id issued by pinelabs.',
methodId: '1001',
versionNo: '1.0',
userId: 'logged in user id. nullable',
),
);
/// 提供包含来自pinelabs设备响应的ResponseModel。
setState(() {
_responseMessage = response?.responseMsg ?? '';
});
setBluetooth
此方法可用于在PineLab设备与PineLab充电基座之间建立蓝牙连接。
此API采用以下参数:
baseSerialNumber
:这是PineLab充电基座的序列号。overrideHeader
:这是要在交易中使用的标头。这用于覆盖在初始化flutter_pinelabs时配置的标头。只有在初始化时提供了标头的情况下才能为空。
// 实现setBluetooth的片段
final response = await _flutterPinelabsPlugin.setBluetooth(
baseSerialNumber: [BaseSerialNumber]
overrideHeader: HeaderModel(
applicationId: 'your application id issued by pinelabs.',
methodId: '1005',
versionNo: '1.0',
userId: 'logged in user id. nullable',
),
);
/// 提供包含来自pinelabs设备响应的ResponseModel。
setState(() {
_responseMessage = response?.responseMsg ?? '';
});
startScan
此方法可用于从连接到PineLab设备充电基座的扫描仪获取扫描数据。 需要在PineLab设备和充电基座之间建立蓝牙连接。
此API采用以下参数:
baseSerialNumber
:这是PineLab充电基座的序列号。overrideHeader
:这是要在交易中使用的标头。这用于覆盖在初始化flutter_pinelabs时配置的标头。只有在初始化时提供了标头的情况下才能为空。
// 实现startScan的片段
final response = await _flutterPinelabsPlugin.startScan(
baseSerialNumber: [BaseSerialNumber]
overrideHeader: HeaderModel(
applicationId: 'your application id issued by pinelabs.',
methodId: '1007',
versionNo: '1.0',
userId: 'logged in user id. nullable',
),
);
/// 提供包含来自pinelabs设备响应的ResponseModel。
setState(() {
_responseMessage = response?.scannedData ?? '';
});
stopScan
此方法可用于重置并停止扫描服务。 需要在PineLab设备和充电基座之间建立蓝牙连接。
此API采用以下参数:
baseSerialNumber
:这是PineLab充电基座的序列号。overrideHeader
:这是要在交易中使用的标头。这用于覆盖在初始化flutter_pinelabs时配置的标头。只有在初始化时提供了标头的情况下才能为空。
// 实现stopScan的片段
final response = await _flutterPinelabsPlugin.stopScan(
baseSerialNumber: [BaseSerialNumber]
overrideHeader: HeaderModel(
applicationId: 'your application id issued by pinelabs.',
methodId: '1012',
versionNo: '1.0',
userId: 'logged in user id. nullable',
),
);
/// 提供包含来自pinelabs设备响应的ResponseModel。
setState(() {
_responseMessage = response?.responseMsg ?? '';
});
sendRequest
sendRequest
方法用于直接向设备发送JSON请求而无需任何操作。您可以使用此方法传递JSON并从设备接收JSON响应。
// 实现sendRequest的片段
final response = await _flutterPinelabsPlugin.sendRequest(
requestJson: '{"Header":{"ApplicationId":"your application id issued by pinelabs.","UserId":"1","MethodId":"1001","VersionNo":"1.0"},"Detail":{"TransactionType":"4001","BillingRefNo":"12345","PaymentAmount":"32.52","MobileNumberForEChargeSlip":"9876543210"}}');
/// 提供包含来自pinelabs设备响应的ResponseModel。
setState(() {
_responseMessage = response["Response"]["ResponseMsg"];
});
printData
当计费应用想要在Plutus Smart设备上打印纸质收据时会调用此方法。
此方法采用2个参数:
overrideHeader
:此参数用于覆盖在初始化FlutterPinelabs时提供的标头。如果它是空的,则使用初始化时的标头。printRequest
:打印请求包含所有需要打印的数据。(当前仅测试了打印文本)
额外说明
设备超时时的失败响应:
{
"Header": {
"ApplicationId": "something",
"MethodId": "1001",
"UserId": "1",
"VersionNo": "1.0"
},
"Response": {
"AppVersion": "638",
"ParameterJson": "parameter",
"ResponseCode": 7,
"ResponseMsg": "Something went wrong!"
}
}
设备返回的失败响应(返回键时):
{
"Header": {
"ApplicationId": "something",
"MethodId": "1001",
"UserId": "1",
"VersionNo": "1.0"
},
"Response": {
"AppVersion": "638",
"ParameterJson": "parameter",
"ResponseCode": 7,
"ResponseMsg": "Card reading Error"
}
}
设备返回的成功响应:
{
"Detail": {
"AcquirerName": "ICICI BANK",
"AcquiringBankCode": "02",
"ApprovalCode": "00",
"AuthAmoutPaise": "9999000",
"BatchNumber": 4,
"BillingRefNo": "TXN12345678",
"CardEntryMode": "CARD_CHIP",
"CardNumber": "************abcd",
"CardType": "VISA",
"CardholderName": "Some Person",
"ExpiryDate": "XXXX",
"HostResponse": "APPROVED",
"InvoiceNumber": 1,
"LoyaltyPointsAwarded": 0,
"MerchantAddress": "JANAKPURI",
"MerchantCity": "NEW DELHI DEL ",
"MerchantId": " ",
"MerchantName": "LOVE COMMUNICATION",
"PlutusTransactionLogID": "4295187240",
"PlutusVersion": "Plutus v2.12 MT ICICI BANK",
"PosEntryMode": 2,
"PrintCardholderName": 1,
"Remark": "PROCESSED",
"RetrievalReferenceNumber": "000000000020",
"TerminalId": "30365626",
"TransactionDate": "06132022",
"TransactionTime": "150726",
"TransactionType": 4001
},
"Header": {
"ApplicationId": "something",
"MethodId": "1001",
"UserId": "1",
"VersionNo": "1.0"
},
"Response": {
"AppVersion": "638",
"ParameterJson": "parameter",
"ResponseCode": 0,
"ResponseMsg": "APPROVED"
}
}
更多关于Flutter支付集成插件flutter_pinelabs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件flutter_pinelabs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter应用中集成支付功能可以通过使用flutter_pinelabs
插件来实现。下面是一个示例代码,展示如何在Flutter项目中集成和使用flutter_pinelabs
插件。
步骤 1: 添加依赖
首先,你需要在pubspec.yaml
文件中添加flutter_pinelabs
依赖:
dependencies:
flutter:
sdk: flutter
flutter_pinelabs: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 配置Android和iOS
Android配置
在android/app/src/main/AndroidManifest.xml
中添加必要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 其他必要权限 -->
<application
... >
<!-- 其他配置 -->
</application>
</manifest>
你还需要在android/app/build.gradle
文件中添加必要的配置,比如ProGuard规则(如果需要)。
iOS配置
对于iOS,你可能需要在Info.plist
中添加一些必要的配置,具体取决于flutter_pinelabs
插件的要求。此外,确保你的Xcode项目配置正确,包括必要的Capabilities和Entitlements。
步骤 3: 使用插件进行支付
在你的Flutter代码中,你可以按照以下方式使用flutter_pinelabs
插件:
import 'package:flutter/material.dart';
import 'package:flutter_pinelabs/flutter_pinelabs.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Pinelabs Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _initiatePayment,
child: Text('Initiate Payment'),
),
),
),
);
}
Future<void> _initiatePayment() async {
try {
// 替换为实际的支付配置参数
final FlutterPinelabs flutterPinelabs = FlutterPinelabs(
merchantId: 'your_merchant_id', // 商户ID
merchantKey: 'your_merchant_key', // 商户密钥
environment: FlutterPinelabsEnvironment.TEST, // 测试或生产环境
);
final PaymentRequest paymentRequest = PaymentRequest(
amount: 100.0, // 支付金额
currencyCode: 'INR', // 货币代码
orderId: 'unique_order_id', // 订单ID
// 其他可选参数,如customerId, mobileNumber等
);
final PaymentResponse response = await flutterPinelabs.startPayment(paymentRequest);
if (response.status == PaymentStatus.SUCCESS) {
// 支付成功处理
print('Payment Successful: ${response.paymentData}');
} else {
// 支付失败处理
print('Payment Failed: ${response.errorMessage}');
}
} catch (e) {
// 错误处理
print('Error: $e');
}
}
}
注意事项
- 安全性:确保在生产环境中使用安全的商户ID和密钥,并且不要在客户端代码中硬编码这些敏感信息。
- 错误处理:在实际应用中,添加更详细的错误处理和用户反馈。
- 环境配置:在测试和生产环境中分别使用
FlutterPinelabsEnvironment.TEST
和FlutterPinelabsEnvironment.PRODUCTION
。
这个示例展示了如何使用flutter_pinelabs
插件在Flutter应用中发起支付请求,并处理支付响应。请根据你的具体需求调整代码中的参数和逻辑。