يمكنك دمج Dodo Payments مع GoHighLevel (GHL) باستخدام روابط الدفع بدون برمجة، أو الدفع المنبثق، أو الدفع المضمّن، وأتمتة تنفيذ الطلبات باستخدام webhooks.
GoHighLevel (GHL) عبارة عن منصة CRM وتسويق متكاملة تشمل مسارات التحويل، والمواقع الإلكترونية، والبريد الإلكتروني/SMS، والأتمتة (“Workflows”). لا يدرج GHL Dodo Payments كمعالج دفع مضمّن، لذلك يمكنك ربط الخدمتين بإحدى ثلاث طرق، بناءً على مدى رغبتك في جعل تجربة الدفع مضمّنة ومقدار البرمجة الذي يمكنك تنفيذه.في كل طريقة، تتم معالجة تنفيذ الطلبات بالطريقة نفسها. يرسل Dodo أحداث webhook إلى Inbound Webhook Workflow في GHL، الذي يضيف وسمًا إلى جهة الاتصال، ويمنحها الوصول، ويرسل رسائل التأكيد.
تتم إعادة توجيه العميل إلى صفحة الدفع المستضافة لدى Dodo
معظم مستخدمي GHL، والأسرع في الإطلاق
B. الدفع المنبثق
تعليمات برمجية مخصصة بالإضافة إلى backend
تُفتح نافذة منبثقة فوق صفحة GHL
الفرق التي تريد الدفع داخل الصفحة دون مغادرة مسار التحويل
C. الدفع المضمّن
تعليمات برمجية مخصصة بالإضافة إلى backend
يتم تضمين نموذج الدفع داخل الصفحة
تجربة مستخدم مضمّنة بالكامل وتحمل العلامة التجارية
هل هذه أول مرة تستخدم فيها هذا التكامل؟ ابدأ بـ الطريقة A (روابط الدفع). فهي لا تتطلب برمجة، وتعمل مع كل مستخدمي GHL، ولا تستغرق سوى دقائق. تحتاج الطريقتان B وC إلى backend لإنشاء جلسات الدفع، وهما مناسبتان للفرق التي لديها خبرة في البرمجة.
حساب Dodo Payments يحتوي على منتج واحد على الأقل تم إنشاؤه.
حساب GoHighLevel يحتوي على مسار تحويل أو موقع إلكتروني أو workflow.
الوصول إلى Settings → Webhooks (وSettings → Developer للحصول على API key) في لوحة تحكم Dodo.
للطريقتين B وC: backend أو endpoint serverless صغير لإنشاء جلسات الدفع.
يتطلب GHL وجود نطاق متصل من أجل نشر مسار التحويل. أثناء الإنشاء، استخدم Preview الخاص بمسار التحويل للاختبار. تجدر الإشارة إلى أن JavaScript المخصص (الطريقتان B وC) يعمل عمومًا على الصفحة المنشورة على نطاق حقيقي فقط، وليس في Preview.
هذه هي طبقة الأتمتة. أعد إعدادها مرة واحدة، وستعمل بغض النظر عن طريقة الدفع التي تختارها.
1
Create the workflow
في الحساب الفرعي في GHL، افتح Automation من القائمة اليمنى (سينقلك ذلك إلى علامة تبويب Workflows). انقر على Create workflow، ثم اختر Start from Scratch.
2
Add the Inbound Webhook trigger
في المنشئ، انقر على Add new trigger. في لوحة Add trigger، ابحث عن webhook واختر Inbound webhook (مدرج ضمن Triggers → Events). انسخ Webhook URL الذي يتم إنشاؤه.
3
Register the webhook in Dodo
في لوحة تحكم Dodo، انتقل إلى Settings → Webhooks، وأضف endpoint جديدًا، ثم الصق عنوان GHL Inbound Webhook URL. أجرِ عملية شراء تجريبية حتى يلتقط GHL عينة من payload، وتتمكن من تعيين الحقول (بريد العميل الإلكتروني، والمنتج، والمبلغ، والحالة).
4
Add fulfillment actions
بالعودة إلى workflow في GHL، أضف إجراءات استنادًا إلى الحدث، مثل العثور على جهة اتصال أو إنشاؤها باستخدام البريد الإلكتروني، وإضافة وسم، ومنح الوصول إلى الدورة/العضوية، وإرسال رسالة تأكيد بالبريد الإلكتروني. ثم انقر على Publish في workflow.
تتم معالجة المدفوعات على Dodo، ولذلك لن تظهر في علامة تبويب Payments في GHL. سوِّها في GHL باستخدام workflow الخاص بـ webhook أعلاه، وتعامل مع webhook باعتباره مصدر الحقيقة لمنح الوصول، وليس مع إعادة توجيه المتصفح، إذ يمكن للعميل إغلاق علامة التبويب قبل العودة.
أضف رابط دفع من Dodo إلى أي زر في GHL، أو CTA في مسار التحويل، أو زر في صفحة الطلب، أو بريد إلكتروني، أو SMS.
1
Create a product and copy its payment link
في لوحة تحكم Dodo، انتقل إلى Products → Add Product، وحدد name وprice، واختر one-time أو subscription، ثم انقر على Save. افتح المنتج وانسخ Payment Link (التنسيق: https://checkout.dodopayments.com/buy/{product_id}).
2
Add the link to your GHL button
حرّر صفحة مسار التحويل أو الموقع الإلكتروني، وحدد Buy / Checkout button، واضبط الإجراء على Open URL / Website، ثم الصق رابط الدفع من Dodo.
3
Set a success page (optional)
اضبط return URL الخاص بالمنتج في Dodo على صفحة شكر في GHL حتى يعود العملاء إلى مسار التحويل بعد الدفع.
يمكنك تعبئة تفاصيل العميل مسبقًا وقفلها، أو إضافة التتبع، باستخدام معلمات query لرابط الدفع. ويفيد ذلك في تمرير معرّف مسار التحويل أو العرض كـ metadata يمكنك قراءته لاحقًا من webhook.
يفتح Checkout من Dodo كـ نافذة منبثقة على صفحة GHL باستخدام Checkout SDK عبر CDN. ويتطلب backend لإنشاء جلسة دفع وإرجاع checkoutUrl.
1
Create a backend endpoint that calls the Checkout Sessions API
هذه الخطوة إلزامية. يحتاج SDK إلى checkoutUrl صالح، ويتطلب إنشاء واحد secret API key الخاص بك. يستضيف GHL صفحات ثابتة فقط، ولا يمكنه تنفيذ استدعاء الخادم هذا نيابةً عنك، ويجب ألا تستدعي Create Checkout Session API مباشرةً من المتصفح، لأن ذلك سيكشف secret key في مصدر الصفحة. لذلك لا يمكن أن يعمل الدفع المنبثق أو المضمّن باستخدام GHL وحده: أنت بحاجة إلى backend تتحكم فيه، ينشئ الجلسة ويعيد URL فقط.يعمل أي backend صغير: دالة serverless (مثل Cloudflare Workers وVercel Functions وAWS Lambda وSupabase Edge Functions وما شابهها)، أو endpoint على خادم تقوم بتشغيله بالفعل. المنطق نفسه في جميع الحالات: استلام الطلب، واستدعاء API الخاص بـ Dodo باستخدام secret key، وإرجاع checkout_url.مثال على منطق المعالج (عدّله بما يتناسب مع النظام الأساسي الذي تختاره):
خزّن API key الخاص بـ Dodo كسر في أي نظام أساسي تنشر عليه (لا تضعه أبدًا في code)، واسمح بالطلبات الواردة من نطاق GHL (CORS)، ووجّه endpoint ضمن نطاق تتحكم فيه، مثل https://api.example.com/create-checkout. انتقل إلى https://live.dodopayments.com/checkouts عند الانتقال إلى الوضع المباشر.
2
Add a Custom Code element in the GHL page builder
افتح خطوة مسار التحويل أو صفحة الموقع الإلكتروني في منشئ صفحات GHL، ثم:
انقر على أيقونة + في أعلى يسار المنشئ لفتح Quick Add.
حدد Elements من قائمة الفئات اليمنى.
ابحث عن Custom Code (يظهر أيضًا باسم HTML) واسحبه إلى الصفحة.
الصق code أدناه في محرر code الخاص بالعنصر، ثم احفظه.
<!-- Load the Dodo Checkout SDK --><script src="https://cdn.jsdelivr.net/npm/dodopayments-checkout@latest/dist/index.js"></script><script> DodoPaymentsCheckout.DodoPayments.Initialize({ mode: "test", // change to "live" in production displayType: "overlay", onEvent: (event) => console.log("Checkout event:", event), }); async function openDodoCheckout() { // calls the backend endpoint from the previous step, creating a fresh session per click const res = await fetch("https://api.example.com/create-checkout", { method: "POST" }); const { checkoutUrl } = await res.json(); DodoPaymentsCheckout.DodoPayments.Checkout.open({ checkoutUrl }); }</script><button onclick="openDodoCheckout()">Pay Now</button>
3
Publish and test on your domain
يعمل Custom JS على الصفحة المنشورة (ذات النطاق المتصل)، وليس دائمًا في Preview. انشر الصفحة، ثم انقر على Pay Now للتأكد من فتح النافذة المنبثقة.
تضمّن نموذج الدفع داخل صفحة GHL (من دون إعادة توجيه أو نافذة منبثقة) باستخدام SDK نفسه مع حاوية mount. وكما في الطريقة B، يتطلب ذلك backend لإنشاء الجلسة.
1
Create a backend endpoint that calls the Checkout Sessions API
المتطلب نفسه الخاص بالدفع المنبثق، وهو إلزامي بالقدر نفسه: يتطلب إنشاء الجلسة secret API key الخاص بك، لذلك يجب أن يحدث ذلك على الخادم. لا يستطيع GHL تنفيذ ذلك بمفرده. أعد استخدام endpoint نفسه الموضح في قسم الدفع المنبثق أعلاه (أي دالة serverless صغيرة أو خادم تتحكم فيه) الذي يستدعي Create Checkout Session API ويعيد { checkoutUrl }.
2
Add a container and SDK via Custom Code
في منشئ صفحات GHL:
انقر على أيقونة + في أعلى يسار المنشئ لفتح Quick Add.
حدد Elements من قائمة الفئات اليمنى.
ابحث عن Custom Code (يظهر أيضًا باسم HTML) واسحبه إلى الصفحة حيث تريد ظهور نموذج الدفع.
الصق code أدناه في محرر code الخاص بالعنصر، ثم احفظه.
لاستخدام Apple Pay مع الدفع المضمّن، تحقق من نطاقك. استضف ملف association وسجّل النطاق في لوحة التحكم.
الدفع المضمّن هو الخيار الأكثر تعقيدًا في GHL. فهو يتطلب code مخصصًا، وbackend، وصفحة منشورة على نطاق حقيقي، و(بالنسبة إلى Apple Pay) التحقق من النطاق. إذا لم تكن بحاجة إلى نموذج مضمّن بالكامل، ففضّل الطريقة A أو B.
أضف وسمًا إلى جهة الاتصال يفيد بالدفع، وامنح الوصول، وأرسل تأكيدًا
subscription.active
عند تفعيل اشتراك
امنح العضوية، وابدأ workflow لتهيئة العميل
subscription.renewed
عند تحصيل دفعة تجديد
مدّد الوصول للدورة التالية
subscription.on_hold
عند فشل التجديد
شغّل workflow لمتابعة الدفعات المتأخرة أو التذكير
subscription.cancelled / subscription.expired
عند انتهاء الاشتراك
أزل الوصول، وأضف وسمًا يفيد بتوقف العميل
يتضمن كل webhook البريد الإلكتروني للعميل. استخدم إجراء GHL المتمثل في العثور على جهة اتصال أو إنشائها باستخدام البريد الإلكتروني لربط الدفعة بجهة الاتصال الصحيحة. للحصول على القائمة الكاملة، راجع دليل أحداث Webhook.
أبقِ Dodo في Test Mode، واستخدم بطاقة الاختبار 4242 4242 4242 4242 (أي تاريخ انتهاء مستقبلي وأي CVC)، وأكمل عملية شراء، ثم تأكد من تشغيل workflow في GHL وتطبيق الوسم أو منح الوصول.
2
Go live
بدّل Dodo إلى Live Mode وحدّث endpoint الخاص بـ webhook في الوضع المباشر. تعتمد التغييرات الأخرى على طريقتك:
روابط الدفع (A): استبدل الرابط برابط الدفع المباشر الخاص بالمنتج.
الدفع المنبثق (B): وجّه backend إلى https://live.dodopayments.com/checkouts باستخدام API key المباشر الخاص بك، واضبط mode في SDK على "live" ضمن استدعاء Initialize.
الدفع المضمّن (C): اتبع الخطوات نفسها الخاصة بالدفع المنبثق، لأنه يستخدم endpoint وتهيئة SDK نفسيهما.
ثم أجرِ عملية شراء حقيقية واحدة من البداية إلى النهاية للتأكد.
تعامل مع webhook باعتباره مصدر الحقيقة لمنح الوصول. اتخذ الإجراء بناءً على payment.succeeded / subscription.active، وليس بناءً على إعادة توجيه المتصفح.
تحقق من صحة webhook باستخدام ترويسة webhook-signature (Standard Webhooks)، حتى لا تؤدي أحداث Dodo الأصلية فقط إلى تشغيل تنفيذ الطلبات في GHL.
تحقق من أن endpoint الخاص بـ webhook في Dodo يشير إلى عنوان GHL Inbound Webhook URL الصحيح، وأن workflow منشور، وأن trigger التقط عينة من payload حتى يتوفر تعيين الحقول.
Overlay or inline button does nothing
يعمل Custom JS عادةً على الصفحة المنشورة (ذات النطاق الحقيقي) فقط، وليس في Preview. تأكد من نشر الصفحة، ومن تحميل SDK <script>، ومن أن checkoutUrl هو URL جلسة صالحًا من backend الخاص بك.
Contact not created or not matched
تأكد من أن workflow يستخدم إجراء العثور على جهة اتصال أو إنشائها باستخدام البريد الإلكتروني وأن حقل البريد الإلكتروني معيّن من payload الخاص بـ webhook.
Payment isn't showing in GHL's Payments tab
هذا متوقع. تتم معالجة المدفوعات على Dodo، لذا سوِّها في GHL باستخدام workflow الخاص بـ webhook.