پرداخت کریپتو برای Marzban VPN
یک سرویس کوچک روی سرور خودتان که اشتراکهای Marzban VPN را از طریق SnapEX Pay با کریپتو میفروشد. فروشگاه یا ربات تلگرام شما از آن لینک پرداخت میگیرد، مشتری در صفحه SnapEX Pay پرداخت میکند (USDT در TRC20، ERC20 یا BEP20، بهعلاوه روشهای دیگری که SnapEX برای آن مبلغ ارائه میدهد) و پس از پرداخت فاکتور، سرویس کاربر را در پنل Marzban میسازد یا تمدید میکند و لینک اشتراک را برمیگرداند.
رایگان. نسخه 1.0.0.
چه کاری انجام میدهد
- بدون نیاز به کیف پول یا نود بلاکچین.
POST /v1/checkoutبرای یک پلن فاکتور SnapEX Pay میسازد وpay_urlرا برمیگرداند؛GET /v1/orders/{invoice_id}وضعیت و لینک اشتراک را برمیگرداند تا ربات بتواند آن را بررسی کند.- وبهوک امضاشده (HMAC-SHA256، بازه زمانی ۵ دقیقه). به بدنه وبهوک اعتماد نمیشود: فاکتور دوباره از API SnapEX Pay خوانده میشود و کاربر فقط پس از پرداخت ساخته میشود.
- ایمن در برابر تکرار: تحویلهای تکراری یا همزمان وبهوک، هر فاکتور را فقط یک بار اعمال میکنند.
- کاربران جدید همه پروتکلهایی را که در پنل شما inbound دارند میگیرند؛ کاربران موجود از تاریخ انقضای فعلی تمدید میشوند و پلنهای حجمی، سهمیه تازهای روی مصرف فعلی اضافه میکنند.
- پلنها با یک متغیر محیطی تنظیم میشوند؛ سفارشها در SQLite نگهداری میشوند. حالت تست هیچ پول واقعی جابهجا نمیکند.
نصب
- آرشیو را دانلود و از حالت فشرده خارج کنید، سپس در پوشه آن
cp .env.example .envرا اجرا کنید. - در پنل فروشنده SnapEX Pay یک کلید API با دسترسیهای
invoices.readوinvoices.writeبسازید و آن را درSNAPEX_API_KEYقرار دهید. API_TOKEN(مثلاًopenssl rand -hex 32)،MARZBAN_URLو اطلاعات ادمین Marzban (MARZBAN_USERNAMEوMARZBAN_PASSWORD) و پلنهای خود را درPLANSتنظیم کنید (id:days:usd:traffic_bytes، مقدار0بایت = نامحدود).- اجرا کنید:
docker compose up -d، سپسcurl http://127.0.0.1:8080/healthرا بررسی کنید. سرویس را پشت یک reverse proxy با HTTPS قرار دهید. - در پنل یک endpoint وبهوک
https://<your service>/webhookبا حداقل رویدادinvoice.paidاضافه کنید، رمز امضای آن را درSNAPEX_WEBHOOK_SECRETبگذارید و سرویس را ریاستارت کنید. - از فروشگاه یا ربات خود
POST /v1/checkoutرا باAuthorization: Bearer <API_TOKEN>فراخوانی کنید،pay_urlرا برای مشتری بفرستید و برای دریافت لینک اشتراکGET /v1/orders/{invoice_id}را بررسی کنید. برای تست بدون پول واقعیSNAPEX_ENVIRONMENT=testرا تنظیم کنید.
تنظیمات
| SNAPEX_API_KEY | کلید API فروشنده (smk_…) با invoices.read و invoices.write. |
|---|---|
| SNAPEX_WEBHOOK_SECRET | رمز امضای (whsec_…) endpoint وبهوک شما. |
| SNAPEX_ENVIRONMENT | live یا test. فاکتورهای تست پول واقعی جابهجا نمیکنند. |
| SNAPEX_FEE_ON | چه کسی کارمزد سرویس SnapEX را میپردازد: merchant یا customer. |
| API_TOKEN | توکن Bearer که ربات یا فروشگاه شما به /v1/checkout و /v1/orders/* میفرستد. |
| MARZBAN_URL, MARZBAN_USERNAME, MARZBAN_PASSWORD | آدرس پنل و اطلاعات ادمین (یا یک MARZBAN_TOKEN آماده؛ توکنها منقضی میشوند، پس برای سرویسی که همیشه روشن است نام کاربری و رمز بهتر است). |
| PLANS | مقادیر جداشده با کاما به شکل id:days:usd:traffic_bytes، پیشفرض month:30:5.00:0,quarter:90:12.00:0. |
سؤالات
آیا میتوانم از ربات تلگرام استفاده کنم؟
بله. ربات POST /v1/checkout را فراخوانی میکند، pay_url را برای کاربر میفرستد و برای لینک اشتراک GET /v1/orders/{invoice_id} را بررسی میکند. یک ربات تلگرام کامل برای Marzban، 3x-ui و Remnawave هم وجود دارد.
کاربر موجودی که دوباره پرداخت میکند چه میشود؟
اشتراک از تاریخ انقضای فعلی تمدید میشود (یا از همین حالا، اگر قبلاً منقضی شده باشد)؛ پلنهای حجمی سهمیه تازهای روی مصرف اضافه میکنند.
آیا یک وبهوک میتواند کاربر را دو بار بسازد؟
خیر. تحویلهای تکراری یا همزمان، هر فاکتور را فقط یک بار اعمال میکنند و سرویس پیش از هر کاری فاکتور را دوباره از API SnapEX Pay میخواند.
اگر هنگام رسیدن پرداخت، پنل Marzban در دسترس نباشد چه؟
هندلر وبهوک 502 برمیگرداند و SnapEX Pay بعداً دوباره ارسال میکند.
چرا به HTTPS نیاز دارم؟
SnapEX Pay وبهوکها را فقط به آدرسهای https:// میفرستد، پس سرویس را پشت nginx، Caddy یا Traefik قرار دهید.
یکپارچهسازیهای دیگر
آماده دریافت کریپتو هستید؟
حساب فروشنده بسازید، کلید API بگیرید و ماژول را وصل کنید. 1٪ برای هر پرداخت، بدون هزینه ماهانه.