Flutter支付集成插件bkash的使用
Flutter支付集成插件bkash的使用
这是由Codeboxr团队修复的flutter_bkash包。所有功劳归于Codeboxr团队。
bKash(BD)移动金融支付网关Flutter插件
这是为<bkash>BD支付网关</bkash>创建的一个Flutter插件。此插件可以在Flutter项目中使用。我们在一个项目开发过程中创建了这个插件,并认为将其发布给所有人会有所帮助。
⚠️请注意,您必须联系<bkash>销售团队</bkash>以获取任何开发或生产访问密钥或令牌。我们不提供测试帐户或访问密钥,也不会因此类请求与我们联系。
如何使用
依赖它,在终端运行以下命令:
$ flutter pub add bkash
这将在你的项目的pubspec.yaml
文件中添加一行(并隐式运行flutter pub get
):
dependencies:
bkash: ^0.2.0
或者,您的编辑器可能支持flutter pub get
。查阅您的编辑器文档以了解更多信息。导入它,现在在您的Dart代码中可以使用:
import 'package:bkash/bkash.dart';
功能
- 使用bkash进行无协议支付
- 创建bkash协议以便将来支付
- 使用bkash协议进行支付
使用
官方API文档和演示链接:
初始化bkash实例
沙箱环境
final Bkash = Bkash(logResponse: true);
如果您希望查看请求日志,请在创建bkash包实例时将`logResponse`设置为`true`。
生产环境
final Bkash = Bkash(
credentials: BkashCredentials(
username: "app_username",
password: "app_password",
appKey: "app_key",
appSecret: "app_secret",
isSandbox: false,
),
);
请确保用您自己的bkash沙箱或生产凭证替换提供的凭证,具体取决于您的开发环境。
无协议支付
要进行无协议支付,使用pay
方法:
请求
final result = await Bkash.pay(
context: context, // BuildContext context
amount: 100.0, // 金额作为double
merchantInvoiceNumber: "invoice123",
);
响应
BkashPaymentResponse(
trxId: AFI60BAC94,
payerReference: "",
paymentId: TR0011fd4uZMS1687062024354,
customerMsisdn: 01877722345,
merchantInvoiceNumber: tranId,
_executeTime: 2023-06-18T10:22:31:623 GMT+0600
)
创建协议
要创建新的协议,使用createAgreement
方法:
请求
final result = await Bkash.createAgreement(context: context);
响应
BkashAgreementResponse(
payerReference: "",
paymentId: TR0000RCHQGmX1687063332607,
customerMsisdn: 01877722345,
agreementId: TokenizedMerchant02P1AIJ7G1687063381235,
_executeTime: 2023-06-18T10:43:01:235 GMT+0600
)
使用协议支付
要使用现有协议进行支付,使用payWithAgreement
方法:
请求
final result = await Bkash.payWithAgreement(
context: context, // BuildContext context
amount: 100.0, // 类型为double
agreementId: "agreement123",
merchantInvoiceNumber: "invoice123",
);
响应
BkashPaymentResponse(
trxId: AFI60BAC94,
payerReference: "",
paymentId: TR0011fd4uZMS1687062024354,
customerMsisdn: 01877722345,
merchantInvoiceNumber: tranId,
_executeTime: 2023-06-18T10:22:31:623 GMT+0600
)
错误处理
上述提到的方法可能会抛出BkashFailure
异常。您可以使用try-catch块捕获并处理异常:
try {
// 进行支付或创建协议
} on BkashFailure catch (e) {
// 处理错误
print(e.message);
}
更多关于Flutter支付集成插件bkash的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件bkash的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中集成支付插件,特别是针对特定地区或服务的插件(如Bkash),通常需要遵循该服务提供的SDK或API指南。由于Bkash没有官方的Flutter插件,你可能需要利用他们提供的原生(Android/iOS)SDK,并通过MethodChannel与Flutter进行通信。
以下是一个简化的示例,展示了如何通过MethodChannel在Flutter中调用原生Bkash支付SDK(假设你已经有了Bkash的SDK集成指南)。注意,这只是一个概念性的示例,实际代码可能需要根据Bkash的SDK文档进行调整。
1. 设置Flutter项目
首先,创建一个新的Flutter项目(如果还没有的话):
flutter create bkash_payment_demo
cd bkash_payment_demo
2. 在Android端集成Bkash SDK
在android/app/src/main/AndroidManifest.xml
中添加必要的权限和Bkash SDK的配置(假设Bkash SDK要求这些)。
然后,在android/app/build.gradle
中添加Bkash SDK的依赖:
dependencies {
implementation 'com.bkash:sdk:x.y.z' // 替换为实际的Bkash SDK版本
}
创建一个新的Kotlin/Java类来处理Bkash支付逻辑,例如BkashPaymentHandler.kt
(Kotlin)或BkashPaymentHandler.java
(Java):
BkashPaymentHandler.kt
package com.example.bkash_payment_demo
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import androidx.annotation.NonNull
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
class BkashPaymentHandler(private val activity: Activity) : MethodCallHandler, FlutterPlugin, ActivityAware {
private val channel = MethodChannel(activity.flutterEngine?.dartExecutor?.binaryMessenger, "bkash_payment")
override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
if (call.method == "initPayment") {
// 假设initPayment方法需要一些参数,如amount, merchantId等
val amount = call.argument<Double>("amount")!!
val merchantId = call.argument<String>("merchantId")!!
// 调用Bkash SDK的初始化支付方法
initBkashPayment(amount, merchantId, result)
} else {
result.notImplemented()
}
}
private fun initBkashPayment(amount: Double, merchantId: String, result: Result) {
// 这里假设Bkash有一个initPayment方法,你需要根据实际的SDK文档来调整
BkashSDK.initPayment(activity, amount, merchantId) { status, data ->
if (status == PaymentStatus.SUCCESS) {
result.success(data)
} else {
result.error("PAYMENT_FAILED", "Payment failed with status: $status", null)
}
}
}
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPluginBinding) {
channel.setMethodCallHandler(this)
}
override fun onDetachedFromEngine(@NonNull binding: FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}
override fun onAttachedToActivity(binding: ActivityPluginBinding) {
this.activity = binding.activity
}
override fun onDetachedFromActivityForConfigChanges() {
// No-op
}
override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
this.activity = binding.activity
}
override fun onDetachedFromActivity() {
this.activity = null
}
}
3. 在iOS端集成Bkash SDK(假设有)
由于Bkash可能没有iOS SDK或者集成方式可能与Android不同,你需要参考Bkash的官方文档来完成iOS端的集成。这通常涉及在ios/Runner
项目中添加依赖、配置Info.plist、创建桥接Objective-C/Swift类,并通过MethodChannel与Flutter通信。
4. 在Flutter中调用原生方法
最后,在你的Flutter代码中调用这个原生方法。例如,在lib/main.dart
中:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
static const platform = MethodChannel('bkash_payment');
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Bkash Payment Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _initPayment,
child: Text('Initiate Payment'),
),
),
),
);
}
Future<void> _initPayment() async {
try {
final double amount = 100.0;
final String merchantId = 'your_merchant_id';
final Map<String, dynamic> result = await platform.invokeMethod('initPayment', <String, dynamic>{
'amount': amount,
'merchantId': merchantId,
});
print('Payment result: $result');
} on PlatformException catch (e) {
print("Failed to initiate payment: '${e.message}'.");
}
}
}
注意
- 上面的代码是一个简化的示例,实际实现可能需要根据Bkash SDK的具体要求进行调整。
- 确保你已经阅读并遵循了Bkash SDK的官方集成指南。
- 如果Bkash没有提供原生SDK,你可能需要通过其API端点使用HTTP请求来处理支付流程,这将涉及更多的网络编程和安全性考虑。