Naafi Pay

SMS Forwarder App & Auto Verify

পার্সোনাল bKash / Nagad / Rocket অ্যাকাউন্টে পেমেন্ট নিলে কোনো merchant API বা IPN পাওয়া যায় না। তাই NaafiPay একটি ছোট Android অ্যাপ ব্যবহার করে: যে সিমে পেমেন্টের SMS আসে, সেই ফোনে অ্যাপটি বসানো থাকে; অ্যাপ শুধু পেমেন্ট-সংক্রান্ত SMS আপনার NaafiPay অ্যাকাউন্টে পাঠায়। এরপর সার্ভার নিজেই অর্ডারের সাথে মিলিয়ে পেমেন্ট verify করে — কাস্টমারকে Transaction ID লিখতে হয় না।

দুইটি আলাদা অ্যাপ আছে

  • SMS Forwarder (প্রধান দরকার) — সোর্স কোড রিপোজিটরির android-app/ ফোল্ডারে। শুধু SMS পড়ে ও ফরওয়ার্ড করে; কোনো ওয়েবসাইট দেখায় না।
  • Dashboard app — শুধু মার্চেন্ট ড্যাশবোর্ড মোবাইল অ্যাপ আকারে। কনফিগ ফাইল capacitor.dashboard.config.ts। এটি লাইভ সাইটকেই লোড করে, তাই ওয়েবসাইট আপডেট করলে অ্যাপও সাথে সাথে আপডেট হয়ে যায় — নতুন APK বানানোর দরকার নেই। ভেতরে “View site” দিয়ে পুরো সাইটও দেখা যায়।
Tipপুরো সাইটের অ্যাপও আছে
একই বিল্ড ওয়ার্কফ্লোতে variant বাছাই করা যায়: full (পুরো সাইট) অথবা dashboard (শুধু ড্যাশবোর্ড)। পরে যখন দরকার, শুধু variant বদলে বিল্ড দিলেই হবে।

GitHub থেকে APK বানানো — ধাপে ধাপে

কোনো ল্যাপটপ, Android Studio বা ফোনের দরকার নেই। GitHub নিজেই ক্লাউডে বিল্ড করে দেবে।

  1. প্রজেক্ট GitHub-এ নিন। Lovable এডিটরের চ্যাট ইনপুটে + → GitHub → Connect project → GitHub-এ authorize → Create repository। এতে পুরো কোড আপনার GitHub-এ চলে আসবে।
  2. রিপোজিটরি খুলুন। github.com-এ লগইন করে আপনার নতুন রিপোজিটরিতে যান।
  3. উপরের মেনু থেকে “Actions” ট্যাবে চাপ দিন। প্রথমবার হলে “I understand my workflows, go ahead and enable them” বোতামে চাপ দিন।
  4. বাম পাশের লিস্টে ওয়ার্কফ্লো বেছে নিন:
    • Build SMS Forwarder APK — SMS অ্যাপের জন্য (আপনার মূল দরকার)।
    • Build Android APK — ড্যাশবোর্ড বা পুরো সাইটের অ্যাপের জন্য।
  5. ডানদিকে “Run workflow” বোতামে চাপ দিন। ড্যাশবোর্ড অ্যাপের ক্ষেত্রে ড্রপডাউনে dashboard বা full বেছে নিন, তারপর সবুজ “Run workflow”।
  6. ৮–১২ মিনিট অপেক্ষা করুন। লিস্টে নতুন একটি রান দেখাবে — হলুদ মানে চলছে, সবুজ টিক মানে হয়ে গেছে।
  7. রানটিতে ঢুকে একদম নিচে “Artifacts” সেকশনে naafipay-sms-forwarder-apk (বা naafipay-dashboard-apk) ফাইলে চাপ দিন — একটি ZIP ডাউনলোড হবে। ZIP খুললে ভেতরে .apk ফাইল।
  8. ফোনে ইনস্টল করুন। APK ফাইলটি ফোনে পাঠিয়ে ওপেন করুন। Android “Install unknown apps” অনুমতি চাইলে দিন (Settings → Apps → আপনার ব্রাউজার/ফাইল ম্যানেজার → Allow)।
