FA

فروش اشتراک VPN با ربات تلگرام در ازای USDT: راه‌اندازی گام‌به‌گام

فروش اشتراک VPN با ربات تلگرام در ازای USDT

بسیاری از سرویس‌های VPN از طریق تلگرام می‌فروشند: مشتری از قبل در چت است، پس خرید هم باید همان‌جا انجام شود. این راهنما نشان می‌دهد چطور یک ربات آماده را روی سرور خودتان راه‌اندازی کنید: مشتری پلن را انتخاب می‌کند، با USDT روی شبکه‌های TRC20، ERC20 یا BEP20 یا با کوین دیگری پرداخت می‌کند و ربات کاربر را در پنل Marzban، 3x-ui یا Remnawave شما می‌سازد یا تمدید می‌کند و لینک اشتراک را در همان چت می‌فرستد. به کیف پول یا نود بلاکچین نیازی نیست: پول به موجودی فروشنده شما در SnapEX Pay می‌رسد.

فروش چطور انجام می‌شود

customer → /start → taps a plan
bot → SnapEX Pay: invoice → "Pay" button
customer → pays on the SnapEX Pay page
SnapEX Pay → signed webhook → bot
bot → GET invoice from the API → paid?
bot → panel: create or extend user
bot → customer: subscription link
  1. ‏/start پلن‌های شما را به شکل دکمه نشان می‌دهد. هر لمس دکمه یک فاکتور SnapEX Pay می‌سازد و ربات با دکمه Pay (پرداخت) پاسخ می‌دهد.
  2. مشتری در صفحه پرداخت کوین را انتخاب و پرداخت می‌کند. وقتی فاکتور پرداخت شد، SnapEX Pay یک وب‌هوک امضاشده به ربات می‌فرستد.
  3. ربات امضا را بررسی می‌کند، فاکتور را از API ‏SnapEX Pay می‌پرسد و فقط اگر وضعیت آنجا paid باشد و فاکتور متعلق به سفارشی باشد که خود ربات ساخته، کاربر را فعال می‌کند.

نام کاربری در پنل tg<telegram_id> است، پس هر حساب تلگرام دقیقاً به یک کاربر VPN وصل است.

چه چیزهایی لازم است

  • توکن ربات از @BotFather.
  • دسترسی مدیر به پنل Marzban، 3x-ui (MHSanaei) یا Remnawave (نسخه 2.x یا 3.x). بدون پنل، ربات فقط پرداخت می‌گیرد (PANEL_TYPE=none) و دسترسی را خودتان می‌دهید.
  • سروری با Docker Compose (یا Python 3.12).
  • یک آدرس عمومی HTTPS برای وب‌هوک: ‏SnapEX Pay وب‌هوک را فقط به آدرس‌های https:// می‌فرستد.
  • حساب فروشنده SnapEX Pay: ثبت‌نام در pay.snapex.pro.

ربات از long polling استفاده می‌کند، پس تلگرام به پورت باز روی سرور شما نیاز ندارد؛ فقط پورت وب‌هوک پشت HTTPS باید در دسترس باشد.

گام ۱. دانلود ربات

آرشیو snapexpay-telegram-vpn-bot-1.1.0.zip را دانلود کنید (مجوز MIT، رایگان) و فایل تنظیمات را بسازید:

curl -fsSLO https://pay.snapex.pro/downloads/telegram-vpn-bot/snapexpay-telegram-vpn-bot-1.1.0.zip
unzip snapexpay-telegram-vpn-bot-1.1.0.zip
cd snapexpay-telegram-vpn-bot-1.1.0
cp .env.example .env

همه تنظیمات در .env است. توکن ربات را در TELEGRAM_BOT_TOKEN و نام فروشگاه را در SHOP_NAME بگذارید؛ این نام در پیام /start و در توضیح فاکتور نمایش داده می‌شود.

گام ۲. دریافت کلید API

در پنل فروشنده SnapEX Pay صفحه Developers را باز کنید و یک کلید API صادر کنید. کلید فقط یک بار نمایش داده می‌شود؛ همان لحظه آن را در SNAPEX_API_KEY کپی کنید. کلیدی که در پنل صادر می‌شود همه دسترسی‌های Merchant API را دارد، از جمله invoices.read و invoices.write که ربات لازم دارد. صدور دوباره کلید، کلید قبلی را فوراً باطل می‌کند؛ پس همان لحظه .env را هم به‌روز کنید.

دو تنظیم دیگر پرداخت:

  • ‏SNAPEX_FEE_ON: ‏merchant (پیش‌فرض)، مشتری دقیقاً قیمت پلن را می‌پردازد و کارمزدها از مبلغ دریافتی شما کم می‌شود؛ customer، کارمزدها روی مبلغ اضافه می‌شود. بیشتر: کارمزد فاکتور کریپتو را چه کسی می‌پردازد.
  • ‏SNAPEX_EXPIRES_MINUTES: چند دقیقه فاکتور قابل پرداخت است؛ پیش‌فرض ۶۰ دقیقه (از ۱ تا ۱۴۴۰).

