אתם מוכרים מחדש את האחסון שלנו. הלקוחות שלכם שייכים לכם: המחירים שלכם, החשבוניות שלכם, ספק התשלומים שלכם. כך אתם מפעילים את הפלטפורמה שלנו מכל מה שאתם כבר מריצים — לוח בקרה לחיוב, אתר WordPress משלכם, או סקריפט.
מה שהלקוחות שלכם רואים בפועל
לפני הצד הטכני: הלקוחות שלכם לעולם לא צריכים לראות אותנו. שלושה ממשקים, ואתם בוחרים במה להשתמש.
| ממשק | של מי הוא |
|---|
| לוח הבקרה של האחסון, בשם מארח משלכם | הגדירו שם מארח ללוח הבקרה תחת מכירה מחדש ← המותג שלכם והלקוחות שלכם יתחברו בכתובת panel.yourcompany.com עם הלוגו והצבעים שלכם. אותו לוח בקרה, הכתובת שלכם. |
| האתר שלכם | תוסף ה-WordPress מציב באתר שלכם חיפוש דומיינים וקישור התחברות בלחיצה אחת, ומקבל את ההזמנה דרך הקופה של WooCommerce שלכם. |
| לוח הבקרה לחיוב שלכם | WHMCS או HostBill נשארים דלת הכניסה הראשית; המודול מבצע הקצאה מאחורי הקלעים וכפתור אזור הלקוחות מחבר אותם ישירות לאחסון שלהם. |
⛔ בכל אפשרות שתבחרו, אתם בית העסק הרשמי (merchant of record) מול הלקוחות שלכם: המחירים שלכם, החשבוניות שלכם, מספר המע"מ שלכם, ספק התשלומים שלכם. אנחנו מחייבים אתכם, פעם בחודש, במחיר סיטונאי.
לאחר שהגדרתם שם מארח ללוח הבקרה, הזינו אותו בשדה כתובת לוח הבקרה בתוסף ה-WordPress ובשום מקום אחר — קישורי ההתחברות שה-API הזה מפיק מתאימים את עצמם אליו באופן אוטומטי.
ארבע דרכי הגישה
ישנן ארבע דרכי גישה, וכולן מבצעות את אותו הדבר מאחורי הקלעים:
| עבור |
|---|
| מודול WHMCS | חנות WHMCS |
| מודול HostBill | חנות HostBill |
| תוסף WordPress | מכירה מאתר ה-WordPress או ה-WooCommerce שלכם |
| ה-API | כל דבר אחר — Blesta, מערכת פנימית, סקריפט cron |
1. קבלו מפתח API
בלוח הבקרה שלכם, עברו אל מפתחות API וצרו אחד. תנו לו רק את מה שהוא צריך:
| הרשאה | סיבה |
|---|
org.read | קריאת חשבונות הלקוחות שלכם |
sites.create | הקצאת אתר |
sites.view | קריאת שירות |
sites.delete | סיום שירות |
reseller.view | הצגת רשימת השירותים שלכם וקריאת נתוני שימוש |
reseller.provision | השעיה, שחרור מהשעיה וחיבור לקוח למערכת |
⛔ אל תעניקו לאינטגרציה את ההרשאה reseller.manage. הרשאה זו עורכת את מחירון המוצרים שלכם ואת פרטי הגישה לשער התשלומים שלכם. reseller.provision קיימת בדיוק כדי שמפתח שאתם מדביקים לתוך לוח בקרה לחיוב או אתר אינטרנט לא יזדקק לה.
המפתח מוצג פעם אחת בלבד. שמרו אותו במקום שבו אתם שומרים את שאר פרטי הגישה שלכם — לעולם לא בקובץ ששרת האינטרנט שלכם מגיש.
2. בצעו את הקריאה הראשונה שלכם
curl https://api.zinndigital.com/v1/reseller/services \
-H "Authorization: Bearer zdk_live_…"
זה מחזיר כל שירות שהקציתם, שורה אחת לכל אתר, יחד עם הלקוח שאליו הוא שייך, הסטטוס שלו והמחיר שאתם גובים עבורו. בחשבון חדש זוהי רשימה ריקה — וזו התשובה הנכונה, לא שגיאה.
3. כל האינטגרציה, בשש קריאות
מתי קריאה
הזמנה שולמה POST /v1/orgs פעם אחת לכל לקוח
POST /v1/sites פעם אחת לכל שירות
הם לא שילמו POST /v1/reseller/services/{siteId}/suspend
הם משלמים POST /v1/reseller/services/{siteId}/unsuspend
הם מבטלים DELETE /v1/sites/{siteId}
"התחברות לאחסון" POST /v1/reseller/services/{siteId}/sso
ההקצאה מורכבת משתי קריאות, והמפתחות חשובים:
# 1. the customer's account — keyed on YOUR customer id
curl -X POST https://api.zinndigital.com/v1/orgs \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: account-4211" \
-d '{"type":"customer","name":"Acme Ltd"}'
# 2. their site — keyed on YOUR service id
curl -X POST https://api.zinndigital.com/v1/sites \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: service-9915" \
-d '{"org_id":"<from step 1>","product_line":"mainstream","primary_domain":"acme.com"}'
שני כללים שטעויות בהם יעלו לכם כסף
- קשרו את החשבון למזהה הלקוח שלכם ואת האתר למזהה השירות שלכם. הזמנה שנייה של לקוח חייבת להגיע לחשבון שכבר קיים עבורו. אם תקשרו את שניהם לשירות, לקוח אחד יסיים עם שלושה חשבונות לא מקושרים ושלושה לוחות בקרה נפרדים.
- שלחו
Idempotency-Key בכל בקשת POST, שנוצר מהמזהה הפנימי שלכם עבור אותו פריט. כל מערכת חיוב מבצעת ניסיונות חוזרים — קריאת חזרה (callback) משער התשלומים מגיעה פעמיים, מנהל מערכת מפעיל מחדש הקצאה שנכשלה, לקוח לוחץ לחיצה כפולה. ללא המפתח, הניסיון השני ייצור אתר שני ואתם תחויבו עליו.
שלוש תשובות שאסור לכם לרדד לשתיים
- קריאת
unsuspend יכולה להחזיר 409. המשמעות היא שצוות ה-abuse שלנו מעכב את האתר, לא אתם. הציגו את ההודעה; אל תבצעו ניסיון חוזר.
- **סיום שירות מתזמן מחיקה, הוא אינו מבצע אותה מיידית.** התאריך חוזר כ-
pending_deletion_at. לומר ללקוח שהנתונים שלו כבר נמחקו כשהם לא נמחקו גרוע יותר מאי-אמירת דבר.
- הערך של
disk_used_bytes יכול להיות null, ו-null אינו אפס. המשמעות היא שלא יכולנו למדוד, לא שלא נעשה שימוש בכלום. דלגו על כך — אל תרשמו 0 ברשומות שלכם, אחרת תציגו ללקוח סרגל שימוש ירוק עבור אתר שאין לכם נתוני קריאה לגביו.
4. חברו לקוח למערכת
POST /v1/reseller/services/{siteId}/sso מחזיר כתובת URL לשימוש חד-פעמי שמעבירה את הלקוח שלכם ישירות לחשבון שלו, כשהוא כבר מחובר.
⛔ הפיקו את הקישור ברגע שהם לוחצים, לעולם לא בעת רינדור הדף. הקישור הוא לשימוש חד-פעמי ותוקפו פג תוך דקות ספורות, כך שקישור שנכתב לתוך דף מתבזבז בצפייה הראשונה בדף ונשאר בכל זיכרון מטמון (cache) שבין המערכת שלכם לדפדפן.
5. התקינו מודול במקום זאת
- WHMCS — העתיקו את המודול אל
modules/servers/zinn/, הוסיפו שרת שבו Password הוא מפתח ה-API שלכם, והגדירו את קו המוצרים במוצר. לחצו על Test Connection: הפעולה מבצעת קריאה אמיתית ומדווחת לכם מה הפלטפורמה החזירה.
- HostBill — העתיקו אל
includes/modules/Hosting/zinn/ וחברו אותו באותו האופן.
- WordPress — ערכת הכלים Zinn® Reseller Toolkit: חיפוש דומיינים, קישור התחברות לאחסון של הלקוחות שלכם, והקצאה ב-WooCommerce כאשר הזמנה משולמת. קוד פתוח בכתובת <https://github.com/Zinn-Digital/zinn-reseller-toolkit>, או הורידו אותה מתוך תוספים בלוח הבקרה שלכם.
6. עברו לפעילות חיה
בדקו את הדברים הבאים לפני קבלת הזמנה אמיתית:
- בדיקת החיבור עוברת במודול, או שפקודת ה-
curl הראשונה שלכם מחזירה רשימה.
- מחירון המוצרים שלכם מוגדר (מכירה מחדש ← המחירים שלכם).
- שער התשלומים שלכם מחובר (מכירה מחדש ← שערי תשלום) — הלקוחות שלכם משלמים לכם, דרך החשבון שלכם.
- פרטי החברה שלכם מוזנים (מכירה מחדש ← החברה שלכם) כך שחשבוניות הלקוח שלכם נושאות את הישות המשפטית ומספר המע"מ שלכם, ולא את שלנו.
- ביצעתם הזמנה אמיתית אחת מקצה לקצה וראיתם את האתר מופיע.
היכן נמצא כל השאר
מדריך ה-API המלא — כל נקודת קצה, שנוצרה מתוך המפרט שלנו, יחד עם ההרשאה שכל אחת דורשת — נמצא בכתובת <https://zinndigital.com/developers/api>.