هذه هي حزمة Flutter الرسمية من Dodo Payments (
dodopayments_checkout
على pub.dev). توجد أيضًا حزمة منفصلة طوّرها المجتمع، راجع
مشاريع المجتمع.Checkout Sessions API
أنشئ checkout_url الذي تفتحه هذه الحزمة، من الخادم الخلفي لديك.
Mobile Integration Guide
تعرّف على كيفية اندماج ذلك في تدفق الدفع الكامل على الأجهزة المحمولة.
dodopayments_checkout صفحة الدفع المستضافة من Dodo في
SFSafariViewController على iOS وعلامة تبويب Chrome مخصصة على Android — وهي نفس
النوى الأصلية المستخدمة في حزم iOS و
Android المستقلة. توجد كل منطق الدفع في
تلك النوى الأصلية؛ وتمرر طبقة Dart الاستدعاء عبر قناة مكتوبة النوع هي
Pigeon. ولا تحتوي على مفتاح API، كما أنها
لا تستدعي API الخاص بـ Dodo Payments مطلقًا.
يتطلب Flutter 3.44+ / Dart 3.12+، وiOS 16+، وAndroid minSdk 23.
التثبيت
1
Add the Dependency
pubspec.yaml
2
Register a Callback URL Scheme
- iOS
- Android
أضف نوع URL لمخططك في بعد ذلك مرّر عناوين URL الواردة (مثلًا عبر
ios/Runner/Info.plist:ios/Runner/Info.plist
app_links) إلى الحزمة، لأن
SFSafariViewController لا يمكنه التقاط عنوان URL الخاص بالعودة:من الآمن تمرير كل عنوان URL هنا. لا يتصرف
handleOpenURL إلا مع عناوين URL
التي تطابق returnUrl المسجّل لديك، ويحلّ false لأي شيء
آخر.الاستخدام
معنى النتيجة
CheckoutStatus
مطلوب
واحد من
succeeded، failed، cancelled، pending، expired.String?
يُعيَّن عند تضمين أحدها في عنوان URL للعودة. اعرضه في واجهة المستخدم، ولا تستخدمه لمنح صلاحية الوصول. راجع قسم التحقق من الدفع أدناه.
String?
يُعيَّن لعمليات دفع الاشتراكات.
List<String>?
يُعيَّن عند تضمين منتجات مفاتيح الترخيص في عملية الدفع.
String?
يُعيَّن عند جمع عنوان بريد إلكتروني في عملية الدفع.
Map<String, String>
كل مَعلمات الاستعلام الواردة من عنوان URL للعودة، حرفيًا.
التحقق من الدفع
Webhooks
يستدعي Dodo Payments خادمك الخلفي عند نجاح عملية دفع أو تفعيل اشتراك.
Get Payment Detail
ابحث عن
paymentId باستخدام مفتاحك السري للتحقق من حالته مباشرة.result.status وحده.
تخصيص المظهر
يمكنك تخصيص شريط أدوات المتصفح وأزرار نظام الدفع ومخطط الألوان عبرcustomization على CheckoutParams. يتم تجميع الخيارات حسب المنصة لأن
Custom Tab في Android وSFSafariViewController في iOS يعرضان عناصر تحكم أصلية مختلفة. جميع الحقول اختيارية؛ ويؤدي عدم تضمين customization إلى استخدام
المظهر الافتراضي لكل منصة.
Android — Custom Tab
Android — Custom Tab
Color?
لون خلفية شريط الأدوات.
لون شريط التنقل.
لون الفاصل أعلى شريط التنقل.
CloseButtonStyle
يعرض
standard أيقونة “X” الخاصة بالنظام؛ بينما يرسم back سهم رجوع بدلاً منها.CloseButtonPosition
الجانب الذي يظهر عليه زر الإغلاق في شريط الأدوات.
يعرض أيقونة المشاركة في شريط الأدوات.
bool
يعرض عنوان الصفحة أسفل عنوان URL في شريط الأدوات.
bool
يتيح لشريط الأدوات الاختفاء تلقائيًا أثناء تمرير الصفحة.
bool
يعرض “إضافة الصفحة إلى الإشارات المرجعية” في قائمة الخيارات الإضافية.
bool
يعرض “تنزيل الصفحة” في قائمة الخيارات الإضافية.
BrowserColorScheme
يفرض المظهر الفاتح أو الداكن بغض النظر عن إعداد النظام في الجهاز.
iOS — SFSafariViewController
iOS — SFSafariViewController
DismissButtonStyle
تسمية أو أيقونة لزر الإغلاق.
PresentationStyle
يظهر
pageSheet على شكل بطاقة يمكن إغلاقها بالسحب؛ بينما يغطي fullScreen الشاشة بأكملها.bool
يتيح طي شريط الأدوات أثناء التمرير. يظهر فقط عندما يكون
presentationStyle هو fullScreen — ويحافظ pageSheet على تثبيت الأشرطة بغض النظر عن هذا الإعداد.BrowserColorScheme
يفرض المظهر الفاتح أو الداكن بغض النظر عن إعداد النظام في الجهاز.
الأخطاء
يطرحstart استثناء CheckoutException فقط عند إساءة الاستخدام أو حدوث عطل في المنصة.
أما عملية الدفع الملغاة أو المرفوضة فهي دائمًا نتيجة وليست استثناءً.
invalidCheckoutUrl(INVALID_CHECKOUT_URL): ليس عنوان URL لجلسةcheckout.dodopayments.com.invalidReturnUrl(INVALID_RETURN_URL): ليس عنوان URL مطلقًا صالحًا.alreadyInProgress(ALREADY_IN_PROGRESS): توجد عملية دفع قيد التشغيل بالفعل.platformError(PLATFORM_ERROR): عطل غير متوقع في المنصة.
الجلسات المتروكة
إذا أُغلِق التطبيق أثناء عملية الدفع، فاستعد الجلسة عند تشغيله مجددًا
وطابِق حالتها مع الواجهة الخلفية لديك.
ذات صلة
Mobile Integration Guide
العقد نفسه لكل من Android وiOS وReact Native.
Community Projects
تتوفر أيضًا حزمة Flutter منفصلة أنشأها المجتمع.