Flutter支付集成插件bkash的使用

Flutter支付集成插件bkash的使用

这是由Codeboxr团队修复的flutter_bkash包。所有功劳归于Codeboxr团队。

bKash(BD)移动金融支付网关Flutter插件

Pub License PRs Welcome Maintenance Open Source Love svg1

这是为<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

1 回复

更多关于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请求来处理支付流程,这将涉及更多的网络编程和安全性考虑。
回到顶部