WarningPlay Store-এ দিতে চাইলে
Play Store-এর জন্য signed AAB লাগে, যেটা আপনার নিজের keystore দিয়ে একবার বানাতে হবে। নিরাপত্তার কারণে keystore আপনার হাতেই থাকা উচিত।

ফোন পেয়ার করা

  1. ড্যাশবোর্ডে Devices পেজে যান → Add device → নাম দিন।
  2. একটি টোকেন দেখাবে (pgsms_…) — কপি করুন। এটি একবারই দেখা যায়।
  3. ফোনে অ্যাপ খুলুন → SMS পড়ার অনুমতি দিন → টোকেন পেস্ট করুন → Pair।
  4. Devices পেজে ডিভাইসটি “online” দেখাবে। এবার একটি টেস্ট পেমেন্ট করে দেখুন।

অ্যাপ যেই ঠিকানায় SMS পাঠায়:

Ingest endpoint
1POST https://naafipay.com/api/public/v1/sms/ingest
2Authorization: Bearer pgsms_xxxxxxxx
3Content-Type: application/json
4
5{ "sender": "bKash", "message": "You have received Tk 1500.07 ...", "received_at": "2026-09-20T05:20:00Z" }

Transaction ID ছাড়া ভেরিফিকেশন কীভাবে কাজ করে

সার্ভার এই ক্রমে মিলানোর চেষ্টা করে — আগেরটা না মিললে পরেরটা:

  1. ইউনিক পয়সা-ট্যাগ (প্রধান): প্রতিটি চেকআউটে অ্যামাউন্টের সাথে আলাদা পয়সা যোগ হয় — ১৫০০ → ১৫০০.০৭। তাই একই দিনে ১৫০০ টাকার একশো অর্ডার এলেও প্রতিটি আলাদা করে চেনা যায়।
  2. সেন্ডার নাম্বার + অ্যামাউন্ট।
  3. কাস্টমারের “আমি পেমেন্ট করেছি” + অ্যামাউন্ট।
  4. শুধু অ্যামাউন্ট — যদি ওই অ্যামাউন্টে একটিই পেন্ডিং অর্ডার থাকে।

সব মিল/অমিলের কারণ Auto Verify পেজের Diagnostics টেবিলে বাংলায় লেখা থাকে, আর না-মেলা SMS সেখান থেকেই এক চাপে অর্ডারের সাথে মিলিয়ে দেওয়া যায়।

চালু / বন্ধ

  • মার্চেন্ট: ড্যাশবোর্ড → Auto Verify → টগল অন/অফ, উইন্ডো ও পয়সা-ট্যাগ সেটিং।
  • প্ল্যাটফর্ম অ্যাডমিন: একই পেজের উপরে গ্লোবাল টগল — পুরো প্ল্যাটফর্মে বন্ধ করা যায়।

সমস্যা হলে কী দেখবেন

  • SMS আসছে না — Devices পেজে “last seen” দেখুন; ফোনে অ্যাপের ব্যাটারি অপটিমাইজেশন বন্ধ রাখুন।
  • অ্যামাউন্ট পড়া যায়নি — Diagnostics-এ “SMS থেকে টাকার অ্যামাউন্ট পড়া যায়নি”; SMS Data পেজে মূল টেক্সট দেখে আমাদের জানান।
  • একই অ্যামাউন্টে একাধিক অর্ডার — ইউনিক পয়সা-ট্যাগ চালু রাখুন।
  • উইন্ডো শেষ — ম্যাচিং উইন্ডো বাড়িয়ে দিন (ডিফল্ট ৪৫ মিনিট)।
Updated at: May 30, 2026