BanglaPay API ইন্টিগ্রেশন গাইড

আপনার ওয়েবসাইট, ই-কমার্স বা অ্যাপে অটোমেটিক পেমেন্ট সিস্টেম যুক্ত করার সম্পূর্ণ গাইডলাইন। ঠিক যেভাবে SSLCommerz বা Stripe কাজ করে।

শুরু করার আগে

BanglaPay পেমেন্ট গেটওয়ে ইন্টিগ্রেট করতে আপনার নিচের জিনিসগুলো প্রস্তুত রাখুন:

  1. মার্চেন্ট একাউন্ট: প্রথমে মার্চেন্ট রেজিস্ট্রেশন করুন। ইমেইল ও পাসওয়ার্ড দিয়ে রেজিস্ট্রেশন করুন।
  2. Merchant ID খুঁজুন: লগইন করে মার্চেন্ট ড্যাশবোর্ড → সেটিংস পেজে যান। সেখানে আপনার Merchant ID দেখতে পাবেন। এই ID-টি API কলে ব্যবহার করতে হবে।
  3. পেমেন্ট মেথড সেটআপ: ড্যাশবোর্ডে গিয়ে পেমেন্ট মেথড ট্যাবে কমপক্ষে একটি মেথড (বিকাশ/নগদ/রকেট) ON করুন এবং আপনার নম্বর দিন।
  4. ডিভাইস কানেক্ট: অটো-ভেরিফিকেশনের জন্য ডিভাইস কানেকশন থেকে Device ID জেনারেট করুন এবং আপনার ফোনে BanglaPay App-এ সেটি ব্যবহার করুন।

Merchant ID কোথায় পাবেন? মার্চেন্ট ড্যাশবোর্ডের সেটিংস পেজে আপনার ইউনিক Merchant ID দেখা যাবে। এটি কপি করে আপনার কোডে ব্যবহার করুন।

eCommerce ইন্টিগ্রেশন (Standard Redirect Flow)

WooCommerce, Laravel, PHP, Django বা যেকোনো ই-কমার্স সাইটের জন্য এটি সবচেয়ে সহজ পদ্ধতি। কাস্টমার আমাদের সুন্দর চেকআউট পেজে পেমেন্ট করবে এবং অটোমেটিক্যালি আপনার সাইটে ফিরে যাবে।

  1. Create Payment: কাস্টমার যখন Checkout এ ক্লিক করবে, আপনার সার্ভার থেকে আমাদের /api/v1/create-payment API তে একটি POST রিকোয়েস্ট পাঠান। এখানে আপনি আপনার successUrl এবং failUrl দিয়ে দেবেন।
  2. Redirect: রেসপন্সে আপনি একটি paymentUrl পাবেন। কাস্টমারকে সেই লিংকে রিডাইরেক্ট করে দিন।
  3. Payment & Verification: কাস্টমার আমাদের সুন্দর পেমেন্ট পেজে এসে পেমেন্ট করবে এবং আমাদের মোবাইল অ্যাপ সেটি অটোমেটিক ভেরিফাই করবে।
  4. Success Redirect: পেমেন্ট ভেরিফাই হয়ে গেলে, কাস্টমারকে অটোমেটিক্যালি আপনার দেওয়া successUrl-এ রিডাইরেক্ট করা হবে!

API Call (Server-side)

POST https://banglapay.clickatizer.com/api/v1/create-payment

Request Body Fields

