BanglaPay API ইন্টিগ্রেশন গাইড
আপনার ওয়েবসাইট, ই-কমার্স বা অ্যাপে অটোমেটিক পেমেন্ট সিস্টেম যুক্ত করার সম্পূর্ণ গাইডলাইন। ঠিক যেভাবে SSLCommerz বা Stripe কাজ করে।
শুরু করার আগে
BanglaPay পেমেন্ট গেটওয়ে ইন্টিগ্রেট করতে আপনার নিচের জিনিসগুলো প্রস্তুত রাখুন:
- মার্চেন্ট একাউন্ট: প্রথমে মার্চেন্ট রেজিস্ট্রেশন করুন। ইমেইল ও পাসওয়ার্ড দিয়ে রেজিস্ট্রেশন করুন।
- Merchant ID খুঁজুন: লগইন করে মার্চেন্ট ড্যাশবোর্ড → সেটিংস পেজে যান। সেখানে আপনার
Merchant IDদেখতে পাবেন। এই ID-টি API কলে ব্যবহার করতে হবে। - পেমেন্ট মেথড সেটআপ: ড্যাশবোর্ডে গিয়ে পেমেন্ট মেথড ট্যাবে কমপক্ষে একটি মেথড (বিকাশ/নগদ/রকেট) ON করুন এবং আপনার নম্বর দিন।
- ডিভাইস কানেক্ট: অটো-ভেরিফিকেশনের জন্য ডিভাইস কানেকশন থেকে Device ID জেনারেট করুন এবং আপনার ফোনে BanglaPay App-এ সেটি ব্যবহার করুন।
Merchant ID কোথায় পাবেন? মার্চেন্ট ড্যাশবোর্ডের সেটিংস পেজে আপনার ইউনিক Merchant ID দেখা যাবে। এটি কপি করে আপনার কোডে ব্যবহার করুন।
eCommerce ইন্টিগ্রেশন (Standard Redirect Flow)
WooCommerce, Laravel, PHP, Django বা যেকোনো ই-কমার্স সাইটের জন্য এটি সবচেয়ে সহজ পদ্ধতি। কাস্টমার আমাদের সুন্দর চেকআউট পেজে পেমেন্ট করবে এবং অটোমেটিক্যালি আপনার সাইটে ফিরে যাবে।
- Create Payment: কাস্টমার যখন Checkout এ ক্লিক করবে, আপনার সার্ভার থেকে আমাদের
/api/v1/create-paymentAPI তে একটি POST রিকোয়েস্ট পাঠান। এখানে আপনি আপনারsuccessUrlএবংfailUrlদিয়ে দেবেন। - Redirect: রেসপন্সে আপনি একটি
paymentUrlপাবেন। কাস্টমারকে সেই লিংকে রিডাইরেক্ট করে দিন। - Payment & Verification: কাস্টমার আমাদের সুন্দর পেমেন্ট পেজে এসে পেমেন্ট করবে এবং আমাদের মোবাইল অ্যাপ সেটি অটোমেটিক ভেরিফাই করবে।
- Success Redirect: পেমেন্ট ভেরিফাই হয়ে গেলে, কাস্টমারকে অটোমেটিক্যালি আপনার দেওয়া
successUrl-এ রিডাইরেক্ট করা হবে!
API Call (Server-side)
Request Body Fields
| ফিল্ড | টাইপ | স্ট্যাটাস | বিবরণ |
|---|---|---|---|
merchantId | string | REQUIRED | আপনার মার্চেন্ট আইডি (ড্যাশবোর্ড → সেটিংস থেকে পাবেন) |
amount | string/number | REQUIRED | পেমেন্টের পরিমাণ (যেমন: "500.00") |
method | string | REQUIRED | পেমেন্ট মেথড: bkash / nagad / rocket / upay |
successUrl | string | REQUIRED | পেমেন্ট সফল হলে কাস্টমারকে যেখানে পাঠাবে |
failUrl | string | REQUIRED | পেমেন্ট ব্যর্থ হলে কাস্টমারকে যেখানে পাঠাবে |
customerName | string | OPTIONAL | কাস্টমারের নাম (ট্র্যাকিং-এর জন্য) |
customerPhone | string | OPTIONAL | কাস্টমারের মোবাইল নম্বর |
customerId | string | OPTIONAL | আপনার সিস্টেমে কাস্টমারের ইউনিক আইডি |
{
"merchantId": "YOUR_MERCHANT_ID",
"amount": "500.00",
"method": "bkash",
"successUrl": "https://yoursite.com/checkout/success",
"failUrl": "https://yoursite.com/checkout/failed",
"customerName": "রহিম উদ্দিন",
"customerPhone": "01712345678"
}
{
"success": true,
"sessionId": "pay_a1b2c3d4e5f6...",
"paymentUrl": "https://banglapay.clickatizer.com/checkout/pay_a1b2c3...",
"merchantNumber": "01XXXXXXXXX",
"amount": "500.00",
"method": "bkash"
}
গুরুত্বপূর্ণ: কাস্টমারকে অবশ্যই paymentUrl-এ redirect করুন। এই URL-এ আমাদের সুন্দর চেকআউট পেজ দেখাবে যেখানে কাস্টমার পেমেন্ট সম্পন্ন করবে।
Direct API (Headless / Custom UI)
আপনি যদি চান কাস্টমারকে কোনো পেজে রিডাইরেক্ট না করে আপনার নিজের ওয়েবসাইটে সব ফর্ম দেখাতে, তবে এই মেথডটি ব্যবহার করুন। আপনি নিজের UI ডিজাইন করে API কল দিয়ে সব কিছু ম্যানেজ করবেন।
- Create Payment: আপনার ওয়েবসাইট থেকে
/api/v1/create-paymentএ কল করুন। রেসপন্সেmerchantNumberপাবেন যেটি আপনার কাস্টমারকে দেখাবেন। - নম্বর দেখান: রেসপন্সে প্রাপ্ত
merchantNumberআপনার ওয়েবসাইটের ডিজাইনে কাস্টমারকে দেখান এবং Send Money করতে বলুন। - Submit TrxID: কাস্টমার টাকা পাঠিয়ে TrxID দিলে
/api/v1/submit-trxidতে কল করে BanglaPay কে জানিয়ে দিন। - স্ট্যাটাস চেক (Polling): আপনার ওয়েবসাইট প্রতি ৩ সেকেন্ডে
GET /api/v1/payment/:sessionIdকল করে চেক করবে পেমেন্টsuccessহয়েছে কিনা। সফল হলে কাস্টমারকে নিশ্চিত করুন।
টিপ: Direct API তে successUrl ও failUrl দিতে হবে না। আপনার ওয়েবসাইট নিজেই polling করে status চেক করবে।
API রেফারেন্স
1. Create Payment
নতুন পেমেন্ট সেশন তৈরি করুন (eCommerce ও Direct উভয় মেথডের জন্য)।
Request body ও response উপরের eCommerce সেকশনে দেখানো হয়েছে।
2. Submit TrxID
কাস্টমার যখন তার ট্রানজ্যাকশন আইডি (TrxID) দিবে, তখন এটি কল করুন। (eCommerce মেথডের জন্য এটি লাগবে না, কারণ আমাদের চেকআউট পেজ নিজেই এটি সাবমিট করে)।
| ফিল্ড | টাইপ | স্ট্যাটাস | বিবরণ |
|---|---|---|---|
sessionId | string | REQUIRED | Create Payment থেকে প্রাপ্ত session ID |
trxId | string | REQUIRED | কাস্টমারের দেওয়া Transaction ID (যেমন: TRX8GF5HT2) |
senderNumber | string | REQUIRED | যে নম্বর থেকে টাকা পাঠানো হয়েছে (যেমন: 018XXXXXXXX) |
{
"sessionId": "pay_a1b2c3d4e5f6...",
"trxId": "TRX8GF5HT2",
"senderNumber": "018XXXXXXXX"
}
{
"success": true,
"message": "TrxID submitted. Verifying payment..."
}
3. Check Transaction Status
পেমেন্ট স্ট্যাটাস চেক করুন। Direct API মেথডে প্রতি ৩ সেকেন্ডে এটি কল করে status পোল করুন।
{
"success": true,
"payment": {
"sessionId": "pay_a1b2c3d4e5f6...",
"merchantId": "YOUR_MERCHANT_ID",
"amount": "500.00",
"method": "bkash",
"merchantNumber": "01XXXXXXXXX",
"status": "success",
"trxId": "TRX8GF5HT2",
"senderNumber": "018XXXXXXXX",
"verifiedBy": "sms_auto",
"createdAt": "2026-03-23T..."
}
}
Status Values:
pending → সেশন তৈরি হয়েছে কিন্তু TrxID সাবমিট হয়নি |
verifying → TrxID সাবমিট হয়েছে, SMS ভেরিফিকেশন চলছে |
success → পেমেন্ট সফল ✅ |
failed → পেমেন্ট ব্যর্থ ❌
4. Get Merchant's Active Methods
Direct API তে কোন কোন মেথড চালু আছে জানতে এটি কল করুন।
{
"success": true,
"methods": {
"bkash": { "number": "01XXXXXXXXX" },
"nagad": { "number": "01XXXXXXXXX" }
}
}
কোড উদাহরণ
নিচে বিভিন্ন প্রোগ্রামিং ল্যাংগুয়েজে BanglaPay ইন্টিগ্রেশনের উদাহরণ দেওয়া হলো।
JavaScript (Node.js / Frontend)
// ========================================
// Step 1: Create Payment Session
// ========================================
const response = await fetch('https://banglapay.clickatizer.com/api/v1/create-payment', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
merchantId: 'YOUR_MERCHANT_ID',
amount: '500.00',
method: 'bkash',
successUrl: 'https://yoursite.com/success',
failUrl: 'https://yoursite.com/failed',
customerName: 'রহিম উদ্দিন',
customerPhone: '01712345678'
})
});
const data = await response.json();
if (data.success) {
// eCommerce: Redirect customer to payment page
window.location.href = data.paymentUrl;
// Or Direct API: Show merchantNumber to customer
// console.log('Send money to:', data.merchantNumber);
}
// ========================================
// Step 2 (Direct API only): Submit TrxID
// ========================================
const submitRes = await fetch('https://banglapay.clickatizer.com/api/v1/submit-trxid', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sessionId: data.sessionId,
trxId: 'TRX8GF5HT2',
senderNumber: '01712345678'
})
});
// ========================================
// Step 3 (Direct API only): Poll Status
// ========================================
const checkStatus = setInterval(async () => {
const statusRes = await fetch(`https://banglapay.clickatizer.com/api/v1/payment/${data.sessionId}`);
const statusData = await statusRes.json();
if (statusData.payment.status === 'success') {
clearInterval(checkStatus);
alert('পেমেন্ট সফল! ✅');
} else if (statusData.payment.status === 'failed') {
clearInterval(checkStatus);
alert('পেমেন্ট ব্যর্থ ❌');
}
}, 3000); // Check every 3 seconds
PHP (Laravel / WordPress / Raw PHP)
<?php
// ========================================
// Step 1: Create Payment Session
// ========================================
$ch = curl_init('https://banglapay.clickatizer.com/api/v1/create-payment');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'merchantId' => 'YOUR_MERCHANT_ID',
'amount' => '500.00',
'method' => 'bkash',
'successUrl' => 'https://yoursite.com/success',
'failUrl' => 'https://yoursite.com/failed',
'customerName' => 'রহিম উদ্দিন',
'customerPhone' => '01712345678',
])
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
if ($response['success']) {
// eCommerce: Redirect customer to BanglaPay checkout
header('Location: ' . $response['paymentUrl']);
exit;
}
// ========================================
// Step 2 (Direct API only): Submit TrxID
// ========================================
$ch2 = curl_init('https://banglapay.clickatizer.com/api/v1/submit-trxid');
curl_setopt_array($ch2, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'sessionId' => $response['sessionId'],
'trxId' => 'TRX8GF5HT2',
'senderNumber' => '01712345678',
])
]);
$submitRes = json_decode(curl_exec($ch2), true);
curl_close($ch2);
// ========================================
// Step 3 (Direct API only): Check Status
// ========================================
$statusRes = file_get_contents(
'https://banglapay.clickatizer.com/api/v1/payment/' . $response['sessionId']
);
$status = json_decode($statusRes, true);
if ($status['payment']['status'] === 'success') {
echo 'পেমেন্ট সফল! ✅';
}
?>
Python (Django / Flask / FastAPI)
import requests
import time
# ========================================
# Step 1: Create Payment Session
# ========================================
response = requests.post('https://banglapay.clickatizer.com/api/v1/create-payment', json={
'merchantId': 'YOUR_MERCHANT_ID',
'amount': '500.00',
'method': 'bkash',
'successUrl': 'https://yoursite.com/success',
'failUrl': 'https://yoursite.com/failed',
'customerName': 'রহিম উদ্দিন',
'customerPhone': '01712345678'
})
data = response.json()
if data['success']:
# eCommerce: Redirect to data['paymentUrl']
print(f"Redirect to: {data['paymentUrl']}")
# ========================================
# Step 2 (Direct API only): Submit TrxID
# ========================================
submit_res = requests.post('https://banglapay.clickatizer.com/api/v1/submit-trxid', json={
'sessionId': data['sessionId'],
'trxId': 'TRX8GF5HT2',
'senderNumber': '01712345678'
})
# ========================================
# Step 3 (Direct API only): Poll Status
# ========================================
while True:
status_res = requests.get(f"https://banglapay.clickatizer.com/api/v1/payment/{data['sessionId']}")
status = status_res.json()
if status['payment']['status'] == 'success':
print('পেমেন্ট সফল! ✅')
break
elif status['payment']['status'] == 'failed':
print('পেমেন্ট ব্যর্থ ❌')
break
time.sleep(3) # Check every 3 seconds
BanglaPay