تسليم تلقائي لمفاتيح الترخيص، الملفات القابلة للتنزيل، العلامات المميزة للميزات، والوصول إلى منصات مثل Discord، GitHub، Telegram، Framer، وNotion عند دفع العملاء.
الامتيازات تحول الدفع الناجح أو الاشتراك النشط إلى وصول حقيقي: مفتاح ترخيص في صندوق بريد العميل، علامة مميزة لميزة يتفقدها تطبيقك، دور في Discord، مستودع GitHub، قالب Notion، رابط Remix في Framer، دعوة دردشة في Telegram، أو حزمة ملفات قابلة للتنزيل. يقوم Dodo Payments بإصدار وتتبع وإلغاء هذا الوصول تلقائيًا مع تغييرات دورة الدفع.
The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
الاستحقاق هو تعريف قابل لإعادة الاستخدام لشيء تقدمه للعميل: مفتاح ترخيص Pro، دور “Patrons” في Discord، الوصول إلى مستودع GitHub الخاص بك، أو حزمة كتب إلكترونية قابلة للتنزيل. تقوم بإرفاق الاستحقاقات بالمنتجات، وتتعامل Dodo Payments مع الباقي.عندما يشتري أحد العملاء المنتج، تنشئ Dodo Payments منحة، وهي إصدار استحقاق لعميل واحد. تمر المنح عبر مجموعة صغيرة من الحالات: Pending أثناء تقدم عملية التسليم، وDelivered بمجرد أن يتمكن العميل من الوصول، وFailed إذا تعذر إكمال التسليم، وRevoked عند سحب الوصول.
تتحكم الاستحقاقات في التنفيذ (هل لدى العميل وصول؟). تتحكم الأرصدة في الاستهلاك (كم يمكنهم استخدامه؟). يمكن إرفاق كلاهما بنفس المنتج. راجع الفوترة المعتمدة على الأرصدة للأرصدة.
يتم تشغيل المنح من خلال نفس أحداث الدفع والاشتراكات التي تتلقاها بالفعل كخدمات ويب. ليس لديك حاجة لاستدعاء API للمنح بنفسك للشراء. Dodo Payments ينشئ ويلغي المنح تلقائيًا بناءً على دورة الدفع الأساسية.
يتم إنشاء منحة عند اكتمال عملية دفع أو عند تفعيل اشتراك. تنتقل ميزة Feature flags مباشرةً إلى Delivered. تنتقل مفاتيح الترخيص أيضًا مباشرةً إلى Delivered عندما تستخدم الاستحقاق fulfillment_mode: auto (الإعداد الافتراضي)؛ أما ضمن fulfillment_mode: manual، فتُنشأ المنحة في Pending من دون مفتاح إلى أن توفّر مفتاحًا عبر إتمام منح مفتاح الترخيص. يبدأ كل تكامل آخر في Pending. تكاملات OAuth (Discord وGitHub وNotion) تعرض oauth_url يجب على العميل زيارته لإكمال الموافقة؛ ويكون الحقل null في المنحة الجديدة، ثم تتم تعبئته عند بدء العميل لتدفق القبول من رسالة التسليم الإلكترونية أو Customer Portal. تبقى التكاملات المباشرة للمنصة (Telegram وFramer وDigital Files) في Pending لفترة وجيزة فقط أثناء تجهيز التسليم، ثم تنتقل إلى Delivered.
2
Delivered
بمجرد اكتمال التسليم (إنشاء مفتاح الترخيص، أو تعيين الدور، أو منح الوصول إلى المستودع، أو حل روابط الملفات، أو اكتمال OAuth)، تنتقل المنحة إلى Delivered ويتم تعيين delivered_at.
3
Failed
إذا أعاد استدعاء التكامل خطأً غير قابل لإعادة المحاولة (مثل إبطال رمز OAuth، أو رفض الإذن، أو عدم وجود الملف بعد الآن)، تنتقل المنحة إلى Failed. ويسجل الحقلان error_code وerror_message السبب.
4
Revoked
عند سحب الوصول (بسبب إلغاء الاشتراك، أو إصدار استرداد، أو سحب بدأه التاجر)، تنتقل المنحة إلى Revoked. ويسجل الحقل revocation_reason المُشغّل.
إبطال جميع المنح الحالية، ثم إصدار منح لاستحقاقات الخطة الجديدة. revocation_reason: plan_changed.
refund.succeeded (دفع لمرة واحدة)
إبطال المنح الخاصة بعملية الدفع تلك. revocation_reason: refund.
إبطال يدوي عبر API
الإبطال باستخدام revocation_reason: manual. لا تتم إعادة منح عمليات الإبطال اليدوية تلقائيًا عند تجديد الاشتراك.
تعطيل مفتاح الترخيص
بالنسبة إلى منح مفاتيح الترخيص، يؤدي تعطيل المفتاح الأساسي إلى إبطال المنحة باستخدام revocation_reason: license_key_disabled. تتم إعادة تفعيل المنحة تلقائيًا إذا أُعيد تفعيل المفتاح.
اكتشاف عدم تزامن المنصة
إذا أصبح جانب المنصة من أحد التكاملات غير متزامن (مثل إزالة دور Discord يدويًا، أو فقدان GitHub App صلاحية الوصول إلى المستودع، أو اكتشاف عملية مطابقة لهدف مفقود)، فسيتم إبطال المنحة باستخدام revocation_reason: platform_external. لا تتم إعادة منحها تلقائيًا عند تجديد الاشتراك إلى أن تُحل مشكلة المنصة الأساسية.
المنح التي تعتمد على الاشتراك تكون فائضة لكل (entitlement, customer, subscription); لا تنشئ التجديدات وإعادة التفعيل منحًا مكررة. تكون المنح الفردية فائضة لكل (entitlement, customer, payment).
انتقل إلى الامتيازات في لوحة تحكم Dodo Payments وانقر على + لإنشاء امتياز جديد.
2
Pick an integration
اختر نوع التكامل: License Key أو Digital Files أو Feature Flag أو Discord أو GitHub أو Telegram أو Figma أو Framer أو Notion. بالنسبة إلى تكاملات المنصات، اربط حسابك أولًا إذا لم تكن قد فعلت ذلك بالفعل.
3
Configure delivery
املأ الحقول الخاصة بالتكامل. على سبيل المثال، يطلب GitHub مستودعًا ومستوى إذن؛ يطلب Discord خادمًا ودورًا اختياريًا؛ يطلب مفتاح الترخيص حدود تنشيط وانتهاء الصلاحية.
Creating a GitHub entitlement. Each integration shows the fields it needs.
افتح منتجًا، وقم بتوسيع إعدادات متقدمة → الامتيازات والائتمانات، وحدد الامتيازات التي يجب تسليمها عند شراء المنتج. يمكن أن يسلم منتج واحد عدة امتيازات في وقت واحد. على سبيل المثال، يمكن أن تشمل خطة Pro مفتاح ترخيص، وصول إلى GitHub، ودور في Discord.
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
يتلقى العملاء بريدًا إلكترونيًا للتسليم بعد الشراء يحتوي على مفتاح الترخيص، وروابط التحميل، وروابط الدعوة لـ OAuth، أو دعوة للمنصة، أيًا ما ينطبق على الامتيازات الموجودة في المنتج. تبقى نفس التفاصيل متاحة إلى الأبد من بوابة العملاء تحت سجل الطلبات الخاص بهم.
يتطلب وصول المشتركين إلى Discord وGitHub وNotion أن يمنح العميل Dodo Payments الإذن لتوفير الوصول لهم. تبقى هذه المنح في حالة Pending حتى يكمل العميل تدفق OAuth باستخدام الرابط الموجود في بريده الإلكتروني أو في Customer Portal. وبمجرد منحه الإذن، تنتقل المنحة إلى Delivered ويتم توفير الوصول إلى المنصة فورًا.
تم إزالة المنح الملغاة على مستوى المنصة: يتم إزالة دور Discord، ويتم إزالة المتعاون في GitHub، ويتم تعطيل مفتاح الترخيص. يرى العملاء هذا التغيير منعكسًا في بوابة العملاء.
بالنسبة للملفات الرقمية، يلغي الإلغاء الوصول إلى عناوين URL الموقعة مسبقًا في المستقبل ولكنه لا يبطل النسخ التي قام العميل بتنزيلها بالفعل. خطط محتوى بوابة المحتوى وفقًا لذلك.
افتح أي امتياز من لوحة التحكم لرؤية منحته. تعرض لوحة تفاصيل المنحة إجمالي المنح ومرشحات الحالة ومعلومات العميل وتواريخ التسليم وإجراء الإلغاء.يمكنك أيضًا إدارة المنح برمجيًا:
import DodoPayments from 'dodopayments';const client = new DodoPayments({ bearerToken: process.env['DODO_PAYMENTS_API_KEY'],});// List grants for an entitlementconst grants = await client.entitlements.grants.list('ent_abc123', { status: 'Delivered',});// Revoke a single grantawait client.entitlements.grants.revoke('entg_xyz789', { id: 'ent_abc123',});
يقوم Dodo Payments بتشغيل أربع أحداث ويب لحالة المنحة. اشترك في هذه الأحداث للحفاظ على توافق تطبيقك مع ما يمكن لكل عميل الوصول إليه.
الحدث
يحدث عند
entitlement_grant.created
إنشاء منحة جديدة. تصل منح مفاتيح الترخيص بحالة Delivered ضمن عملية إتمام auto، وبحالة Pending ضمن عملية إتمام manual؛ وتصل كل التكاملات الأخرى بحالة Pending وتنتقل إلى Delivered بمجرد نجاح استدعاء المنصة (أو، بالنسبة إلى التكاملات المستندة إلى OAuth، بمجرد منح العميل الإذن).
entitlement_grant.delivered
تنتقل المنحة إلى حالة التسليم. أصبح لدى العميل الآن وصول.
استخدم استحقاقًا واحدًا لكل قناة تسليم. لا تشارك استحقاق Discord واحدًا بين منتجات ذات نوايا مختلفة للأدوار؛ أنشئ استحقاقًا واحدًا لكل دور لضمان إبطال واضح.
اختبر في وضع الاختبار أولًا. أنشئ الاستحقاق، وأرفقه بمنتج اختباري، ونفّذ عملية دفع، وراقب انتقال المنحة عبر Pending → Delivered. تأكد من أن إلغاء الاشتراك الاختباري يؤدي إلى إبطال المنحة.
استمع إلى entitlement_grant.delivered، وليس إلى payment.succeeded. قد تنجح عملية الدفع قبل اكتمال التنفيذ (خصوصًا في تدفقات OAuth). انتظر حدث التسليم قبل إلغاء قفل الميزات التابعة في أنظمتك.
اعتبر entitlement_grant.failed قابلًا لاتخاذ إجراء. تعني المنحة الفاشلة أن العميل دفع لكنه لم يحصل على الوصول. اعرض هذه الحالات على فريق الدعم أو شغّل إعادة المنح.
اربط revocation_reason بتدفقات الاحتفاظ بالعملاء لديك. يمكن استرداد إبطال subscription_on_hold (فقد يحدّث العميل بطاقته). أما إبطال manual فهو متعمد. تعامل معهما بشكل مختلف في اتصالات العملاء.