فصل ۱۶: اضافه کردن پرداخت آنلاین در ربات تلگرام

""

۱. مقدمه

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

📌 مثال‌هایی از استفاده:

  • فروش اشتراک VIP یا دوره آموزشی
  • فروش فایل یا محتوای دیجیتال
  • رزرو خدمات (مثل مشاوره یا سالن ورزشی)
  • دریافت کمک مالی (Donation)

۲. روش‌های پیاده‌سازی پرداخت در ربات تلگرام

روشتوضیحمزایامعایب
پرداخت داخلی تلگرام (Telegram Payments)استفاده از قابلیت Billing داخلی تلگرام و اتصال به Providerهایی مثل Stripeامن و مستقیم در تلگرامهمه کشورها پشتیبانی نمی‌شوند، برخی Providerها محدودیت دارند
درگاه پرداخت ایرانی (مانند Zarinpal, IdPay, NextPay)ایجاد لینک پرداخت خارج از تلگرام، دریافت نتیجه و فعال‌سازیمناسب ایران، آسان‌ترخارج شدن کاربر از تلگرام برای پرداخت
سیستم شبیه‌سازی پرداخت (Manual)کاربر رسید یا کد تراکنش را ارسال می‌کند و ادمین تایید می‌کندآسان و بدون APIغیراتوماتیک، خطاهای انسانی

در این فصل هر دو حالت حرفه‌ای رو توضیح می‌دیم، مخصوصاً درگاه‌های ایرانی و پرداخت داخلی تلگرام.


۳. پیش‌نیازها

  1. داشتن حساب فعال در یکی از سرویس‌های پرداخت آنلاین.
  2. دریافت API Key یا Merchant ID.
  3. نصب کتابخانه‌های لازم:
pip install python-telegram-bot requests

۴. پرداخت با درگاه ایرانی (نمونه زرين‌پال)

مراحل کلی:

  1. کاربر در ربات یک دستور برای خرید می‌زند.
  2. ربات درخواست پرداخت (Create Payment Request) به درگاه می‌فرستد.
  3. درگاه لینک پرداخت برمی‌گرداند.
  4. کاربر روی لینک کلیک می‌کند و پرداخت را انجام می‌دهد.
  5. درگاه به ربات اطلاع می‌دهد که پرداخت موفق بوده.
  6. ربات نقش کاربر یا خدمات را فعال می‌کند.

مثال عملی – اتصال به API زرین‌پال

📌 مستندات API زرین‌پال: https://www.zarinpal.com

import requests
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes

TOKEN = "توکن_ربات"
API_KEY = "کد_مرچنت_زرین‌پال"
CALLBACK_URL = "https://example.com/verify"  # آدرس بازگشت

async def buy(update, context):
    description = "خرید اشتراک VIP"
    amount = 10000  # مبلغ به ریال

    headers = {"Content-Type": "application/json"}
    data = {
        "merchant_id": API_KEY,
        "amount": amount,
        "callback_url": CALLBACK_URL,
        "description": description
    }

    res = requests.post("https://api.zarinpal.com/pg/v4/payment/request.json", json=data, headers=headers)
    result = res.json()

    if result.get("data"):
        link = f"https://www.zarinpal.com/pg/StartPay/{result['data']['authority']}"
        await update.message.reply_text(f"برای پرداخت روی لینک زیر کلیک کنید: \n{link}")
    else:
        await update.message.reply_text("❌ خطا در ایجاد لینک پرداخت.")

app = ApplicationBuilder().token(TOKEN).build()
app.add_handler(CommandHandler("buy", buy))
app.run_polling()

📌 توضیح مهم:

  • CALLBACK_URL باید روی یک سرور باشد تا بتوانید نتیجه پرداخت را تایید کنید.
  • بعد از پرداخت، باید با API Verify اعتبارسنجی کنید و سپس کاربر را به نقش VIP ارتقا دهید.

۵. پرداخت داخلی تلگرام (Telegram Payments)

تلگرام سیستم پرداخت داخلی دارد که با Providerهای بین‌المللی کار می‌کند (Stripe، Payme، …).

