tgpay cryptoAPI
crypto-payapiwebhookssignature

مرجع API: وب‌هوک‌ها

3 دقیقه مطالعهآخرین به‌روزرسانی: 11 اوت 2026

وب‌هوک‌ها رویدادها را در همان لحظه‌ی وقوع به سرور شما می‌رسانند. آدرس وب‌هوک را برای برنامه‌تان در بیشتر ← API پذیرنده ثبت کنید؛ از آن به بعد پلتفرم برای هر رویدادی که در آن مشترک شده‌اید یک بدنه‌ی JSON امضاشده POST می‌کند.

قالب پیام

{
  "update_id": 123,
  "update_type": "invoice_paid",
  "request_date": "2026-08-11T12:00:00Z",
  "payload": {  }
}

update_id در ارسال‌های دوباره‌ی یک رویداد ثابت می‌ماند — حذف تکراری‌ها را بر پایه‌ی همان انجام دهید. request_date برای هر تلاش ارسال به‌طور جداگانه ثبت می‌شود. payload شیء کامل همان نوع رویداد است: شیء صورت‌حساب برای رویدادهای صورت‌حساب، شیء چک، یا شیء اشتراک (ساختار هرکدام در صفحه‌ی مرجع مربوط به آن).

انواع رویداد

update_typeزمان ارسالمحتوا
invoice_paidصورت‌حسابی پرداخت می‌شود — همیشه فرستاده می‌شودشیء صورت‌حساب
invoice_expiredمهلت صورت‌حسابی بدون پرداخت تمام می‌شودشیء صورت‌حساب
check_activatedیکی از چک‌های شما دریافت می‌شودشیء چک
refund_completedبازگشت وجهی انجام می‌شودشیء صورت‌حساب همراه فیلدهای refunded_*
subscription_activatedکاربری طرحی را تأیید می‌کندشیء اشتراک
subscription_chargedمبلغ یک دوره کسر می‌شود — charge.kind نوع آن را مشخص می‌کند: initial، renewal یا resubscribeشیء اشتراک + charge: {period_no, kind, asset, amount, fee, paid_at}
subscription_cancelledاشتراکی از سوی یکی از دو طرف لغو می‌شودشیء اشتراک
subscription_expiredمهلت بدون پرداخت تمام می‌شودشیء اشتراک

همه‌ی رویدادها جز invoice_paid اختیاری هستند (افزوده‌ای بر Crypto Bot — مصرف‌کننده‌ای که دقیقاً به شکل Crypto Bot نوشته شده هرگز به update_type ناشناخته برنمی‌خورد، مگر خودتان خواسته باشید). برای هر برنامه، زیر رویدادهای بیشتر وب‌هوک در صفحه‌ی API پذیرنده آن‌ها را فعال کنید — این کلیدها به‌محض ثبت آدرس وب‌هوک ظاهر می‌شوند و نام هرکدام همان شناسه‌ی خام جدول بالاست.

بررسی امضا

هر ارسال هدر TgPayCrypto-API-Signature را همراه دارد (Crypto-Pay-API-Signature نام جایگزینی برای سازگاری است، با همان مقدار): مقدار hex از HMAC-SHA256 روی بدنه‌ی خام درخواست، با کلیدی که چکیده‌ی SHA-256 از توکن API اصلی برنامه‌ی شماست. این همان روش Crypto Bot است، پس کد بررسی موجودتان بدون تغییر کار می‌کند:

import hashlib, hmac

secret = hashlib.sha256(API_TOKEN.encode()).digest()
expected = hmac.new(secret, raw_body, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(expected, headers["TgPayCrypto-API-Signature"])

بررسی را روی بایت‌های خام دریافتی انجام دهید — چیزی که دوباره سریالایز شده می‌تواند بایت‌به‌بایت فرق داشته باشد و در بررسی رد شود. فقط توکن اصلی امضا می‌کند؛ توکن‌های محدود هرگز. تعویض توکن اصلی کلید امضای وب‌هوک را بی‌درنگ تغییر می‌دهد، پس هم‌زمان کلید محرمانه‌ی روی سرورتان را هم به‌روز کنید.

ارسال و تلاش دوباره

  • ارسال با هر پاسخ 2xx که ظرف 10 ثانیه برسد موفق حساب می‌شود.
  • هر چیز دیگری — وضعیت خطا، تایم‌اوت، قطع اتصال — با فاصله‌های فزاینده دوباره فرستاده می‌شود: اولین تلاش دوباره حدود 10 ثانیه بعد، فاصله هر بار دو برابر می‌شود تا سقف 8 ساعت، در مجموع تا 17 تلاش در حدود 3 روز.
  • پس از آخرین تلاش، آن ارسال رها می‌شود. خود آدرس وب‌هوک هیچ‌وقت خودکار غیرفعال نمی‌شود — نقطه‌ی پایانی ناپایدار، اشتراک برنامه‌ی شما را بی‌اطلاع لغو نمی‌کند.
  • چون تلاش دوباره در کار است، هندلر شما باید در برابر تکرار امن باشد: پیش از هر اقدامی تکراری‌ها را بر پایه‌ی update_id حذف کنید.

⚠️ پیش از انجام سفارش، بررسی کنید

هر کسی می‌تواند به آدرس وب‌هوک شما POST بزند. تا وقتی بررسی امضا موفق نشده، بدنه را ورودی غیرقابل‌اعتماد بدانید: سفارشی نفرستید، حساب کسی را شارژ نکنید، چیزی را پرداخت‌شده علامت نزنید. ترتیب امن این است: بررسی امضا ← حذف تکراری‌ها بر پایه‌ی update_id ← اقدام.