D DreamPay
REST API · JSON

ডেভেলপার ডকুমেন্টেশন

৩টা কল দিয়েই পুরো ইন্টিগ্রেশন: পেমেন্ট তৈরি করুন → কাস্টমারকে payment_url এ পাঠান → webhook পেলে বা ফিরে এলে verify করুন। API টি UddoktaPay-compatible, তাই আগের কোড প্রায় বদলাতে হবে না।

শুরু করুন

  1. ফ্রি অ্যাকাউন্ট খুলুন → Brands পেজ থেকে API key ও webhook secret কপি করুন।
  2. Base URL: https://pay.dreamlanceit.com (নিজের ব্র্যান্ড ডোমেইন যোগ করলে সেটাও ব্যবহার করতে পারবেন)।
  3. প্রথমে একটা টেস্ট 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নাকাস্টমারের মোবাইল
Request
{
  "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"
}
Response 200
{
  "status": true,
  "message": "Payment Url",
  "payment_url": "https://pay.dreamlanceit.com/payment/Erm9wzjM0FBwjSYT0QVb",
  "invoice_id": "Erm9wzjM0FBwjSYT0QVb"
}
PHP উদাহরণ
$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.refunded
  • RT-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": "..."}