ফিল্ডটাইপস্ট্যাটাসবিবরণ
merchantIdstringREQUIREDআপনার মার্চেন্ট আইডি (ড্যাশবোর্ড → সেটিংস থেকে পাবেন)
amountstring/numberREQUIREDপেমেন্টের পরিমাণ (যেমন: "500.00")
methodstringREQUIREDপেমেন্ট মেথড: bkash / nagad / rocket / upay
successUrlstringREQUIREDপেমেন্ট সফল হলে কাস্টমারকে যেখানে পাঠাবে
failUrlstringREQUIREDপেমেন্ট ব্যর্থ হলে কাস্টমারকে যেখানে পাঠাবে
customerNamestringOPTIONALকাস্টমারের নাম (ট্র্যাকিং-এর জন্য)
customerPhonestringOPTIONALকাস্টমারের মোবাইল নম্বর
customerIdstringOPTIONALআপনার সিস্টেমে কাস্টমারের ইউনিক আইডি
JSON Request
{
  "merchantId": "YOUR_MERCHANT_ID",
  "amount": "500.00",
  "method": "bkash",
  "successUrl": "https://yoursite.com/checkout/success",
  "failUrl": "https://yoursite.com/checkout/failed",
  "customerName": "রহিম উদ্দিন",
  "customerPhone": "01712345678"
}
JSON Response (Success)
{
  "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 কল দিয়ে সব কিছু ম্যানেজ করবেন।

  1. Create Payment: আপনার ওয়েবসাইট থেকে /api/v1/create-payment এ কল করুন। রেসপন্সে merchantNumber পাবেন যেটি আপনার কাস্টমারকে দেখাবেন।
  2. নম্বর দেখান: রেসপন্সে প্রাপ্ত merchantNumber আপনার ওয়েবসাইটের ডিজাইনে কাস্টমারকে দেখান এবং Send Money করতে বলুন।
  3. Submit TrxID: কাস্টমার টাকা পাঠিয়ে TrxID দিলে /api/v1/submit-trxid তে কল করে BanglaPay কে জানিয়ে দিন।
  4. স্ট্যাটাস চেক (Polling): আপনার ওয়েবসাইট প্রতি ৩ সেকেন্ডে GET /api/v1/payment/:sessionId কল করে চেক করবে পেমেন্ট success হয়েছে কিনা। সফল হলে কাস্টমারকে নিশ্চিত করুন।

টিপ: Direct API তে successUrlfailUrl দিতে হবে না। আপনার ওয়েবসাইট নিজেই polling করে status চেক করবে।

API রেফারেন্স

1. Create Payment

নতুন পেমেন্ট সেশন তৈরি করুন (eCommerce ও Direct উভয় মেথডের জন্য)।

POST https://banglapay.clickatizer.com/api/v1/create-payment

Request body ও response উপরের eCommerce সেকশনে দেখানো হয়েছে।

2. Submit TrxID

কাস্টমার যখন তার ট্রানজ্যাকশন আইডি (TrxID) দিবে, তখন এটি কল করুন। (eCommerce মেথডের জন্য এটি লাগবে না, কারণ আমাদের চেকআউট পেজ নিজেই এটি সাবমিট করে)।

POST https://banglapay.clickatizer.com/api/v1/submit-trxid
ফিল্ডটাইপস্ট্যাটাসবিবরণ
sessionIdstringREQUIREDCreate Payment থেকে প্রাপ্ত session ID
trxIdstringREQUIREDকাস্টমারের দেওয়া Transaction ID (যেমন: TRX8GF5HT2)
senderNumberstringREQUIREDযে নম্বর থেকে টাকা পাঠানো হয়েছে (যেমন: 018XXXXXXXX)
JSON Request
{
  "sessionId": "pay_a1b2c3d4e5f6...",
  "trxId": "TRX8GF5HT2", 
  "senderNumber": "018XXXXXXXX"
}
JSON Response
{
  "success": true,
  "message": "TrxID submitted. Verifying payment..."
}

3. Check Transaction Status

পেমেন্ট স্ট্যাটাস চেক করুন। Direct API মেথডে প্রতি ৩ সেকেন্ডে এটি কল করে status পোল করুন।

GET https://banglapay.clickatizer.com/api/v1/payment/:sessionId
JSON Response
{
  "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 তে কোন কোন মেথড চালু আছে জানতে এটি কল করুন।

GET https://banglapay.clickatizer.com/api/v1/merchant-methods/:merchantId
JSON Response
{
  "success": true,
  "methods": {
    "bkash": { "number": "01XXXXXXXXX" },
    "nagad": { "number": "01XXXXXXXXX" }
  }
}

কোড উদাহরণ

নিচে বিভিন্ন প্রোগ্রামিং ল্যাংগুয়েজে BanglaPay ইন্টিগ্রেশনের উদাহরণ দেওয়া হলো।

JavaScript (Node.js / Frontend)

JavaScript
// ========================================
// 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
<?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)

Python
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