📌 مراحل:

  1. ثبت Bot در BotFather و فعال کردن Payments.
  2. دریافت Provider Token.
  3. ساخت Invoice در ربات.
  4. کاربر پرداخت را انجام می‌دهد و تلگرام به شما اطلاع می‌دهد.

نمونه کد با Telegram Payments

from telegram.ext import ApplicationBuilder, CommandHandler, PreCheckoutQueryHandler
from telegram.ext import ContextTypes

TOKEN = "توکن_ربات"
PROVIDER_TOKEN = "توکن_پرداخت"

async def start(update, context):
    prices = [
        {"label": "اشتراک VIP یک ماهه", "amount": 50000},  # مبلغ به سنت
    ]
    await update.message.reply_invoice(
        title="خرید اشتراک VIP",
        description="دسترسی به بخش ویژه ربات برای یک ماه",
        payload="VIP-ONE-MONTH",
        provider_token=PROVIDER_TOKEN,
        start_parameter="vip-subscription",
        currency="IRR",  # یا USD بسته به Provider
        prices=prices
    )

async def precheckout(update, context):
    query = update.pre_checkout_query
    await query.answer(ok=True)

async def successful_payment(update, context):
    await update.message.reply_text("✅ پرداخت با موفقیت انجام شد، عضویت VIP فعال شد!")

app = ApplicationBuilder().token(TOKEN).build()
app.add_handler(CommandHandler("buyvip", start))
app.add_handler(PreCheckoutQueryHandler(precheckout))
app.add_handler(CommandHandler("successful", successful_payment))
app.run_polling()

📌 مزایا: کاربر بدون خروج از تلگرام پرداخت می‌کند.
📌 محدودیت: خیلی از Providerها برای ایران فعال نیستند.


۶. نکات امنیتی در پرداخت آنلاین

  • هرگز API Key یا Merchant ID را در مخزن عمومی قرار ندهید (GitHub، …).
  • تراکنش‌ها را Verify کنید، حتی اگر کاربر لینک پرداخت را ارسال کند.
  • برای هر تراکنش، شناسه یکتا (Transaction ID) ایجاد کنید.
  • پیام تایید نهایی را فقط بعد از تایید از درگاه بفرستید.

۷. نکات بهبود تجربه کاربر

  • بعد از پرداخت موفق، یک پیام خوش‌آمد شخصی بفرستید.
  • مدت باقی‌مانده اشتراک را همیشه قابل مشاهده کنید.
  • اگر پرداخت ناموفق بود، دلیل را شفاف توضیح دهید.
  • از Inline Button برای راحتی و سرعت پرداخت استفاده کنید.

۸. سوالات متداول

س: آیا می‌توان پرداخت را با بانک مستقیم انجام داد؟
ج: نیاز به API بانک دارید ولی اغلب بهتر است از درگاه واسط استفاده کنید.

س: اگر کاربر بعد از پرداخت به ربات برنگردد؟
ج: باید پس از Verify پرداخت در سمت سرور، عضویت را فعال کنید.

س: آیا امکان بازگشت وجه خودکار وجود دارد؟
ج: در بیشتر APIها بله، ولی باید درخواست Refund بفرستید.


۹. اشتباهات رایج

اشتباهتوضیح
عدم Verify پرداختممکن است کاربر لینک جعلی ارسال کند
ذخیره API Key در کد اصلیخطر امنیتی
فعال‌سازی عضویت قبل از تایید تراکنشاحتمال سوء‌استفاده بالا

۱۰. نکات حرفه‌ای

  • تراکنش‌ها را در دیتابیس ذخیره کنید تا تاریخچه داشته باشید.
  • از پیام‌های تبلیغاتی بعد از پرداخت برای افزایش فروش استفاده کنید.
  • سیستم تمدید خودکار بسازید که قبل از پایان اشتراک پیام یادآوری بفرستد.
  • از Webhook درگاه‌ها استفاده کنید تا پرداخت‌ها به‌صورت آنی ثبت شوند.
محمد وب‌سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *