مدفوعات العملات الرقمية لشركات SaaS
كيف يمكن لشركة SaaS قبول العملات الرقمية: فاتورة لكل فترة بدل البطاقة المحفوظة، ومسار التجديد، والمدفوعات الجزئية، والمحاسبة بالدولار، وما لا ينبغي وعد العملاء به.

تُبنى برمجيات الاشتراك حول بطاقة محفوظة تُخصم تلقائيًا. العملات الرقمية لا تعمل بهذه الطريقة: العميل يرسل كل دفعة بنفسه. يبدو هذا مشكلة، لكن شركات SaaS كثيرة تبيع لعملاء لا يستطيعون الدفع بالبطاقة أو يفضّلون عدم ذلك، والنموذج الذي ينجح بسيط: فاتورة لكل فترة فوترة. يوضح هذا الدليل كيف تبنيه، وما الذي تتوقعه، وأين يختلف عن الفوترة بالبطاقات.
لماذا تضيف شركات SaaS العملات الرقمية
البطاقات هي الخيار الافتراضي، لذا تحتاج إضافة العملات الرقمية إلى سبب. الأسباب المعتادة:
- عملاء تخذلهم مسارات البطاقات. فرق في بلدان لا يعمل فيها معالج الدفع لديك، أو تُرفض بطاقاتها لبرمجيات عابرة للحدود، ما زال بإمكانها الدفع بعملة مستقرة بالدولار.
- الفواتير السنوية والكبيرة. العميل الذي يدفع فاتورة سنوية كبيرة يفضّل غالبًا التحويل على البطاقة، والتحويل بعملة مستقرة نهائي دون موعد إغلاق مصرفي.
- لا توجد مطالبات استرداد. لا يستطيع المرسل عكس دفعة العملات الرقمية، فلا يشكّل الاحتيال الودّي في اشتراك بلا بطاقة حاضرة مصدر قلق.
- مشترون يهتمون بالخصوصية وأصحاب الخبرة بالعملات الرقمية. أدوات المطورين والبنية التحتية والاستضافة غالبًا ما يكون لها مستخدمون يحتفظون بعملات مستقرة ويحبون الدفع بها.
حدّد الحد بوضوح: العملات الرقمية تضيف طريقة دفع لهؤلاء العملاء. ولا تحل محل الفوترة بالبطاقات لبقية العملاء.
النموذج: فاتورة لكل فترة
تخصم الفوترة بالبطاقة من بطاقة محفوظة وفق جدول. أما الدفع بالعملات الرقمية فيجب أن يبدأه العميل، لذا فالنموذج الطبيعي هو الفواتير المدفوعة مسبقًا:
- قبل انتهاء الفترة بوقت قصير ينشئ نظامك فاتورة للفترة التالية.
- يتلقى العميل الفاتورة مع رابط دفع، ويفتح صفحة الدفع المستضافة، ويختار أصلًا وشبكة ثم يدفع.
- عند اكتمال الدفع يضع نظامك علامة «مدفوع» على الفاتورة ويمدّد الاشتراك.
لا توجد طريقة دفع محفوظة ولا خصم تلقائي. لا يقدّم Qvard الفوترة المتكررة أو الاشتراكات كمنتج؛ فمنطق التجديد والتذكيرات وفترة السماح من جانبك. وبالنسبة لكثير من أدوات B2B والمطورين يكفي هذا، وهكذا تُدفع الخطط السنوية عادةً على أي حال. راجع فوترة العملات الرقمية لـ SaaS B2B لتفاصيل جانب الفوترة.
إنشاء الدفعة لفاتورة
لكل فاتورة أنشئ دفعة من الخادم الخلفي بطلب POST واحد إلى https://api.qvard.com/api/v1/payment. يحمل الطلب مفتاحك في الترويسة Authorization: Bearer وجسم JSON فيه:
id: رقم فاتورتك كسلسلة نصية. يعود في الـ webhook، لذا استخدم ما يمكنك البحث عنه.price: المبلغ بالدولار الأمريكي.paymentSystemId(اختياري): طريقة دفع من مشروعك، إن أردت أن تُفتح الصفحة بأصل وشبكة محددين.
الاستجابة 201 مع redirectUrl، وهو عنوان صفحة الدفع المستضافة. ضع هذا الرابط في بريد الفاتورة وفي صفحة الفوترة الخاصة بالعميل. وإذا أُرسل طلب مرتين بالـ id نفسه لطريقة الدفع نفسها فستحصل على الدفعة الموجودة، فلا تُنشئ مهمة مُعادة نسخًا مكررة.
حدّد أسعار خططك بالدولار. يدفع العميل ما يعادله بالأصل الذي يختاره، بسعر صرف ثابت لمدة ساعة.
مسار التجديد من البداية إلى النهاية
يحتاج التجديد إلى قطعتين صغيرتين من الشيفرة، موضحتين أدناه: مهمة تنشئ الفاتورة والدفعة، ومعالج يتفاعل عند السداد.
جدول زمني قابل للتطبيق:
- قبل النهاية بسبعة أيام: أنشئ الفاتورة وأرسل الرابط بالبريد.
- قبل ثلاثة أيام وفي اليوم الأخير: أرسل تذكيرات إن كانت لا تزال مفتوحة.
- بعد النهاية: أبقِ الحساب نشطًا خلال فترة سماح قصيرة تختارها، ثم خفّض الخطة أو علّق الحساب. هذه سياستك لا ميزة في البوابة.
- عند وصول الـ webhook: ضع علامة «مدفوع» على الفاتورة ومدّد الاشتراك من نهاية الفترة السابقة لا من تاريخ الدفع، حتى لا يخسر من دفع مبكرًا أيامًا.
يُرسل الـ webhook عندما تكون الدفعة مكتملة. يجب أن تردّ نقطة نهايتك بـ HTTP 200 بالضبط (وإلا أُعيدت المحاولة: خمس محاولات في نحو ست دقائق) وأن تكون آمنة إذا نُفّذت مرتين، وهو ما تتكفل به خطوة markPaidIfOpen في المثال. تحقّق من توقيع الترويسة X-Qvard-Signature (HMAC-SHA256 بمفتاحك السري)؛ انظر كيف تؤمّن webhook مدفوعات العملات الرقمية.
// Called by your billing job a few days before a subscription period ends.
async function createRenewalInvoice(sub) {
const invoice = await db.invoices.create({ subscriptionId: sub.id, amountUsd: sub.planPriceUsd, status: 'open' });
const res = await fetch('https://api.qvard.com/api/v1/payment', {
method: 'POST',
headers: { Authorization: 'Bearer ' + process.env.QVARD_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ id: String(invoice.id), price: invoice.amountUsd })
});
const { redirectUrl } = await res.json();
await mailer.send(sub.email, 'Your renewal invoice', 'Pay here: ' + redirectUrl);
}
// Called from the webhook handler when status is "completed".
async function onPaid(invoiceId) {
const invoice = await db.invoices.markPaidIfOpen(invoiceId); // null if already paid
if (invoice) await db.subscriptions.extend(invoice.subscriptionId, '1 month');
}المدفوعات الجزئية وتغيير الخطط والمحاسبة
للفوترة الحقيقية حالات حدّية. قرّرها قبل الإطلاق:
- دفعة جزئية. إن وصل أقل من المبلغ كاملًا فالحالة
partialولا يُرسل webhook الاكتمال. أبقِ الفاتورة مفتوحة، وأخبر العميل بمقدار ما ينقص ودعه يرسل الباقي، أو ألغِ وأعد المال. لا تمدّد الاشتراك بدفعة جزئية. - الترقية والتخفيض. الاحتساب النسبي منطقك. الأبسط إصدار فاتورة جديدة بالفرق أو تطبيق التغيير من الفترة التالية.
- المبالغ المستردة. لا يمكن سحب دفعة العملات الرقمية، لذا فالاسترداد تحويل ترسله بنفسك. ضع القاعدة في شروطك.
- المحاسبة. سجّل الإيراد بالدولار بقيمة الفاتورة واحتفظ بـ
idالدفعة بجانب الفاتورة للمطابقة. استشر مستشاريك بشأن المعالجة الضريبية والمحاسبية لمقبوضات العملات الرقمية.
أبقِ حالات الفاتورة قليلة وواضحة: مفتوحة، مدفوعة، ملغاة.
ماذا تقول للعملاء وماذا لا تعد به
صِف العملات الرقمية بصدق في صفحة الأسعار أو الفوترة:
- تدفع كل فترة بنفسك، بفاتورة ورابط دفع؛
- أي الأصول والشبكات تقبل (انظر العملات المدعومة)، وأن الدفع يجب أن يتم على الشبكة المختارة في صفحة الدفع؛
- أن الوصول يُمدَّد عند اكتمال الدفع لا عندما يقول العميل إنه دفع؛
- قاعدة الاسترداد لديك في سطر واحد.
لا تَعِد بتجديد تلقائي ولا بمحافظ رقمية محفوظة ولا بإعادة محاولات على طريقة البطاقات؛ فلا شيء من ذلك موجود في هذا النموذج. عِد بما ينجح: فاتورة واضحة وصفحة دفع وتمديد فور اكتمال الدفع.
التكلفة وما هو جاهز اليوم
لا توجد رسوم اشتراك للبوابة. العمولة فردية لمشروعك، وبحسب صفحة الأسعار تبدأ من 1% ويمكن أن تنخفض إلى 0.1%. سحب رصيدك إلى محفظتك الخاصة لا يكلّف إلا رسوم الشبكة؛ والسحب إلى حساب مصرفي بالعملة الورقية غير متاح.
يتم التكامل عبر الـ API ويتطلب مطوّرًا؛ لا توجد بعد إضافة فوترة جاهزة، ويعود العملاء إلى موقعك من تلقاء أنفسهم بعد الدفع، لذا أعطهم صفحة فوترة تعرض حالة الفاتورة الفعلية. راجع حالة استخدام SaaS ووثائق المطورين وفاتورة تجريبية.
FAQ
هل يدعم Qvard الفوترة المتكررة أو الاشتراكات التلقائية؟
لا. دفعة العملات الرقمية يرسلها العميل في كل مرة. النموذج الذي ينجح هو فاتورة لكل فترة فوترة، مع منطق التجديد والتذكيرات وفترة السماح من جانبك.
كيف أعرف أن العميل دفع؟
يستدعي Qvard الـ webhook عند اكتمال الدفعة، مع معرّف الفاتورة الذي أرسلته والحالة. ضع علامة «مدفوعة» على الفاتورة عند الحالة completed فقط، واجعل المعالج آمنًا إذا نُفّذ مرتين.
ماذا لو دفع العميل جزءًا فقط من الفاتورة؟
تأخذ الدفعة حالة partial ولا يُرسل webhook الاكتمال. أبقِ الفاتورة مفتوحة واطلب الباقي، أو ألغِ وأعد المال. لا تمدّد الاشتراك.
هل يمكنني تحديد أسعار خططي بالدولار؟
نعم. يُحدَّد السعر بالدولار الأمريكي ويدفع العميل ما يعادله بالأصل والشبكة اللذين يختارهما، بسعر صرف ثابت لمدة ساعة.