گام ۳. تعریف پلن‌ها

پلن‌ها یک خط در PLANS هستند: id:days:price_usd:traffic_bytes، جداشده با ویرگول. مقدار 0 بایت یعنی ترافیک نامحدود.

PLANS=week:7:2.00:0,month:30:5.00:0,quarter:90:12.00:107374182400

اینجا quarter یعنی ۹۰ روز با ۱۰۰ GiB ترافیک. ‏id روی دکمه نمایش داده می‌شود («month — $5.00 / 30d»)، پس کوتاهش کنید: حروف لاتین، ارقام، _ و -. قیمت‌ها به دلار است؛ حداقل مبلغ فاکتور ⁦0.50 USD⁩ است.

هر سفارش یک نسخه از پلن خودش را نگه می‌دارد، پس بعداً می‌توانید قیمت‌ها را عوض کنید بدون اینکه به سفارش‌های پرداخت‌شده دست بزنید.

گام ۴. اتصال پنل

‏PANEL_TYPE و اطلاعات دسترسی پنل خود را تنظیم کنید.

Marzban: ‏PANEL_TYPE=marzban:

  • ‏MARZBAN_URL، MARZBAN_USERNAME، MARZBAN_PASSWORD: آدرس پنل و ورود مدیر (یا یک توکن مدیر آماده در MARZBAN_TOKEN).
  • ‏MARZBAN_SUB_URL: فقط اگر Marzban لینک‌های نسبی /sub/<token> برمی‌گرداند (XRAY_SUBSCRIPTION_URL_PREFIX خالی است)؛ پایه عمومی لینک.

