flutter_bkash
Flutter-এ bKash পেমেন্ট গেটওয়ে ইন্টিগ্রেশন সহজ করার জন্য ওপেন সোর্স প্যাকেজ — pay, agreement create, এবং pay with agreement তিনটি মোড সাপোর্ট করে।
সংক্ষেপ
bKash বাংলাদেশের সবচেয়ে বড় মোবাইল ফিনান্সিয়াল সার্ভিস — ৬৫ মিলিয়নেরও বেশি রেজিস্টার্ড অ্যাকাউন্ট। Flutter ডেভেলপারদের জন্য bKash ইন্টিগ্রেশন মানে ছিল — undocumented API, ম্যানুয়াল টোকেন রিফ্রেশ, আর প্রতি প্রজেক্টে একই WebView ফ্লো বারবার লেখা।
flutter_bkash এই সব সরিয়ে দিয়েছে। pub.dev-এ প্রকাশিত BSD-লাইসেন্সড প্যাকেজ, যা bKash ইন্টিগ্রেশনকে একটাই ফাংশন কলে নামিয়ে আনে।
সমস্যাটা কী ছিল
Codeboxr-এ কাজ করার সময় bKash সহ অন্যান্য পেমেন্ট গেটওয়ে ইন্টিগ্রেট করতে হতো। প্রতিটি প্রজেক্টে একই কোড কপি-পেস্ট হচ্ছিল — টোকেন হ্যান্ডশেক, WebView ম্যানেজমেন্ট, কলব্যাক হ্যান্ডলিং।
বাংলাদেশে কোনো কমিউনিটি প্যাকেজ ছিল না। প্রতিটি Flutter ডেভেলপার আলাদাভাবে একই সমস্যা সমাধান করছিল। আমরা একটি ক্লায়েন্ট প্রজেক্টের জন্য এটি তৈরি করে সবার জন্য রিলিজ করার সিদ্ধান্ত নিলাম।
আমার ভূমিকা
Co-maintainer ABDULLAH AL MASUM-এর সাথে flutter_bkash তৈরি করেছি Codeboxr-এ কাজ করার সময়। Public API ডিজাইন, মূল implementation, এবং pub.dev-এ প্রকাশ — সবই আমরা করেছি।
ব্যবহার
import 'package:flutter_bkash/flutter_bkash.dart';
final flutterBkash = FlutterBkash(
credentials: BkashCredentials(
username: "app_username",
password: "app_password",
appKey: "app_key",
appSecret: "app_secret",
isSandbox: false,
),
);
// এক লাইনে পেমেন্ট
final result = await flutterBkash.pay(
context: context,
amount: 500,
merchantInvoiceNumber: "INV-001",
);প্যাকেজটি তিনটি bKash পেমেন্ট মোড সাপোর্ট করে:
- pay — সরাসরি পেমেন্ট
- createAgreement — ভবিষ্যৎ পেমেন্টের জন্য টোকেনাইজেশন
- payWithAgreement — পূর্বে তৈরি agreement দিয়ে পেমেন্ট
কারিগরি সিদ্ধান্ত
WebView পেমেন্ট ফ্লো
bKash-এর পেমেন্ট UI ওয়েব-ভিত্তিক। প্যাকেজ একটি managed WebView চালু করে, redirect callback ইন্টারসেপ্ট করে, পেমেন্ট রেজাল্ট বের করে, এবং কোনো memory leak ছাড়াই WebView বন্ধ করে।
Token Management
bKash short-lived token ব্যবহার করে। প্যাকেজ এটি স্বয়ংক্রিয়ভাবে রিফ্রেশ করে — ব্যবহারকারীকে এই নিয়ে ভাবতে হয় না।
Sandbox vs Production
isSandbox flag দিয়ে সম্পূর্ণ environment আলাদা হয় — base URL, token endpoint, সব কিছু।
চ্যালেঞ্জ ও সমাধান
চ্যালেঞ্জ: কিছু Android ডিভাইসে OEM ব্রাউজার bKash-এর success redirect গ্রাস করে ফেলে।
সমাধান: JavaScript bridge যোগ করা হয়েছে যা DOM লেভেলে payment completion event ধরে — URL redirect না পেলেও কাজ করে।
ফলাফল
- pub.dev/packages/flutter_bkash-এ প্রকাশিত
- GitHub-এ ওপেন সোর্স
- লাইসেন্স: BSD 3-Clause
- বাংলাদেশে e-commerce, fintech, ও marketplace Flutter অ্যাপে ব্যবহৃত
- প্রতিটি টিমের ২-৫ দিনের integration সময় বাঁচায়