الأدلة
وصفة: اشتراك SaaS
خطة شهرية أو سنوية بالعملات المشفرة. كل فترة فاتورة مع تذكيرات؛ ويسأل التطبيق Perly Pay عمّن يملك الوصول.
لا يمكن سحب العملات المشفرة من محفظة، لذا يتجدد الاشتراك بالفاتورة: قبل نهاية الفترة يتلقى المشتري الفاتورة التالية، ثم تذكيرات حتى تُدفع. لا خصم تلقائي. لا يحسب التطبيق الأيام بنفسه — بل يسأل entitlements.check.
sell-subscription من إضافة Perly Pay. المثال القابل للتشغيل هو examples/saas-subscription (MIT) في مستودع الإضافة.كيف يعمل
- 1
الخطة
منتج وسعر مع
model: "subscription"وrecurring.interval(month،year…)، واختياريًا أيام تجربة وسماح. - 2
الاشتراك
فاتورة بهذا السعر والمستخدم عميل فيها تفتح الاشتراك وفاتورته الأولى. دفعها يجعل الخطة نشطة.
- 3
الوصول إلى الميزات
entitlements.check({ customer_external_id, product })←has_accessوends_at، على الخادم، في كل زيارة أو مع ذاكرة مؤقتة قصيرة. - 4
استمع
invoice.fulfilled— الدفعة الأولى وكل تجديد؛ وsubscription.past_dueوsubscription.unpaidوsubscription.ended— للتنبيه والإغلاق. - 5
إدارة للمشتري
رابط إلى بوابة العميل (
portalSessions.create): دفع التجديد المفتوح، أو الدفع مقدمًا، أو الإلغاء.
أيام السماح وتغيير الخطة والحالات موصوفة في Subscriptions and reminders.
شغّل المثال
- 1
ثبّت
npm installفيexamples/saas-subscription(Node 20.12+). - 2
المفتاح
انسخ
.env.exampleإلى.envواكتب مفتاح الاختبار (sk_test_…) فيPERLY_PAY_SECRET_KEY. - 3
حضّر
npm run setupينشئ المنتج والسعر بمفتاحك ويطبع معرّفاتهما لـ.env. - 4
شغّل
npm start(أوnpm run dev)، كما يقول ملف README الخاص به. - 5
ادفع بلا محفظة
اشترك في الصفحة الرئيسية، واضغط Simulate payment على الفاتورة، ثم افتح
/pro?user=you@example.com: Pro مفتوح حتى نهاية الفترة.
مزالق
- الوعد بـ «سنخصم من محفظتك بأنفسنا». لا يُسحب شيء؛ قل «يتجدد بالفاتورة».
- بريد العميل مفقود أو مختلَق: فواتير التجديد والتذكيرات تذهب إليه.
- إغلاق الوصول في أول دقيقة تأخير. قرّر ماذا يعني
past_due(ضمن أيام السماح). - فتح الوصول حين يعود المشتري من الدفع. «مدفوع» يعني فقط ويب هوك
invoice.fulfilledمُتحقَّقًا منه أوentitlements.checkمن خادمك.