ডেভেলপার ডকুমেন্টেশন
৩টা কল দিয়েই পুরো ইন্টিগ্রেশন: পেমেন্ট তৈরি করুন → কাস্টমারকে payment_url এ পাঠান → webhook পেলে বা ফিরে এলে verify করুন। API টি UddoktaPay-compatible, তাই আগের কোড প্রায় বদলাতে হবে না।
শুরু করুন
- ফ্রি অ্যাকাউন্ট খুলুন → Brands পেজ থেকে API key ও webhook secret কপি করুন।
- Base URL:
https://pay.dreamlanceit.com(নিজের ব্র্যান্ড ডোমেইন যোগ করলে সেটাও ব্যবহার করতে পারবেন)। - প্রথমে একটা টেস্ট key দিয়ে চালিয়ে দেখুন, তারপর লাইভ key বসান।
Authentication
প্রতিটা রিকোয়েস্টে API key হেডারে পাঠান (যেকোনো একটা):
RT-UDDOKTAPAY-API-KEY: YOUR_API_KEY
X-DreamPay-Key: YOUR_API_KEY
Authorization: Bearer YOUR_API_KEY
সব রিকোয়েস্ট POST, বডি JSON (Content-Type: application/json)। API key শুধু আপনার সার্ভারে রাখুন — ব্রাউজার/অ্যাপের কোডে নয়।
পেমেন্ট তৈরি
POST /api/checkout-v2 — টাকায় (BDT)। ডলারে (Stripe, PayPal ইত্যাদির জন্য) POST /api/checkout-v2/global।
| ফিল্ড | লাগবে? | বিবরণ |
|---|---|---|
full_name | হ্যাঁ | কাস্টমারের নাম |
email | হ্যাঁ | কাস্টমারের ইমেইল |
amount | হ্যাঁ | টাকার পরিমাণ |
metadata | হ্যাঁ | যেকোনো object, হুবহু ফেরত আসে (যেমন order_id) |
redirect_url | হ্যাঁ | পেমেন্টের পর কাস্টমার এখানে ফিরবে, সাথে invoice_id |
cancel_url | হ্যাঁ | কাস্টমার বাতিল করলে |
webhook_url | না | পেমেন্ট সফল হলে সার্ভার-টু-সার্ভার নোটিফিকেশন |
return_type | না | GET (?invoice_id=) বা POST (ফর্ম)। ডিফল্ট POST |
phone | না | কাস্টমারের মোবাইল |
{
"full_name": "Rahim Uddin",
"email": "rahim@example.com",
"amount": "500",
"metadata": { "order_id": "1001" },
"redirect_url": "https://yourshop.com/thank-you",
"cancel_url": "https://yourshop.com/cart",
"webhook_url": "https://yourshop.com/dreampay-webhook",
"return_type": "GET"
}{
"status": true,
"message": "Payment Url",
"payment_url": "https://pay.dreamlanceit.com/payment/Erm9wzjM0FBwjSYT0QVb",
"invoice_id": "Erm9wzjM0FBwjSYT0QVb"
}$ch = curl_init('https://pay.dreamlanceit.com/api/checkout-v2');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'RT-UDDOKTAPAY-API-KEY: YOUR_API_KEY',
],
CURLOPT_POSTFIELDS => json_encode([
'full_name' => 'Rahim Uddin',
'email' => 'rahim@example.com',
'amount' => 500,
'metadata' => ['order_id' => 1001],
'redirect_url' => 'https://yourshop.com/thank-you',
'cancel_url' => 'https://yourshop.com/cart',
'webhook_url' => 'https://yourshop.com/dreampay-webhook',
]),
]);
$res = json_decode(curl_exec($ch), true);
header('Location: ' . $res['payment_url']); // send the customer to payপেমেন্ট ভেরিফাই
POST /api/verify-payment বডি: {"invoice_id": "..."}। অর্ডার ডেলিভারির আগে সবসময় এটা দিয়ে নিশ্চিত হোন।
{
"full_name": "Rahim Uddin",
"email": "rahim@example.com",
"amount": "500.00",
"fee": "0.00",
"charged_amount": "500.00",
"invoice_id": "Erm9wzjM0FBwjSYT0QVb",
"metadata": { "order_id": "1001" },
"payment_method": "bkash",
"sender_number": "01311111111",
"transaction_id": "BJ71KX9QWE",
"date": "2026-10-06 14:00:50",
"status": "COMPLETED",
"currency": "BDT"
}
status: COMPLETED, PENDING, CANCELLED, REFUNDED বা ERROR। কাস্টমার যে মেথডে ফি দিয়েছে তা fee তে, মোট charged_amount এ।
Webhook
পেমেন্ট সফল বা রিফান্ড হলে আপনার webhook_url এ verify-payment এর মতোই JSON POST হবে। হেডার:
X-DreamPay-Signature=hex(HMAC-SHA256(webhook secret, raw body))X-DreamPay-Event=payment.completedবাpayment.refundedRT-UDDOKTAPAY-API-KEY= আপনার API key (UddoktaPay প্লাগিনের জন্য)
২xx না পেলে আবার পাঠানো হয়: ১ মিনিট, ৫ মিনিট, ১৫ মিনিট, ১ ঘণ্টা, ৬ ঘণ্টা পর। ড্যাশবোর্ড থেকে প্রতিটা ডেলিভারি দেখা ও আবার পাঠানো যায়।
// dreampay-webhook.php
$body = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_DREAMPAY_SIGNATURE'] ?? '';
if (! hash_equals(hash_hmac('sha256', $body, 'YOUR_WEBHOOK_SECRET'), $sig)) {
http_response_code(401); exit;
}
$data = json_decode($body, true);
// Always confirm with verify-payment before you deliver the order
if ($data['status'] === 'COMPLETED') {
// mark order $data['metadata']['order_id'] as paid
}
http_response_code(200);
রিফান্ড
POST /api/refund-payment
{ "transaction_id": "BJ71KX9QWE", "payment_method": "bkash", "amount": "500", "reason": "Out of stock" }
পার্সোনাল/এজেন্ট নম্বরের রিফান্ড আপনি নিজে Send Money করে দেবেন — DreamPay রেকর্ড রাখে। bKash API, Stripe, PayPal এর মতো গেটওয়েতে রিফান্ড সরাসরি হয়।
টেস্ট মোড (Sandbox)
ড্যাশবোর্ড → Brands → "Test key (sandbox)" টিক দিয়ে নতুন key বানান। টেস্ট key দিয়ে তৈরি পেমেন্টে:
- পেমেন্ট পেজে হলুদ "TEST MODE" ব্যানার আর Simulate successful payment / Simulate cancel বাটন থাকে।
- আপনার সাইট স্বাভাবিক redirect, webhook আর verify-payment পায় — সাথে
"test_mode": true। টেস্ট পেমেন্ট verify করতে টেস্ট key ব্যবহার করুন; লাইভ key দিয়ে টেস্ট পেমেন্ট খুঁজে পাওয়া যায় না। - টেস্ট webhook এ
X-DreamPay-Mode: testহেডার থাকে, আর সিগনেচার হয় টেস্ট API key দিয়ে (HMAC-SHA256(test key, body)) — তাই লাইভ সাইট কখনো টেস্ট পেমেন্টকে আসল ভেবে নেয় না। - আসল টাকা নেওয়া হয় না, রিপোর্ট বা প্যাকেজ লিমিটে গোনা হয় না, ৩ দিন পর মুছে যায়।
টেস্ট key এর শুরুতে test_ থাকে, তাই ভুল করে লাইভে বসালে সহজে ধরা পড়ে।
অন্যান্য API
GET /api/v1/ping— key ঠিক আছে কিনা, ব্র্যান্ডের নাম আর চালু মেথডগুলো।GET /api/v1/payments/{invoice_id}— verify-payment এর GET রূপ।POST /api/v1/trx/verify—{"transaction_id": "...", "amount": 500}: কোনো চেকআউট ছাড়াই (যেমন ফেসবুক পেজ বা চ্যাটবটে) কাস্টমারের দেওয়া TrxID আপনার ফোনে আসা SMS এর সাথে মিলিয়ে দেখুন।POST /api/v1/trx/confirm{"id": ..., "transaction_id": "...", "amount": 500}(id আসে verify থেকে) — মিলে গেলে TrxID টা "ব্যবহৃত" করে দিন, যেন দ্বিতীয়বার ব্যবহার না হয়। এই দুটো শুধু লাইভ key দিয়ে চলে।
Error ও লিমিট
401— API key ভুল বা বন্ধ।402— অ্যাকাউন্টের প্যাকেজ শেষ বা মাসিক পেমেন্ট লিমিট পূর্ণ।422— কোনো ফিল্ড ভুল;messageএ কারণ লেখা থাকে।429— খুব দ্রুত অনেক রিকোয়েস্ট; একটু পরে আবার চেষ্টা করুন।
Error বডি: {"status": false, "message": "..."}