আপনার অ্যাপে পেমেন্ট কীভাবে যোগ করবেন: Checkout, সাবস্ক্রিপশন ও ওয়েবহুক
অ্যাপে পেমেন্ট যোগ করার সবচেয়ে সহজ উপায় Stripe: যদি শুধু একটি "Buy" বাটন লাগে এবং অর্ডার নিজে হাতে পূরণ করতে পারেন, তবে Payment Link ব্যবহার করুন; যদি আপনার অ্যাপের জানা দরকার কে পেমেন্ট করেছে এবং স্বয়ংক্রিয়ভাবে সাড়া দিতে হবে, তবে Stripe Checkout; আর পুনরাবৃত্ত বিলিংয়ের জন্য Checkout-এর subscription mode এবং Stripe-এর কাস্টমার পোর্টাল। সহজতম ক্ষেত্র ছাড়া বাকি সব ক্ষেত্রে আপনার একটি ওয়েবহুক লাগবেই — একটি সার্ভার এন্ডপয়েন্ট যা পেমেন্ট সফল হলে Stripe কল করে — আর লাইভ কী ব্যবহারের আগে সবকিছু Stripe-এর টেস্ট কী ও টেস্ট কার্ড দিয়ে পরীক্ষা করা উচিত।
এই গাইডে প্রতিটি বিকল্প, বেশিরভাগ টিউটোরিয়াল যে ওয়েবহুকের অংশটি এড়িয়ে যায় সেটি, এবং আসল টাকা নেওয়ার আগে কী যাচাই করবেন তা ব্যাখ্যা করা হয়েছে। Stripe-এর বিবরণ Stripe-এর নিজস্ব ডকুমেন্টেশন অনুযায়ী, ২০২৬ সালের সেপ্টেম্বর পর্যন্ত।
পেমেন্ট প্রোভাইডার কেন ব্যবহার করবেন
আপনার নিজের ফর্মে কখনো কার্ডের নম্বর সংগ্রহ করবেন না। কার্ডের তথ্য নিজে সামলালে PCI DSS (কার্ড শিল্পের নিরাপত্তা মান) আপনার আওতায় আসে এবং এটি গুরুতর দায়বদ্ধতা। Stripe-এর মতো একটি পেমেন্ট প্রোভাইডার পেমেন্ট ফর্ম হোস্ট করে, কার্ড সংরক্ষণ করে, ব্যাংকের প্রমাণীকরণ সামলায় এবং ফলাফল আপনার অ্যাপকে জানায়। আপনার অ্যাপ শুধু দেখে "গ্রাহক X, Y-এর জন্য পরিশোধ করেছে"।
এই গাইড Stripe ব্যবহার করে, কারণ এটি বহুল ব্যবহৃত, ভালোভাবে ডকুমেন্টেড এবং বেশিরভাগ AI অ্যাপ বিল্ডার একে সমর্থন করে। অন্য প্রোভাইডারও আছে, এবং কিছু "merchant of record" হিসেবে বিক্রয় কর সামলায়; কর-মেনে চলা নিয়ে চিন্তা থাকলে সেই মডেলটিও তুলনা করার যোগ্য।
Stripe দিয়ে পেমেন্ট নেওয়ার তিনটি উপায়
| বিকল্প | কোড লাগে | আপনার অ্যাপ জানে কে পেমেন্ট করেছে? | কীসের জন্য ভালো |
|---|---|---|---|
| Payment Links | নেই | শুধু যদি একটি ওয়েবহুক যোগ করেন | নির্দিষ্ট কয়েকটি পণ্য বিক্রি, অনুদান, চাহিদা পরীক্ষা |
| Checkout (একবারের) | সেশন তৈরির জন্য সার্ভার কোড | হ্যাঁ, ওয়েবহুকের মাধ্যমে | দোকান, পেইড ডাউনলোড, একবারের কেনাকাটা |
| Checkout (সাবস্ক্রিপশন) | সার্ভার কোড ও ওয়েবহুক হ্যান্ডলিং | হ্যাঁ, ওয়েবহুকের মাধ্যমে | SaaS, সদস্যপদ, পুনরাবৃত্ত যেকোনো কিছু |
Payment Links
Payment Link হলো একটি Stripe-হোস্টেড পেমেন্ট পেজ, যা আপনি Stripe Dashboard-এ কোড ছাড়াই তৈরি করেন। আপনি একটি URL পান, যেটি আপনার অ্যাপের বাটনের পেছনে রাখতে, ইমেইলে শেয়ার করতে, বা QR কোড হিসেবে দেখাতে পারেন। Stripe-এর ডকুমেন্টেশন বলে, Payment Link দিয়ে একটি পণ্য, একটি সাবস্ক্রিপশন বা অনুদান গ্রহণ করা যায়, এবং আপনি গ্রাহককে বেছে নিতে দিতে পারেন কী পরিশোধ করবেন, অথবা ক্রয়ের সংখ্যা সীমিত করতে পারেন।
এর একটি ফাঁদ আছে: আপনার অ্যাপ স্বয়ংক্রিয়ভাবে জানে না যে লগইন করা একজন নির্দিষ্ট ব্যবহারকারী পেমেন্ট করেছে। অনুদানের পেজ বা Stripe-এর ইমেইল বিজ্ঞপ্তি দেখে হাতে অর্ডার পূরণ করার মতো ছোট দোকানের জন্য এটি ঠিক আছে। কিন্তু "Pro ফিচার আনলক করতে পেমেন্ট করুন"-এর জন্য এটি যথেষ্ট নয়।
Stripe Checkout
Checkout হলো একটি পেমেন্ট পেজ, যা আপনার সার্ভার চাহিদার সময় একটি নির্দিষ্ট কেনাকাটার জন্য তৈরি করে। আপনার সার্ভার Stripe-কে জানায় কী কেনা হচ্ছে (এবং চাইলে কোন গ্রাহক কিনছে), Stripe একটি URL ফেরত দেয়, আর আপনি গ্রাহককে সেখানে পাঠান। Stripe-এর ডকুমেন্টেশন অনুযায়ী এটি একবারের ও সাবস্ক্রিপশন উভয় পেমেন্ট সমর্থন করে, এবং এটি সম্পূর্ণ Stripe-হোস্টেড পেজ, আপনার সাইটে এমবেড করা পেজ, বা এমবেড করা ফর্ম হিসেবে কাজ করতে পারে।
প্রবাহটি এরকম:
- গ্রাহক আপনার অ্যাপে Buy ক্লিক করেন।
- আপনার সার্ভার আপনার সিক্রেট কী দিয়ে একটি Checkout Session তৈরি করে, যাতে আপনার ব্যবহারকারী বা অর্ডারের সাথে যুক্ত একটি ID থাকে।
- গ্রাহককে Stripe-এ রিডাইরেক্ট করা হয় এবং তিনি পেমেন্ট করেন।
- Stripe তাদের আপনার সফলতার পেজে ফিরিয়ে দেয়।
- Stripe আপনার ওয়েবহুকে একটি
checkout.session.completedইভেন্ট পাঠায়, এবং আপনার সার্ভার অর্ডারটি পরিশোধিত চিহ্নিত করে বা অ্যাক্সেস খুলে দেয়।
ধাপ ২ অবশ্যই সার্ভারে হতে হবে, কারণ এটি আপনার সিক্রেট কী ব্যবহার করে। Checkout-এর একটি ব্যাকএন্ড লাগার প্রধান কারণ এটাই।
সাবস্ক্রিপশন
সাবস্ক্রিপশন Checkout-এর subscription mode ব্যবহার করে, Stripe-এ আপনার সেট করা একটি পুনরাবৃত্ত দামের সাথে। প্রথম পেমেন্ট ওপরের প্রবাহের মতোই কাজ করে। এরপর রিনিউয়াল, ব্যর্থ কার্ড, আপগ্রেড ও বাতিল সময়ের সাথে ঘটে — প্রায়ই তখন গ্রাহক আপনার অ্যাপে থাকেন না — তাই আপনার অ্যাপ এগুলো শুধু ওয়েবহুকের মাধ্যমেই জানতে পারে।
গ্রাহকদের নিজের সাবস্ক্রিপশন নিজে পরিচালনা করতে দিতে Stripe একটি হোস্টেড customer portal দেয়। Stripe-এর ডকুমেন্টেশন অনুযায়ী, গ্রাহকরা সেখানে পেমেন্ট পদ্ধতি ও বিলিং তথ্য হালনাগাদ করতে পারেন, সাবস্ক্রিপশন বদলাতে বা বাতিল করতে পারেন, এবং ইনভয়েস দেখতে ও ডাউনলোড করতে পারেন। আপনি এটি Stripe Dashboard-এ কনফিগার করেন এবং একটি "Manage billing" বাটন যোগ করেন যা গ্রাহককে সেখানে পাঠায়। এতে সেই পর্দাগুলো নিজে বানানোর কাজ বাঁচে।
ওয়েবহুক: যা এড়ানো যাবে না
ওয়েবহুক হলো একটি HTTP অনুরোধ যা কিছু ঘটলে Stripe আপনার সার্ভারে পাঠায়। (সাধারণ ধারণাটি জানতে দেখুন ওয়েবহুক কী।) Stripe-এর ফুলফিলমেন্ট গাইড স্পষ্ট: শুধু সফলতার পেজের ওপর ভরসা করে অর্ডার সম্পন্ন করা যায় না, কারণ গ্রাহক পেমেন্ট করার পর পেজ লোড হওয়ার আগেই সংযোগ হারাতে পারেন। সাবস্ক্রিপশন ও বিলম্বিত পেমেন্ট পদ্ধতির জন্য ওয়েবহুক বাধ্যতামূলক।
যে ইভেন্টগুলো হ্যান্ডল করা উচিত
| ইভেন্ট | এর মানে | আপনার অ্যাপ কী করে |
|---|---|---|
checkout.session.completed | Checkout শেষ হয়েছে | অর্ডার পরিশোধিত চিহ্নিত করুন বা অ্যাক্সেস শুরু করুন |
checkout.session.async_payment_succeeded | একটি বিলম্বিত পদ্ধতি (যেমন ব্যাংক ডেবিট) পরে সফল হয়েছে | এখনই সম্পন্ন করুন |
checkout.session.async_payment_failed | সেই বিলম্বিত পেমেন্ট ব্যর্থ হয়েছে | গ্রাহককে জানান; সম্পন্ন করবেন না |
invoice.paid | একটি সাবস্ক্রিপশন পেমেন্ট সফল হয়েছে, রিনিউয়াল সহ | অ্যাক্সেস বাড়ান |
invoice.payment_failed | একটি রিনিউয়াল ব্যর্থ হয়েছে | ব্যবহারকারীকে সতর্ক করুন; Stripe আবার চেষ্টা করতে পারে |
customer.subscription.updated | প্ল্যান বদলেছে, বা বাতিল নির্ধারিত হয়েছে | ব্যবহারকারীর প্ল্যান হালনাগাদ করুন |
customer.subscription.deleted | সাবস্ক্রিপশন শেষ হয়েছে | পেইড অ্যাক্সেস সরান |
সঠিক ওয়েবহুক হ্যান্ডলারের নিয়ম
এগুলো সরাসরি Stripe-এর ওয়েবহুক ডকুমেন্টেশন থেকে নেওয়া, এবং AI-এর তৈরি হ্যান্ডলার মাঝেমধ্যে এর একটি না একটি মিস করে:
- স্বাক্ষর যাচাই করুন। প্রতিটি ইভেন্টে একটি
Stripe-Signatureহেডার থাকে। আপনার হ্যান্ডলার এন্ডপয়েন্টের সাইনিং সিক্রেট (যাwhsec_দিয়ে শুরু) দিয়ে তা যাচাই করে। এটি না করলে যে কেউ আপনার সার্ভারে একটি ভুয়া "পেমেন্ট সফল" বার্তা পাঠাতে পারত। - কাঁচা রিকোয়েস্ট বডি ব্যবহার করুন। আপনার ফ্রেমওয়ার্ক বডি পার্স বা বদলানোর আগে স্বাক্ষর যাচাই ব্যর্থ হয়।
- দ্রুত 2xx রেসপন্স দিন, তারপর ধীর কাজ করুন। টাইমআউট ব্যর্থতা হিসেবে গণ্য হয়।
- ডুপ্লিকেট হ্যান্ডল করুন। Stripe একই ইভেন্ট একাধিকবার পাঠাতে পারে। প্রক্রিয়াকৃত ইভেন্ট ID রেকর্ড করুন, অথবা সম্পন্ন করার কাজটি দুইবার চললেও নিরাপদ রাখুন।
- ক্রম ধরে নেবেন না। Stripe গ্যারান্টি দেয় না যে ইভেন্টগুলো ঘটার ক্রমে আসবে।
- পুনঃচেষ্টার জন্য প্রস্তুত থাকুন। লাইভ মোডে Stripe ব্যর্থ ডেলিভারি তিন দিন পর্যন্ত আবার চেষ্টা করে, তাই ছোট আউটেজে পেমেন্ট হারায় না — কিন্তু আপনার হ্যান্ডলারকে দেরিতে আসা ইভেন্ট সামলাতে হবে।
ওয়েবহুকের জন্য একটি পাবলিক HTTPS ঠিকানা লাগে, তাই সাধারণত আপনার অ্যাপ পাবলিশ হওয়ার পরই এগুলো কাজ করে (ডেভেলপাররা Stripe CLI দিয়ে ইভেন্ট নিজের মেশিনে ফরওয়ার্ড করতে পারেন)।
পুরো প্রবাহ কভার করে এমন একটি প্রম্পট
"Pro pack"-এর জন্য Stripe Checkout দিয়ে একবারের ক্রয় যোগ করো (price ID STRIPE_PRICE_ID-তে)। সিক্রেট থেকে STRIPE_SECRET_KEY ব্যবহার করে সার্ভারে Checkout Session তৈরি করো, আর session-এ লগইন করা ব্যবহারকারীর ID যোগ করো। একটি POST /api/stripe/webhook এন্ডপয়েন্ট যোগ করো, যা STRIPE_WEBHOOK_SECRET দিয়ে কাঁচা রিকোয়েস্ট বডির ওপর Stripe স্বাক্ষর যাচাই করে, checkout.session.completed হ্যান্ডল করে এবং সেই ব্যবহারকারীকে Pro pack আছে বলে চিহ্নিত করে। একই ইভেন্ট দুইবার এলেও নিরাপদ থাকুক। সফল ও বাতিলের পেজ যোগ করো। STRIPE_SECRET_KEY কখনো ব্রাউজারে দেখাবে না।
সাবস্ক্রিপশনের জন্য যোগ করুন: "STRIPE_PRICE_ID দিয়ে subscription mode ব্যবহার করো। invoice.paid, invoice.payment_failed, customer.subscription.updated ও customer.subscription.deleted হ্যান্ডল করো। একটি Manage billing বাটন যোগ করো, যা Stripe customer portal খোলে।"
টেস্ট মোড
Stripe-এর আলাদা স্যান্ডবক্স (টেস্ট) ও লাইভ পরিবেশ আছে, আলাদা কী সহ। স্যান্ডবক্স কী pk_test_, sk_test_ বা rk_test_ দিয়ে শুরু হয়; লাইভ কী pk_live_, sk_live_ বা rk_live_ দিয়ে শুরু হয়। টেস্ট লেনদেনে টাকা চলাচল করে না।
Stripe-এর টেস্টিং ডকুমেন্টেশনের কার্ডগুলো কাজে লাগে (যেকোনো ভবিষ্যৎ মেয়াদ, যেকোনো তিন অঙ্কের CVC):
| কার্ড নম্বর | ফলাফল |
|---|---|
4242 4242 4242 4242 | পেমেন্ট সফল হয় |
4000 0000 0000 0002 | কার্ড প্রত্যাখ্যাত হয় |
4000 0000 0000 3220 | 3D Secure প্রমাণীকরণ লাগে, তারপর সফল হয় |
কমপক্ষে এগুলো পরীক্ষা করুন:
- সফল পেমেন্ট সঠিক ব্যবহারকারীর জন্য সঠিক জিনিস আনলক করে
- প্রত্যাখ্যাত কার্ড একটি স্পষ্ট বার্তা দেখায় এবং কিছু আনলক করে না
- পেমেন্ট করার সাথে সাথেই ব্রাউজার ট্যাব বন্ধ করলেও অ্যাক্সেস পাওয়া যায় (এটি প্রমাণ করে যে ওয়েবহুক কাজ করছে, শুধু সফলতার পেজ নয়)
- Stripe পেজে বাতিল করলে ব্যবহারকারী আপনার অ্যাপে ফিরে আসেন এবং কিছু চার্জ হয় না
- সাবস্ক্রিপশনের জন্য: কাস্টমার পোর্টালে বাতিল করুন এবং নিশ্চিত হোন অ্যাক্সেস সঠিক সময়ে শেষ হয়
লাইভ যাওয়া
- আপনার ব্যবসা ও ব্যাংকের তথ্য দিয়ে Stripe অ্যাকাউন্ট সক্রিয় করুন।
- আপনার অ্যাপের সিক্রেটে লাইভ কী বসান। Stripe সীমিত অনুমতির restricted কী সুপারিশ করে, যেখানে শুধু আপনার ইন্টিগ্রেশনের দরকারি অনুমতি থাকে, পুরো অবাধ সিক্রেট কী নয়।
- আপনার পাবলিশ করা অ্যাপের দিকে নির্দেশ করে একটি লাইভ ওয়েবহুক এন্ডপয়েন্ট তৈরি করুন। এর নিজস্ব সাইনিং সিক্রেট আছে, টেস্টটির থেকে আলাদা — সেটি হালনাগাদ করুন।
- লাইভ মোডে প্রোডাক্ট ও দাম আবার তৈরি করুন; টেস্ট-মোডের ID সেখানে নেই।
- একটি ছোট আসল ক্রয় করুন এবং সেটি রিফান্ড করুন।
প্রতিটি কী আপনার প্রজেক্টের সিক্রেটে রাখুন, কোডে বা চ্যাটে কখনো নয়। কী ও ওয়েবহুক স্বাক্ষর যাচাই নিয়ে আরও জানতে AI দিয়ে বানানো অ্যাপের নিরাপত্তা চেকলিস্ট দেখুন।
কর, রিফান্ড ও কাগজপত্র
পেমেন্টের সাথে এমন দায়িত্ব আসে যা কোড সমাধান করে না। এটি কর-পরামর্শ নয়; একজন হিসাবরক্ষকের সঙ্গে যাচাই করুন।
- বিক্রয় কর, VAT ও GST। আপনি ও আপনার গ্রাহক কোথায় আছেন তার ওপর নির্ভর করে আপনাকে নিবন্ধন করতে, কর আদায় করতে ও জমা দিতে হতে পারে। Stripe Tax চেকআউটে কর হিসাব ও আদায় করতে পারে, বিক্রয় কোথায় দায় তৈরি করতে পারে তা নজর রাখতে পারে, এবং নিবন্ধন ও ফাইলিংয়ে সাহায্য করতে পারে — তবে দায়িত্ব আপনারই থাকে। Merchant-of-record প্রোভাইডার একটি বিকল্প, যারা এর বেশিরভাগ দায়িত্ব নেয়।
- রিফান্ড ও বিরোধ। লঞ্চের আগে আপনার রিফান্ড নীতি ঠিক করুন এবং সাইটে রাখুন। বিরোধ (চার্জব্যাক) ঘটে; কী কেনা ও ডেলিভারি হয়েছে তার রেকর্ড রাখুন।
- রশিদ ও ইনভয়েস। Stripe রশিদ ইমেইল করতে পারে; ব্যবসার জন্য সঠিক ইনভয়েস লাগতে পারে।
- ফি। প্রতিটি প্রোভাইডার প্রতি লেনদেনে চার্জ নেয়। নিবন্ধে প্রকাশিত অঙ্কের ওপর নির্ভর না করে প্রোভাইডারের বর্তমান মূল্য পৃষ্ঠাটি দেখুন।
কোন সেটআপ আপনার অ্যাপের জন্য উপযুক্ত
- অনুদান বা হাতেগোনা কয়েকটি পণ্য: Payment Links। দেখুন কীভাবে একটি অলাভজনক অনুদান ওয়েবসাইট বানাবেন।
- কার্টসহ একটি দোকান: লাইন আইটেমসহ Checkout ও একটি ওয়েবহুক। দেখুন কীভাবে একটি অনলাইন দোকান বানাবেন।
- SaaS বা সদস্যপদ: subscription mode-এর Checkout, ওয়েবহুক ও customer portal। দেখুন কীভাবে একটি SaaS MVP বানাবেন ও কীভাবে একটি SaaS পণ্যের দাম ঠিক করবেন।
- বিক্রেতাদের মধ্যে অর্থ বণ্টনকারী মার্কেটপ্লেস: একটি আলাদা, বেশি নিয়ন্ত্রিত সেটআপ (Stripe Connect বা অনুরূপ)। এটি আলাদাভাবে পরিকল্পনা করুন।
Mythex-এ পেমেন্ট যোগ করা
Mythex-এ তৈরি অ্যাপের পেমেন্ট আপনার নিজের Stripe অ্যাকাউন্ট ও কী ব্যবহার করে; আপনার অ্যাপের জন্য একক-ক্লিকে "Connect Stripe" নেই। সাধারণ প্রবাহ:
- Stripe-এর টেস্ট কী নিন।
- প্রজেক্ট সিক্রেটে
STRIPE_SECRET_KEYযোগ করুন (ওয়েবহুক সিক্রেট পরে) —/secrets, প্রজেক্ট সেটিংস বা এজেন্ট যখন কী দরকার হয় তখন যে সিক্রেট কার্ড দেখায়, সেখান থেকে। - ওপরের মতো একটি প্রম্পট দিয়ে এজেন্টকে Checkout বানাতে বলুন।
- Preview-তে Stripe-এর টেস্ট কার্ড দিয়ে পরীক্ষা করুন। ওয়েবহুক রেজিস্টার করার আগে পাবলিশ করুন, কারণ এর জন্য আপনার পাবলিক URL লাগে।
- লাইভ কী বসানোর পর আবার পাবলিশ করুন, যাতে লাইভ অ্যাপ সেগুলো গ্রহণ করে।
ডক্সে দেখুন Stripe দিয়ে পেমেন্ট গ্রহণ ও আপনার ব্যাকএন্ডে ওয়েবহুক হ্যান্ডল।
প্রশ্নোত্তর
অ্যাপে পেমেন্ট নেওয়ার সবচেয়ে সহজ উপায় কোনটি?
একটি Stripe Payment Link-এ কোড লাগে না: Stripe Dashboard-এ এটি তৈরি করে আপনার অ্যাপ থেকে লিংক দিন। যদি আপনার অ্যাপ জানতে চায় কে পেমেন্ট করেছে এবং স্বয়ংক্রিয়ভাবে কিছু আনলক করতে চায়, তাহলে ওয়েবহুকসহ Stripe Checkout ব্যবহার করুন।
পেমেন্ট নিতে কি ওয়েবহুক লাগে?
যদি আপনার অ্যাপকে পেমেন্টে সাড়া দিতে হয় — অ্যাকাউন্ট আনলক করা, অর্ডার পরিশোধিত চিহ্নিত করা, বা রিনিউয়াল হ্যান্ডল করা — তাহলে হ্যাঁ। Stripe-এর ডকুমেন্টেশন বলে যে শুধু সফলতার পেজের ওপর নির্ভর করা যায় না, কারণ গ্রাহক পেমেন্ট করেও ওই পেজে পৌঁছাতে নাও পারেন। সাবস্ক্রিপশনের জন্যও ওয়েবহুক লাগে।
আসল টাকা ছাড়া পেমেন্ট কীভাবে পরীক্ষা করব?
Stripe-এর স্যান্ডবক্স (টেস্ট) API কী এবং তার টেস্ট কার্ড নম্বর ব্যবহার করুন, যেমন 4242 4242 4242 4242, যেকোনো ভবিষ্যৎ মেয়াদ ও যেকোনো তিন অঙ্কের CVC সহ। টেস্ট লেনদেনে আসল টাকা চলাচল করে না।
Stripe কি আমার জন্য বিক্রয় কর ও VAT সামলায়?
Stripe Tax চেকআউটে কর হিসাব করতে ও আদায় করতে পারে এবং নজর রাখতে পারে আপনাকে কোথায় নিবন্ধন করতে হতে পারে। তবু কর দায়িত্ব আপনারই থাকে। আপনার পরিস্থিতির জন্য একজন হিসাবরক্ষকের সঙ্গে কথা বলুন।