3x-ui: ‏PANEL_TYPE=3xui:

  • ‏XUI_URL: آدرس پنل همراه با web base path، اگر تنظیمش کرده‌اید (https://xui.example.com:2053/secretpath).
  • ‏XUI_USERNAME، XUI_PASSWORD: احراز هویت دومرحله‌ای برای این حساب باید خاموش باشد.
  • ‏XUI_INBOUND_ID: اینباندی که کلاینت‌های جدید به آن اضافه می‌شوند (vless، vmess، trojan یا shadowsocks).
  • ‏XUI_SUB_URL: پایه اشتراک، مثلاً https://xui.example.com:2096/sub. بدون آن ربات فقط subId را می‌فرستد.

Remnawave: ‏PANEL_TYPE=remnawave:

  • ‏REMNAWAVE_URL و REMNAWAVE_TOKEN: آدرس پنل و یک توکن API از بخش API Tokens.
  • ‏REMNAWAVE_SQUAD_UUIDS: اسکوادهای داخلی برای کاربران جدید، جداشده با ویرگول. بدون اسکواد، کاربر جدید هیچ سروری ندارد.

گام ۵. اجرای ربات پشت HTTPS

docker compose up -d --build
docker compose logs -f bot

ربات روی پورت 8080 گوش می‌دهد: /webhook برای SnapEX Pay و /health برای بررسی سلامت. آن را پشت یک پروکسی معکوس با TLS قرار دهید، مثلاً Caddy:

pay-bot.example.com {
    reverse_proxy 127.0.0.1:8080
}

پروکسی باید بدنه درخواست را بدون تغییر عبور دهد؛ امضا روی بدنه خام محاسبه می‌شود.

گام ۶. تنظیم وب‌هوک

در پنل فروشنده، در صفحه Developers، آدرس وب‌هوک https://pay-bot.example.com/webhook را وارد و ذخیره کنید. رمز امضای whsec_… فقط یک بار، درست پس از اولین ذخیره، نمایش داده می‌شود؛ آن را در SNAPEX_WEBHOOK_SECRET کپی کنید و ربات را ری‌استارت کنید: docker compose up -d.

در پنل فروشنده برای هر حساب یک آدرس وب‌هوک وجود دارد و همه رویدادها به آن می‌رسند. ربات فقط به رویدادهای فاکتور واکنش نشان می‌دهد و دریافت بقیه را تأیید می‌کند.

ربات اعلان را این‌طور بررسی می‌کند:

  • هدر Webhook-Signature: ‏HMAC-SHA256 از {Webhook-Timestamp}.{raw request body} با رمز شما؛ درخواست‌های بدون امضا یا دست‌کاری‌شده 401 می‌گیرند؛
  • اختلاف Webhook-Timestamp با ساعت سرور حداکثر ۵ دقیقه؛ NTP را روشن نگه دارید؛
  • خود فاکتور که با کلید شما دوباره از API ‏SnapEX Pay خوانده می‌شود: کاربر فقط وقتی فعال می‌شود که وضعیت آنجا paid باشد.

اگر پنل یا API ‏SnapEX Pay در آن لحظه در دسترس نباشد، ربات 502 پاسخ می‌دهد و SnapEX Pay ارسال را دوباره تلاش می‌کند (تا ۵ بار). ارسال‌های تکراری و هم‌زمان، فاکتور را فقط یک بار اعمال می‌کنند. درباره امضا و تلاش‌های دوباره: وب‌هوک پرداخت کریپتو.

گام ۷. خرید تست بدون پول واقعی

  1. ‏SNAPEX_ENVIRONMENT=test را تنظیم و ری‌استارت کنید: docker compose up -d.
  2. از حساب تلگرام خودتان به ربات /start بفرستید و یک پلن را بزنید.
  3. Pay را بزنید. صفحه SnapEX Pay برچسب Test دارد. هر کوین و شبکه‌ای را انتخاب کنید: صفحه یک آدرس تست نشان می‌دهد و حدود ۱۰ ثانیه بعد پرداخت خودبه‌خود تأیید می‌شود. لازم نیست چیزی بفرستید.
  4. ربات باید «Payment received» (پرداخت دریافت شد) و لینک اشتراک را بفرستد و کاربر tg<your telegram id> باید در پنل ظاهر شود. اگر نشد، docker compose logs -f bot و گزارش ارسال‌ها در صفحه Developers را ببینید.
  5. ‏SNAPEX_ENVIRONMENT=live را تنظیم و ری‌استارت کنید.

تا وقتی ربات روی test است، هر پلنی که از طریق آن خریده شود بدون پول فعال می‌شود؛ پس تست را کوتاه نگه دارید. بیشتر: چگونه پرداخت کریپتو را بدون پول واقعی تست کنیم.

مشتری چه می‌بیند

  • ‏/start: نام فروشگاه شما، یک خط درباره پرداخت با USDT (TRC20 / ERC20 / BEP20) یا کوین‌های دیگر، و دکمه‌های پلن.
  • پس از لمس دکمه: پلن، تعداد روزها، قیمت و شماره فاکتور، به‌علاوه دکمه «Pay $5.00 with crypto» (پرداخت ⁦$5.00⁩ با کریپتو).
  • صفحه SnapEX Pay با انتخاب کوین: USDT روی TRC20، ERC20 و BEP20 و کوین‌های دیگر (در مجموع بیش از ۵۰) وقتی SnapEX Pay آن‌ها را برای مبلغ فاکتور ارائه می‌دهد.
  • پس از پرداخت: «Payment received» (پرداخت دریافت شد) و لینک اشتراک در همان چت. با PANEL_TYPE=none پیام می‌گوید که مدیر به‌زودی دسترسی را می‌فرستد.

پیام‌های خود ربات به انگلیسی است؛ فقط نام فروشگاه و نام پلن‌ها از شماست.

مشتری بازگشتی از همان حساب تلگرام پرداخت می‌کند و کاربرش از تاریخ پایان فعلی تمدید می‌شود (یا از اکنون اگر آن تاریخ گذشته باشد)؛ پلن دارای محدودیت ترافیک سهمیه تازه‌ای شروع می‌کند. جزئیات: تمدید اشتراک VPN با کریپتو.

اگر مشتری کمتر از مبلغ کل بفرستد، کاربر فعال نمی‌شود: ربات فقط برای فاکتور paid دسترسی می‌دهد. مبلغ دریافت‌شده به موجودی SnapEX Pay شما می‌رسد و باقی را خودتان با مشتری حل می‌کنید. کم‌پرداخت چطور کار می‌کند: مشتری کمتر از مبلغ فاکتور فرستاد.

اگر چیزی کار نکرد

  • پس از زدن پلن «Payment is unavailable right now» (پرداخت در حال حاضر در دسترس نیست). ربات نتوانست فاکتور بسازد: SNAPEX_API_KEY (کلید اشتباه یا باطل‌شده) و لاگ‌ها را بررسی کنید.
  • وب‌هوک 401 «bad webhook signature» می‌گیرد. ‏SNAPEX_WEBHOOK_SECRET مطابقت ندارد یا پروکسی بدنه درخواست را تغییر می‌دهد. همگام بودن ساعت سرور را هم بررسی کنید.
  • مشتری پرداخت کرده اما چیزی نگرفته. در لاگ‌ها دنبال provision failed بگردید. ‏SnapEX Pay ارسال را دوباره تلاش می‌کند؛ وقتی پنل دوباره کار کند، ارسال بعدی کاربر را فعال می‌کند، یا می‌توانید ارسال را از گزارش در پنل فروشنده دوباره بفرستید.
  • Marzban لینک بدون هاست می‌فرستد. ‏XRAY_SUBSCRIPTION_URL_PREFIX را در Marzban یا MARZBAN_SUB_URL را در ربات تنظیم کنید.
  • 3x-ui: «login failed». ‏XUI_URL (همراه با web base path) و اطلاعات ورود را بررسی کنید و احراز هویت دومرحله‌ای را برای آن حساب خاموش کنید.
  • Remnawave: کاربر ساخته می‌شود اما اشتراک خالی است. ‏REMNAWAVE_SQUAD_UUIDS را روی اسکوادهایی بگذارید که نودهای شما در آن‌ها هستند.
  • چند نسخه از ربات. برای هر DATA_DIR فقط یک نمونه اجرا کنید: محافظت در برابر تکرار در یک پروسه و فایل SQLite آن کار می‌کند.

هزینه

۱٪ برای هر پرداخت، بدون هزینه راه‌اندازی و بدون هزینه ماهانه. ربات رایگان است.

صفحه ربات: ربات تلگرام VPN. به‌جای آن از فروشگاه خود پنل می‌فروشید؟ ببینید: پرداخت کریپتو در Xboard و V2Board. مرور برای سرویس‌های VPN: پرداخت کریپتو برای VPN. ثبت‌نام: pay.snapex.pro.

راهنماهای بیشتر

پرداخت کریپتو در Xboard و V2Board: دریافت USDT برای اشتراک VPN گام‌به‌گام چگونه SnapEX Pay را به پنل Xboard یا V2Board وصل کنیم: نصب افزونه، افزودن روش پرداخت، تنظیم وب‌هوک، تبدیل قیمت‌های CNY و ارزهای دیگر به USD و تست سفارش بدون پول واقعی. تمدید اشتراک VPN با کریپتو: بدون کاربر تکراری و بدون روزهای ازدست‌رفته ماژول‌های SnapEX Pay برای Marzban، 3x-ui، Remnawave و ربات تلگرام VPN با پرداخت دوباره چه می‌کنند: روزهای جدید از چه تاریخی حساب می‌شوند و ترافیک، کانفیگ و وب‌هوک‌های تکراری چه می‌شوند. چگونه درگاه پرداخت کریپتو برای شرکت هاستینگ انتخاب کنیم: ۸ سؤال پیش از اتصال چک‌لیستی برای ارائه‌دهندگان هاستینگ و VPS که درگاه پرداخت کریپتو انتخاب می‌کنند: ماژول بیلینگ، نحوه پرداخت‌شده‌شدن فاکتور، کم‌پرداخت، کارمزد، ارز تسویه، کوین‌ها، حالت تست و بیلینگ غیردلاری. مشتری کمتر از مبلغ فاکتور فرستاد: کم‌پرداخت در کریپتو چگونه کار می‌کند صرافی‌ها اغلب کارمزد برداشت را از مبلغ کم می‌کنند و فاکتور کریپتو ناقص می‌رسد. SnapEX Pay با کم‌پرداخت چه می‌کند، چه وب‌هوک‌هایی دریافت می‌کنید و با سفارش چه کنید. کارمزد فاکتور کریپتو را چه کسی می‌پردازد: شما یا مشتری در SnapEX Pay برای هر فاکتور انتخاب می‌کنید که کارمزد سرویس و هزینه شبکه را چه کسی بپردازد. fee_on چه می‌کند و چگونه مبلغ پرداختی مشتری و مبلغ دریافتی شما را تغییر می‌دهد. مقایسه SnapEX Pay با NOWPayments، Cryptomus و CoinGate: کارمزد و ماژول‌های آماده مقایسه SnapEX Pay با NOWPayments، Cryptomus و CoinGate از نظر کارمزد اعلام‌شده، هزینه ماهانه و ماژول‌های آماده برای بیلینگ هاستینگ، پنل‌های VPN و فروشگاه‌ها. داده‌های رقبا از سایت‌های خودشان، ۱۱ اکتبر ۲۰۲۶. چگونه پرداخت کریپتو را بدون پول واقعی تست کنیم فاکتورهای تست در SnapEX Pay همان وضعیت‌ها و همان وب‌هوک‌های فاکتورهای واقعی را دارند، اما خودبه‌خود تأیید می‌شوند و به موجودی شما دست نمی‌زنند. روش استفاده از آن‌ها در این راهنما. وب‌هوک‌های پرداخت کریپتو: بررسی امضا، تکرارها و تحویل‌های تکراری وب‌هوک‌های SnapEX Pay چگونه امضا و ارسال می‌شوند، چگونه آن‌ها را در PHP و Node.js بررسی کنید و چگونه handler خود را در برابر تکرارها، تحویل‌های تکراری و رویدادهای نامرتب امن کنید.

آماده دریافت کریپتو هستید؟

حساب فروشنده بسازید و کلید API بگیرید. 1٪ برای هر پرداخت، بدون هزینه ماهانه.