شروع سریع
این صفحه برای کسانی است که میخواهند در کوتاهترین زمان ممکن اولین تراکنش را بزنند. در پایان این پنج دقیقه، یک بکاند ساده دارید که URL پرداخت را تولید و تراکنش را Verify میکند.
مرحله ۱: دریافت کلید درگاه
- در باسلام ثبتنام کنید.
- احراز هویت توسعهدهنده را در پنل تکمیل کنید.
- از بخش هسته مالی، درگاه پرداخت اینترنتی کلید امنیتی درگاه خود را دریافت کنید. (
X-Gateway-Secret)
مرحله ۲: ایجاد پیشتراکنش
درخواست (Request)
POST https://openapi.basalam.com/v1/pay/pre-transactions
X-Gateway-Secret: your_gateway_secret
Content-Type: application/json{
"reference_id": "ORDER-20260515-12345",
"amount": 500000,
"callback_url": "https://yoursite.com/payment/callback",
"description": "خرید اشتراک ماهانه پلن طلایی"
}پارامترها
| فیلد | نوع | الزامی | محدودیت | توضیح |
|---|---|---|---|---|
reference_id | string | ✅ | max: 255 | شناسه یکتای سفارش در سیستم شما — نباید تکراری باشد |
amount | integer | ✅ | min: 10000 - max: 100000000000 | مبلغ به ریال (نه تومان) |
callback_url | string | ✅ | باید با http/https شروع شود | آدرس بازگشت پس از پرداخت |
description | string | ❌ | - | توضیحات نمایشی در صفحه پرداخت |
پاسخ موفق (200 OK)
{
"hash_id": "a1b2c3d4e5f6",
"pay_url": "https://apps.basalam.com/pay/a1b2c3d4e5f6",
"order": {
"amount": 500000,
"customer_fee": 5000,
"customer_fee_percentage": 100,
"merchant_fee": 0,
"merchant_fee_percentage": 0,
"total_fee": 5000,
"total_amount": 505000,
},
"expired_at": "2026-05-15T12:30:00Z",
"gateway": {
"title": "فروشگاه شما",
"logo": "https://cdn.basalam.com/logos/your-logo.png"
},
"pay_methods": [
{ "id": 1, "title": "کیف پول باسلام", "driver": "wallet", "enabled": true },
{ "id": 2, "title": "تراز غرفه", "driver": "balance", "enabled": false },
{ "id": 3, "title": "پرداخت آنلاین", "driver": "online", "enabled": true }
]
}فیلدهای مهم پاسخ
hash_id: شناسه پیشتراکنش — در دیتابیس ذخیره کنیدpay_url: لینک صفحه پرداخت — کاربر را به اینجا هدایت کنیدorder.total_amount: مبلغ نهایی شامل کارمزدexpired_at: زمان انقضا — پس از این زمان پیشتراکنش غیرفعال میشودpay_methods: روشهای پرداخت فعال برای درگاه شما
خطاهای احتمالی
| کد | دلیل | راهحل |
|---|---|---|
401 | X-Gateway-Secret نامعتبر | بررسی کنید که Secret صحیح است |
422 | خطای اعتبارسنجی | بررسی کنید: amount >= 10000، callback_url معتبر، reference_id یکتا |
409 | reference_id تکراری | از شناسه جدید استفاده کنید |
نکات پیادهسازی
- ذخیرهسازی:
hash_idرا باorder_idدر دیتابیس مرتبط کنید - Idempotency: قبل از ایجاد پیشتراکنش جدید، بررسی کنید که آیا برای این سفارش قبلاً ایجاد شده یا نه
- مبلغ: همیشه به ریال ارسال کنید (۱ تومان = ۱۰ ریال)
- Timeout: برای درخواست HTTP حداقل ۳۰ ثانیه timeout تنظیم کنید
- این endpoint را فقط از سرور خود فراخوانی کنید. هرگز از کلاینت (مرورگر یا اپلیکیشن موبایل) صدا نزنید.
مرحله ۳: هدایت کاربر به صفحه پرداخت
پس از دریافت موفقیتآمیز pay_url، کاربر را به این آدرس هدایت کنید.
تجربه کاربری در صفحه پرداخت
- کاربر وارد صفحه پرداخت باسلام میشود
- اطلاعات سفارش (مبلغ، توضیحات، لوگوی فروشگاه) نمایش داده میشود
- روشهای پرداخت موجود نمایش داده میشود:
- کیف پول باسلام (id: 1): پرداخت فوری از موجودی کیف پول
- تراز غرفه (id: 2): پرداخت از تراز غرفه (فقط برای فروشندگان)
- پرداخت آنلاین (id: 3): پرداخت با کارت بانکی
- کاربر روش پرداخت را انتخاب و تایید میکند
- در صورت انتخاب پرداخت آنلاین، به درگاه بانک هدایت میشود
- پس از تکمیل، به
callback_urlشما بازمیگردد
پارامترهای Callback URL
کاربر با پارامترهای زیر به callback_url شما بازمیگردد:
https://yoursite.com/payment/callback?status=success&hash_id=a1b2c3d4e5f6| پارامتر | مقادیر احتمالی | توضیح |
|---|---|---|
status | failed, unverified | وضعیت اولیه (قابل اعتماد نیست) |
hash_id | string | شناسه پیشتراکنش |
⚠️ هشدار امنیتی: هرگز به پارامترهای URL اعتماد نکنید. حتماً از endpoint استعلام استفاده کنید
مرحله ۴: استعلام وضعیت (اختیاری)
درخواست (Request)
GET https://openapi.basalam.com/v1/pay/transactions/{hash_id}/inquiry
X-Gateway-Secret: your_gateway_secretپاسخ موفق (200 OK)
{
"hash_id": "a1b2c3d4e5f6",
"reference_id": "ORDER-20260515-12345",
"amount": 505000,
"status": {
"id": 3,
"title": "موفق",
"slug": "success"
},
"callback_url": "https://yoursite.com/payment/callback?status=success&hash_id=a1b2c3d4e5f6",
"expired_at": null,
"created_at": "2026-05-15T11:00:00Z",
"gateway": {
"title": "فروشگاه شما",
"logo": "https://cdn.basalam.com/logos/your-logo.png"
}
}خطاهای احتمالی
| کد | دلیل | راهحل |
|---|---|---|
404 | پیشتراکنش یافت نشد | بررسی کنید hash_id صحیح است |
401 | احراز هویت ناموفق | بررسی کنید X-Gateway-Secret صحیح است |
وضعیتهای تراکنش
| id | slug | عنوان | معنی | اقدام لازم |
|---|---|---|---|---|
1 | pending | در انتظار | تراکنش ایجاد شده اما پرداخت انجام نشده | صبر کنید یا به کاربر اطلاع دهید |
2 | processing | در حال پردازش | پرداخت در حال پردازش است | صبر کنید — معمولاً چند ثانیه |
3 | success | موفق ✅ | پرداخت موفق بوده | سفارش را تایید کنید |
4 | failed | ناموفق ❌ | پرداخت ناموفق بوده | به کاربر اطلاع دهید و سفارش را لغو کنید |
5 | unverified | تایید نشده ⚠️ | پول کسر شده اما تایید نهایی نشده | به صف جاب چک اضافه کنید |
6 | refunded | بازگشت داده شده | مبلغ به کاربر بازگشت داده شده | به کاربر اطلاع دهید |
جزئیات وضعیتها
success (موفق)
- پرداخت کامل شده و تایید شده است
- میتوانید سفارش را تحویل دهید
- این وضعیت قطعی است و تغییر نمیکند (مگر در صورت refund)
failed (ناموفق)
- پرداخت انجام نشده یا رد شده است
- دلایل احتمالی: موجودی کافی نبوده، کاربر پرداخت را لغو کرده، خطا در درگاه بانک
- سفارش را لغو کنید
unverified (تایید نشده) ⚠️
- مهمترین وضعیت برای مدیریت
- پول از حساب کاربر کسر شده اما تایید نهایی از شما دریافت نشده
- متد وریفای تراکنش را باید صدا بزنید
pending و processing
- وضعیتهای موقت
- در انتظار پرداخت کاربر و بازگشت از درگاه
مرحله ۵: وریفای (تایید) تراکنش
زمان استفاده
این endpoint برای زمانی است که:
- تراکنش در وضعیت
unverifiedاست - میخواهید به صورت دستی یا از طریق جاب چک، تراکنش را تایید کنید
درخواست (Request)
POST https://openapi.basalam.com/v1/pay/transactions/{hash_id}/verify
X-Gateway-Secret: your_gateway_secretپاسخ موفق (200 OK)
{
"hash_id": "a1b2c3d4e5f6",
"reference_id": "ORDER-20260515-12345",
"amount": 505000,
"status": {
"id": 3,
"title": "موفق",
"slug": "success"
},
"callback_url": "https://yoursite.com/payment/callback?status=success&hash_id=a1b2c3d4e5f6",
"expired_at": null,
"created_at": "2026-05-15T11:00:00Z",
"gateway": {
"title": "فروشگاه شما",
"logo": "https://cdn.basalam.com/logos/your-logo.png"
}
}خطاهای احتمالی
| کد | دلیل | راهحل |
|---|---|---|
404 | تراکنش یافت نشد | بررسی کنید hash_id صحیح است |
422 | تراکنش قبلاً تایید شده یا وضعیت آن unverified نیست | از endpoint استعلام استفاده کنید |
401 | احراز هویت ناموفق | بررسی کنید X-Gateway-Secret صحیح است |
نکات پیادهسازی
- فقط برای unverified: این endpoint فقط برای تراکنشهای
unverifiedکار میکند - Idempotent: اگر تراکنش قبلاً verify شده باشد، خطای ۴۲۲ برمیگرداند
- در جاب چک: این endpoint را در background job برای تایید خودکار استفاده کنید
مرحله ۵: جاب چک تراکنشهای تایید نشده
وضعیت unverified نیاز به پیگیری خودکار دارد. باید یک background job پیادهسازی کنید که به صورت دورهای تراکنشهای تایید نشده را چک و verify کند.
استراتژی پیشنهادی
هر ۵ دقیقه یکبار
- لیست تراکنشهای unverified را از API بگیر
- برای هر تراکنش verify بزن
- وضعیت را در DB آپدیت کن
- اگر success شد → سفارش را تایید کن
- اگر failed شد → سفارش را لغو کن
- اگر هنوز unverified → در صف نگه دار
روال صحیح جاب چک
- دریافت لیست: از
GET /v1/pay/transactions/unverifiedلیست تراکنشهای unverified را بگیرید - تایید دستی: برای هر تراکنش
POST /v1/pay/transactions/{hash_id}/verifyبزنید - بروزرسانی: وضعیت را در دیتابیس خود آپدیت کنید
- اطلاعرسانی: در صورت موفقیت، به کاربر اطلاع دهید
قوانین مهم
- بازه زمانی: هر ۵ دقیقه یکبار چک کنید
- Pagination: اگر تعداد تراکنشهای unverified زیاد است، از pagination استفاده کنید
- Rate Limiting: بین هر درخواست ۰.۵ ثانیه صبر کنید
- Exponential Backoff: برای جلوگیری از overload:
- اولین چک: بعد از ۵ دقیقه
- دومین چک: بعد از ۱۰ دقیقه
- سومین چک: بعد از ۲۰ دقیقه
- و به همین ترتیب تا حداکثر ۱ ساعت
- حداکثر زمان: تا ۲۴ ساعت بعد از ایجاد تراکنش ادامه دهید
- بعد از ۲۴ ساعت: اگر هنوز
unverifiedبود، با پشتیبانی تماس بگیرید
نکات پیادهسازی جاب چک
- Logging: تمام عملیات را لاگ کنید
- Monitoring: تعداد تراکنشهای unverified را مانیتور کنید
- Alert: اگر تعداد unverified از حد معینی گذشت، هشدار بدهید
- Retry Logic: در صورت خطای شبکه، دوباره تلاش کنید
- Dead Letter Queue: تراکنشهای بیش از ۲۴ ساعت را جدا کنید
Last updated on