Βάση γνώσεων
Πωλήστε φιλοξενία Zinn® μέσω HostBill, Blesta ή του δικού σας συστήματος
Πουλήστε φιλοξενία Zinn από το HostBill, το Blesta ή το δικό σας σύστημα: το δωρεάν πρόσθετο HostBill, τον πελάτη PHP ενός αρχείου, τους δύο κανόνες που κοστίζουν χρήματα όταν παραβιάζονται, και τα δύο πεδία αιτημάτων που είναι εύκολο να παραλειφθούν.
Αν εκτελείτε το WHMCS, χρησιμοποιήστε τη μονάδα WHMCS αντί για αυτό — αυτή η σελίδα προορίζεται για όλα τα υπόλοιπα. Υπάρχουν δύο επιλογές, και οι δύο δωρεάν και και οι δύο GPL-2.0-or-later.
HostBill
Μια μονάδα φιλοξενίας με τις ίδιες έξι ενέργειες με εκείνη του WHMCS.
- Κατεβάστε την και απο συμπιέστε την.
- Μεταφορτώστε τον κατάλογο
zinnστοincludes/modules/Hosting/ώστε τα αρχεία να καταλήξουν στο - Settings → Modules → Hosting, ενεργοποιήστε το Zinn Digital® και προσθέστε μια σύνδεση:
includes/modules/Hosting/zinn/class.zinn.php και στο includes/modules/Hosting/zinn/ZinnHostBillClient.php.
- API address:
https://api.zinndigital.com - API key: το κλειδί API Zinn® σας (ένα πεδίο
password, ώστε το HostBill να το αποθηκεύει κρυπτογραφημένο)
- Στο προϊόν ορίστε Product line (π.χ.
mainstream), Stack (wordpressαπό - Πατήστε Test connection.
προεπιλογή) και προαιρετικά Application και PHP version.
⛔ Μην μετονομάζετε τον κατάλογο
zinn. Ο φορτωτής του HostBill αντλεί την κλάση που αναζητά από το όνομα του καταλόγου, οπότε μια μετονομασία παράγει μια μονάδα την οποία ο πίνακας ελέγχου παραθέτει αλλά δεν καλεί ποτέ.
Οτιδήποτε άλλο — ο πελάτης PHP
Ένα αρχείο, καμία εξάρτηση, καμία υπόθεση πίνακα ελέγχου. Τοποθετήστε το ZinnProvisioning.php στη δική σας βάση κώδικα και καλέστε έξι μεθόδους.
require_once 'ZinnProvisioning.php';
$zinn = new ZinnProvisioning(getenv('ZINN_API_KEY'));
// Όταν μια παραγγελία εξοφλείται — μία φορά ανά ΠΕΛΑΤΗ, μετά μία φορά ανά ΥΠΗΡΕΣΙΑ:
$orgId = $zinn->account('customer-4211', 'Acme Ltd');
$siteId = $zinn->provision('service-9915', $orgId, 'acme.com', 'mainstream', 'wordpress');
// Αποθηκεύστε το $orgId έναντι του πελάτη σας και το $siteId έναντι της υπηρεσίας σας.
$zinn->suspend($siteId, 'INV-2026-114 unpaid'); // ένα τιμολόγιο παραμένει απλήρωτο
$zinn->unsuspend($siteId); // πληρώνουν
$zinn->terminate($siteId); // ακυρώνουν — προγραμματίζει διαγραφή
// Όταν κάνουν κλικ στην επιλογή "σύνδεση στη φιλοξενία μου" — δημιουργήστε το κατά το ΚΛΙΚ, ποτέ κατά την απόδοση της σελίδας:
header('Location: ' . $zinn->signInLink($siteId));
Δεν γράφετε σε PHP; Οι ίδιες κλήσεις βρίσκονται στην αναφορά API και μπορείτε να τις πραγματοποιήσετε από οτιδήποτε.
Το κλειδί API
Επτά δικαιώματα, και τίποτα παραπάνω: org.create, org.read, sites.create, sites.view, sites.delete, reseller.view, reseller.provision.
⛔ Όχι
reseller.manage. Ένα κλειδί που επικολλάτε σε έναν πίνακα χρέωσης θα πρέπει να μπορεί να θέτει σε αναστολή έναν πελάτη λόγω μη πληρωμής και να τον συνδέει· δεν θα πρέπει να μπορεί να επανεγγραφεί τα διαπιστευτήρια της δικής σας πύλης πληρωμών.
Οι δύο κανόνες που κοστίζουν χρήματα όταν παραβιάζονται
- Συνδέστε τον λογαριασμός με βάση τον ΠΕΛΑΤΗ σας και τον ιστότοπο με βάση την ΥΠΗΡΕΣΙΑ σας. Η δεύτερη παραγγελία ενός πελάτη
- Στείλτε ένα κλειδί αμεταβλητότητας σε κάθε δημιουργία, που προέρχεται από το δικό σας αναγνωριστικό για το αντικείμενο. Κάθε
πρέπει να καταλήξει στον λογαριασμό που διαθέτει ήδη. Συνδέστε και τα δύο στην υπηρεσία και ο ένας πελάτης καταλήγει με τρεις ασυσχέτιστους λογαριασμούς και τρία ξεχωριστά πάνελ ελέγχου.
σύστημα χρέωσης επαναλαμβάνει την προσπάθεια — μια επιστρεφόμενη κλήση πύλης φτάνει δύο φορές, ένας διαχειριστής επανεκτελεί μια αποτυχημένη εκχώρηση, ένας πελάτης κάνει διπλό κλικ. Χωρίς αυτό, η δεύτερη προσπάθεια δημιουργεί έναν δεύτερο ιστότοπο και χρεώνεστε γι' αυτόν. Τόσο οι μονάδες όσο και ο πελάτης PHP το κάνουν αυτό για εσάς· εάν καλείτε το API απευθείας, στείλτε Idempotency-Key.
Τρία πεδία που είναι εύκολο να παραλειφθούν
Το καθένα καταστρέφει ένα ολόκληρο ρήμα και κανένα δεν εμφανίζεται ως τίποτα άλλο παρά ως σφάλμα επικύρωσης — εκτός από το πρώτο, το οποίο εμφανίζεται ως απολύτως τίποτα:
- ⛔⛔ Ένας πελάτης πρέπει να ενταχθεί σε ένα πρόγραμμα ΠΡΙΝ εκχωρηθεί ο πρώτος του ιστότοπος, με
POST /v1/reseller/clients/{orgId}/plan, και το subscription_id του να διαβιβάζεται στο POST /v1/sites. Αυτό είναι το μοναδικό χωρίς σφάλμα για ανάγνωση. Ένας νέος λογαριασμός πελάτη δεν περιέχει καμία συνδρομή και το POST /v1/sites δεν έχει πεδίο προγράμματος, επομένως ένας ιστότοπος που εκχωρείται χωρίς πρόγραμμα δεν φέρει κανένα απολύτως πρόγραμμα: η δήλωση χονδρικής σας βασίζεται στις ενεργές συνδρομές των πελατών σας, οπότε δεν αυξάνεται καμία γραμμή και το Zinn® δεν σας χρεώνει τίποτα για όσο διάστημα τρέχει η φιλοξενία· ο πελάτης σας δεν κληρονομεί καμία απολύτως παροχή, οπότε δεν εφαρμόζεται καμία ποσόστωση στον ιστότοπό του· και δεν υπάρχει τίποτα για να αλλάξει μια αναβάθμιση. Η παραγγελία επιστρέφει 201, ο ιστότοπος εκχωρείται και εξυπηρετεί τέλεια. Τίποτα σε κανένα άκρο δεν αναφέρει τίποτα από όλα αυτά.
Η σειρά έχει σημασία: το POST /v1/sites καταγράφει όποια συνδρομή υπάρχει τη στιγμή που εκτελείται, επομένως ένα πρόγραμμα που ορίζεται εκ των υστέρων δεν προσκολλάται αναδρομικά.
- Το
POST /v1/sitesαπαιτείstack_type. Παραλείψτε το και καμία παραγγελία δεν μπορεί να πετύχει. - **Το
DELETE /v1/sites/{siteId}απαιτεί ένα σώμα `{"confirm_domain": "<the site's own
domain>"}** — μια πληκτρολογημένη επιβεβαίωση, επειδή αυτό είναι το καταστroφικό ρήμα. Παραλείψτε το και καμία ακύρωση δεν μπορεί να πετύχει, επομένως η υπηρεσία εξακολουθεί να εκτελείται και εσείς εξακολουθείτε να χρεώνεστε γι' αυτήν. Διαβάστε τον τομέα πίσω από το GET /v1/reseller/services/{siteId}` αντί να χρησιμοποιήσετε τη δική σας εγγραφή: συγκρίνεται με τον κύριο τομέα του ίδιου του ιστότοπου και ποτέ με ένα ψευδώνυμο.
Διαβάστε ολόκληρο το σφάλμα, όχι μόνο την πρόταση
Το μήνυμα άρνησης επικύρωσης είναι σκόπιμα γενικό — "The request was well-formed but failed validation." — επειδή το μισό που μπορεί να ενεργοποιηθεί βρίσκεται στο details, το οποίο κατονομάζει το πεδίο και τον λόγο. Τόσο οι μονάδες όσο και ο πελάτης PHP το προσαρτούν στο μήνυμα που εμφανίζουν στον διαχειριστή σας. Εάν καλείτε μόνοι σας το API, διαβάστε το error.details· ορισμένες καταχωρίσεις φέρουν μια σκέτη τιμή αντί για πρόταση, πράγμα που εξηγεί πώς το max_sites: 0 φτάνει σε εσάς όταν το πρόγραμμα μεταπωλητή σας δεν έχει χώρο.
Πριν από την πρώτη σας παραγγελία
Οι ιστότοποι που αγοράζουν οι πελάτες σας μετρούνται έναντι του επιτρεπόμενου ορίου ιστοτόπων του δικού σας προγράμματος μεταπωλητή, επομένως χρειάζεστε ένα πρόγραμμα με διαθέσιμο χώρο. Ένας έλεγχος σύνδεσης δεν μπορεί να το εντοπίσει αυτό — διαβάζει το πρόγραμμά σας και δεν εκχωρεί τίποτα — επομένως αναφέρει έναν υγιή λογαριασμός που δεν μπορεί ακόμη να πραγματοποιήσει πωλήσεις. Μια παραγγελία που υποβάλλεται χωρίς διαθέσιμο όριο απορρίπτεται με ένα μήνυμα που λέει ακριβώς αυτό.
Επαληθεύστε τη λήψη σας
Και τα δύο αρχεία αρχειοθήκης παρέχονται μέσω TLS από το δικό μας όνομα κεντρικού υπολογιστή, ποτέ δεν ανακατευθύνονται αλλού, με τα αθροίσματα ελέγχου SHA-256 τους τυπωμένα δίπλα στους συνδέσμους λήψης στη σελίδα λήψεων.
Εξακολουθείτε να έχετε απορίες;
Η υποστήριξη περιλαμβάνεται σε κάθε πρόγραμμα και απαντάμε στη γλώσσα σας.
Επικοινωνία με την υποστήριξη → Όλα τα άρθρα →