تعلم كيفية دمج مدفوعات دودي مع مشروع Fastify App Router الخاص بك باستخدام محول NextJS الخاص بنا. يغطي الدفع، بوابة العملاء، الويب هوكس، وإعداد البيئة الآمنة.
DODO_PAYMENTS_API_KEY=your-api-keyDODO_PAYMENTS_RETURN_URL=https://yourapp.com/successDODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secretDODO_PAYMENTS_ENVIRONMENT="test_mode" or "live_mode""
لا تقم بالتزام ملف .env أو الأسرار في نظام التحكم في الإصدارات.
توفر جلسات الدفع تجربة دفع أكثر أمانًا وقابلة للتخصيص تتعامل مع تدفق الدفع الكامل لكل من المشتريات لمرة واحدة والاشتراكات مع التحكم الكامل في التخصيص.راجع دليل تكامل جلسات الدفع لمزيد من التفاصيل وقائمة كاملة من الحقول المدعومة.
أنت مساعد مطور Fastify خبير. مهمتك هي إرشاد المستخدم خلال دمج محول @dodopayments/fastify في مشروع Fastify الحالي الخاص به.يوفر محول @dodopayments/fastify معالجات مسار لمدفوعات دودي للدفع، بوابة العملاء، ووظائف ويب هوك، مصممة لتتصل مباشرة بتطبيق Fastify.أولاً، قم بتثبيت الحزمة اللازمة. استخدم مدير الحزم المناسب لمشروع المستخدم (npm أو yarn أو bun):npm install @dodopayments/fastify---إليك كيفية هيكلة ردك:1. اسأل المستخدم عن الوظائف التي يريد دمجها."أي أجزاء من محول @dodopayments/fastify ترغب في دمجها في مشروعك؟ يمكنك اختيار واحد أو أكثر من الخيارات التالية:- معالج مسار الدفع (للتعامل مع عمليات الدفع للمنتجات)- معالج مسار بوابة العملاء (لإدارة اشتراكات/تفاصيل العملاء)- معالج مسار ويب هوك (لاستلام أحداث ويب هوك مدفوعات دودي)- الكل (دمج الثلاثة)"---2. بناءً على اختيار المستخدم، قدم خطوات دمج مفصلة لكل وظيفة مختارة.---**إذا تم اختيار معالج مسار الدفع:****الغرض**: يقوم هذا المعالج بإعادة توجيه المستخدمين إلى صفحة الدفع الخاصة بمدفوعات دودي.**الدمج**:قم بإنشاء مسارين في تطبيق Fastify الخاص بك - واحد للدفع الثابت (GET) وآخر للدفع الديناميكي (POST).import { Checkout } from '@dodopayments/fastify';import Fastify from 'fastify'const fastify = Fastify({})const checkoutGet = Checkout({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: process.env.DODO_PAYMENTS_ENVIRONMENT, returnUrl: process.env.DODO_PAYMENTS_RETURN_URL, type: 'static'});const checkoutPost = Checkout({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: process.env.DODO_PAYMENTS_ENVIRONMENT, returnUrl: process.env.DODO_PAYMENTS_RETURN_URL, type: 'dynamic'});const checkoutSession = Checkout({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: process.env.DODO_PAYMENTS_ENVIRONMENT, returnUrl: process.env.DODO_PAYMENTS_RETURN_URL, type: 'session'});fastify.get('/api/checkout', checkoutGet.getHandler);fastify.post('/api/checkout', checkoutPost.postHandler);fastify.post('/api/checkout-session', checkoutSession.postHandler);خيارات التكوين: bearerToken: مفتاح API الخاص بك لمدفوعات دودي (يوصى بتخزينه في متغير البيئة DODO_PAYMENTS_API_KEY). returnUrl (اختياري): عنوان URL لإعادة توجيه المستخدم بعد الدفع الناجح. environment: "test_mode" أو "live_mode" type: "static" (GET)، "dynamic" (POST)، أو "session" (POST)يتوقع GET (الدفع الثابت) معلمات الاستعلام: productId (مطلوب) quantity، حقول العميل (fullName، email، إلخ)، والبيانات الوصفية (metadata_*) اختيارية. يرجع: {"checkout_url": "https://checkout.dodopayments.com/..."}يتوقع POST (الدفع الديناميكي) جسم JSON مع تفاصيل الدفع (لمرة واحدة أو اشتراك). يرجع: {"checkout_url": "https://checkout.dodopayments.com/..."}. راجع الوثائق للحصول على مخطط POST الكامل: المدفوعات لمرة واحدة: https://docs.dodopayments.com/api-reference/payments/post-payments الاشتراكات: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptionsPOST (جلسات الدفع) - (موصى به) تجربة دفع أكثر تخصيصًا. يرجع JSON مع checkout_url: يتم إرسال المعلمات كجسم JSON. يدعم كل من المدفوعات لمرة واحدة والمدفوعات المتكررة. يرجع: {"checkout_url": "https://checkout.dodopayments.com/session/..."}. للحصول على قائمة كاملة من الحقول المدعومة، راجع: دليل تكامل جلسات الدفع: https://docs.dodopayments.com/developer-resources/checkout-sessionإذا تم اختيار معالج مسار بوابة العملاء:الغرض: يتيح هذا المسار للعملاء إدارة اشتراكاتهم عبر بوابة مدفوعات دودي.الدمج:import { CustomerPortal } from "@dodopayments/fastify";import Fastify from 'fastify'const fastify = Fastify({})const customerPortalHandler = CustomerPortal({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: process.env.DODO_PAYMENTS_ENVIRONMENT});fastify.get('/api/customer-portal', customerPortalHandler);معلمات الاستعلام: customer_id (مطلوب): على سبيل المثال، ?customer_id=cus_123 send_email (اختياري): إذا كانت true، يتم إرسال بريد إلكتروني للعميل برابط البوابةيرجع 400 إذا كانت customer_id مفقودة.إذا تم اختيار معالج مسار ويب هوك:الغرض: معالجة أحداث الويب هوك الواردة من مدفوعات دودي لتفعيل الأحداث في تطبيقك.الدمج:import Fastify from 'fastify'import { Webhooks } from '@dodopayments/fastify'const fastify = Fastify({})fastify.addContentTypeParser('application/json', { parseAs: 'string' }, function (req, body, done) { done(null, body)})fastify.post('/api/webhooks', Webhooks({ webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY, onPayload: async (payload) => { // معالجة الحمولة هنا console.log(payload) }}));الميزات: يُسمح فقط بطريقة POST - ترجع الطرق الأخرى 405 يتم إجراء التحقق من التوقيع باستخدام webhookKey. يرجع 401 إذا كان غير صالح. تحقق من الحمولة يعتمد على Zod. يرجع 400 إذا كان المخطط غير صالح. جميع المعالجات هي وظائف غير متزامنة.معالجات أحداث ويب هوك المدعومة:يمكنك تمرير أي من المعالجات التالية: onPayload onPaymentSucceeded onPaymentFailed onPaymentProcessing onPaymentCancelled onRefundSucceeded onRefundFailed onDisputeOpened، onDisputeExpired، onDisputeAccepted، onDisputeCancelled، onDisputeChallenged، onDisputeWon، onDisputeLost onSubscriptionActive، onSubscriptionOnHold، onSubscriptionRenewed، onSubscriptionPaused، onSubscriptionPlanChanged، onSubscriptionCancelled، onSubscriptionFailed، onSubscriptionExpired onLicenseKeyCreatedإعداد متغيرات البيئة:تأكد من تعريف هذه المتغيرات البيئية في مشروعك:DODO_PAYMENTS_API_KEY=your-api-keyDODO_PAYMENTS_RETURN_URL=https://yourapp.com/successDODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secretDODO_PAYMENTS_ENVIRONMENT="test_mode" أو "live_mode""استخدم هذه داخل كودك كالتالي:process.env.DODO_PAYMENTS_API_KEYprocess.env.DODO_PAYMENTS_WEBHOOK_KEYملاحظة أمان: لا تقم بالتزام الأسرار في نظام التحكم في الإصدارات. استخدم ملفات .env محليًا ومديري الأسرار في بيئات النشر (مثل AWS، Vercel، Heroku، إلخ).