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

۱. مقدمه
سیستم پرداخت آنلاین داخل ربات یکی از مهمترین قابلیتها برای درآمدزایی و فروش خدمات یا کالا است.
📌 مثالهایی از استفاده:
- فروش اشتراک VIP یا دوره آموزشی
- فروش فایل یا محتوای دیجیتال
- رزرو خدمات (مثل مشاوره یا سالن ورزشی)
- دریافت کمک مالی (Donation)
۲. روشهای پیادهسازی پرداخت در ربات تلگرام
| روش | توضیح | مزایا | معایب |
|---|---|---|---|
| پرداخت داخلی تلگرام (Telegram Payments) | استفاده از قابلیت Billing داخلی تلگرام و اتصال به Providerهایی مثل Stripe | امن و مستقیم در تلگرام | همه کشورها پشتیبانی نمیشوند، برخی Providerها محدودیت دارند |
| درگاه پرداخت ایرانی (مانند Zarinpal, IdPay, NextPay) | ایجاد لینک پرداخت خارج از تلگرام، دریافت نتیجه و فعالسازی | مناسب ایران، آسانتر | خارج شدن کاربر از تلگرام برای پرداخت |
| سیستم شبیهسازی پرداخت (Manual) | کاربر رسید یا کد تراکنش را ارسال میکند و ادمین تایید میکند | آسان و بدون API | غیراتوماتیک، خطاهای انسانی |
در این فصل هر دو حالت حرفهای رو توضیح میدیم، مخصوصاً درگاههای ایرانی و پرداخت داخلی تلگرام.
۳. پیشنیازها
- داشتن حساب فعال در یکی از سرویسهای پرداخت آنلاین.
- دریافت API Key یا Merchant ID.
- نصب کتابخانههای لازم:
pip install python-telegram-bot requests
۴. پرداخت با درگاه ایرانی (نمونه زرينپال)
مراحل کلی:
- کاربر در ربات یک دستور برای خرید میزند.
- ربات درخواست پرداخت (Create Payment Request) به درگاه میفرستد.
- درگاه لینک پرداخت برمیگرداند.
- کاربر روی لینک کلیک میکند و پرداخت را انجام میدهد.
- درگاه به ربات اطلاع میدهد که پرداخت موفق بوده.
- ربات نقش کاربر یا خدمات را فعال میکند.
مثال عملی – اتصال به 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، …).
📌 مراحل:
- ثبت Bot در BotFather و فعال کردن Payments.
- دریافت Provider Token.
- ساخت Invoice در ربات.
- کاربر پرداخت را انجام میدهد و تلگرام به شما اطلاع میدهد.
نمونه کد با 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 درگاهها استفاده کنید تا پرداختها بهصورت آنی ثبت شوند.