Το Public API προορίζεται για συνδέσεις μεταξύ διακομιστών με καταστήματα, συστήματα ηλεκτρονικού εμπορίου, πρόσθετα WordPress/WooCommerce και εξωτερικές ροές παραγωγής.
Δημιουργήστε διαπιστευτήρια API στις ρυθμίσεις ηλεκτρονικού εμπορίου. Το Access Token εμφανίζεται μία φορά, οπότε αποθηκεύστε το αμέσως στο ασφαλές αποθετήριο μυστικών του backend.
Κρατήστε τα Access Key και Access Token στον διακομιστή σας. Τα endpoints με έλεγχο ταυτότητας απορρίπτουν κλήσεις από προγράμματα περιήγησης που περιλαμβάνουν κεφαλίδες Origin ή Referer.
Τα διαπιστευτήρια μπορούν να έχουν περιορισμένα δικαιώματα. Χρησιμοποιήστε GET /auth/check για να επαληθεύσετε το ενεργό κατάστημα, τις δυνατότητες προγράμματος και τα δικαιώματα που επιστρέφονται για τα διαπιστευτήρια.
Η παρακάτω βοηθητική συνάρτηση χρησιμοποιείται στα υπόλοιπα παραδείγματα. Είναι απλό fetch και εκτελείται σε Node.js 18+ ή οποιοδήποτε περιβάλλον διακομιστή παρέχει fetch.
Ο πίνακας παρακάτω αντιστοιχεί στις δημόσιες διαδρομές του backend-public-api/app.js. Οι διαδρομές εμφανίζονται με το πρόθεμα δημόσιου proxy που χρησιμοποιούν οι εξωτερικές ενσωματώσεις.
Μέθοδος
Endpoint
Περιγραφή
Πρόσβαση
GET
/public-api/healthz
Έλεγχος υγείας υπηρεσίας.
δημόσιο
GET
/public-api/v1/auth/check
Επικυρώνει διαπιστευτήρια και επιστρέφει κατάστημα, δικαιώματα και δυνατότητες προγράμματος.
οποιαδήποτε έγκυρα διαπιστευτήρια
GET
/public-api/v1/customer-orders
Επιστρέφει λίστα παραγγελιών πελατών με σελιδοποίηση και φίλτρα.
orders:read
GET
/public-api/v1/customer-orders/:id
Επιστρέφει μία παραγγελία πελάτη με διαμορφωμένα στοιχεία προϊόντων.
orders:read
POST
/public-api/v1/customer-orders/batch
Επιστρέφει έως 100 παραγγελίες βάσει ID.
orders:read
PATCH
/public-api/v1/customer-orders/:id/status
Ενημερώνει την κατάσταση παραγγελίας.
orders:write
PATCH
/public-api/v1/customer-orders/:orderId/quantity
Ενημερώνει τις ποσότητες επιλεγμένων στοιχείων παραγγελίας.
Τα endpoints παραγγελιών επιτρέπουν σε εξωτερικό κατάστημα να διαβάζει διαμορφωμένα στοιχεία, να ενημερώνει ποσότητες, να μετακινεί παραγγελίες σε καταστάσεις εκτέλεσης και να αφαιρεί εγκαταλελειμμένες παραγγελίες.
Παράμετρος
Υποχρεωτικό
Λεπτομέρειες
name
όχι
Αναζητά όνομα σχεδίου και αριθμητικό ID παραγγελίας.
category_id
όχι
Φιλτράρει βάσει ID κατηγορίας προϊόντος.
order_status
όχι
Μία από τις επιτρεπόμενες καταστάσεις παραγγελίας.
offset
όχι
Προεπιλογή 0. Πρέπει να είναι >= 0.
limit
όχι
Προεπιλογή 9 για αυτόν τον ελεγκτή, μέγιστο 50.
order_by
όχι
id, created_at ή design_name.
direction
όχι
ASC ή DESC.
Παράδειγμα αιτήματος (fetch)
const params =newURLSearchParams({limit:'20',offset:'0',order_status:'shopping_cart',order_by:'created_at',direction:'DESC'});const orders =awaitalterFetch(`/customer-orders?${params.toString()}`);const order =awaitalterFetch('/customer-orders/123');const batch =awaitalterFetch('/customer-orders/batch',{method:'POST',body:JSON.stringify({customerOrderIds:[123,124,125]})});
Επιτρεπόμενες τιμές
Κατάσταση
Περιγραφή
shopping_cart
Ροή καλαθιού· ο πελάτης μπορεί ακόμη να επεξεργαστεί τη διαμόρφωση.
editable
Η παραγγελία παραμένει επεξεργάσιμη από τον πελάτη.
paid
Η παραγγελία έχει πληρωθεί και είναι έτοιμη για εκτέλεση.
Δημιουργήστε βραχύβιο token ενσωμάτωσης στον διακομιστή, περάστε το στο iframe/περιβάλλον εκτέλεσης και αφήστε το περιβάλλον να καλέσει bootstrap με token Bearer.
Παράμετρος
Υποχρεωτικό
Λεπτομέρειες
runtimeBindingId
συνιστάται
Προτιμώμενο αναγνωριστικό για ενεργές συνδέσεις εκτέλεσης.
Τα endpoints εισαγωγής της γεννήτριας δέχονται μόνο αιτήματα ανάγνωσης μεταξύ διακομιστών. Απαιτούν τις τυπικές κεφαλίδες API, το δικαίωμα embed:session:create και ενεργό πρόγραμμα. Η εξουσιοδότηση εισαγωγής δεν δημιουργεί συνεδρία επεξεργασίας και δεν καταναλώνει το μηνιαίο όριό της. Το άνοιγμα του επεξεργαστή χρησιμοποιεί τον ίδιο μετρητή monthlyEmbedTokenLimit με τα υπόλοιπα ενσωματωμένα εργαλεία.
Εύρεση και εισαγωγή μοντέλων με γεννήτρια
Χρησιμοποιήστε το /model-generator/models για να εμφανίσετε τα διαθέσιμα μοντέλα με γεννήτριες. Ο περιγραφέας generator καθορίζει συγκεκριμένα projectId, revision, configurationId, templateRevision, productId και productModel3dId. Ακολουθήστε το importPath του για να ανακτήσετε ακριβώς αυτήν την αναθεώρηση προέλευσης. Τα manifests πόρων προϊόντων παρέχουν επίσης το generators και τον περιγραφέα generator κάθε μοντέλου. Τα πρότυπα μπορούν να εισαχθούν ξεχωριστά, βάσει διαμόρφωσης και αναθεώρησης.
Φίλτρα καταλόγων
Endpoint
Λεπτομέρειες
/model-generator/models
Λίστα μοντέλων: name (ή q), categoryId, scope (all, own, global), limit (1–50) και offset.
/model-generator/catalog
Κατάλογος προτύπων: generatorType, productId, audience, q, templateKey, configurationId, limit και offset.
/model-generator/projects
Λίστα έργων: configurationId, q, scope (all, own, global), limit και offset. Ο δημόσιος proxy χρησιμοποιεί από προεπιλογή scope all.
/model-generator/image-libraries/:kind/assets
Βιβλιοθήκες υφών και φόντων: το kind είναι texture ή background· τα q, category και mapType φιλτράρουν τους διαθέσιμους πόρους.
Η εισαγωγή ενός έργου περιέχει document, revision, template και ένα manifest files. Κάθε αρχείο παρέχει ένα path κάτω από το /v1/model-generator/· προσθέστε μπροστά του το /public-api κατά τη λήψη από το Alter Product. Αντιγράψτε τα απαραίτητα αρχεία στον δικό σας χώρο αποθήκευσης και αντικαταστήστε τις αναφορές προέλευσης με τοπικές αναφορές. Εισαγάγετε τις κούκλες και τις βιβλιοθήκες υφών μέσω των αντίστοιχων endpoints καταλόγου· το public-files περιορίζεται σε επιτρεπόμενες διαδρομές πόρων και τα πρότυπα πρέπει να περνούν τους ελέγχους πρόσβασης διαμόρφωσης και αναθεώρησης.
Παράδειγμα αιτήματος (fetch)
// Server-side: uses the alterFetch helper and authHeaders defined above.const catalog =awaitalterFetch('/model-generator/models?'+newURLSearchParams({scope:'all',limit:'24',offset:'0'}));const selected = catalog.items[0];if(!selected?.generator)thrownewError('Select an available generator model');const importPath = selected.generator.importPath;if(!importPath.startsWith('/v1/model-generator/projects/')){thrownewError('Invalid generator import path');}const bundle =awaitalterFetch(importPath.slice('/v1'.length));for(const file of bundle.files){if(!file.path.startsWith('/v1/model-generator/')){thrownewError('Invalid generator file path');}const response =awaitfetch('https://alterproduct.com/public-api'+ file.path,{headers: authHeaders,redirect:'error'});if(!response.ok)thrownewError(`File download failed: ${response.status}`);const bytes =newUint8Array(await response.arrayBuffer());// Persist bytes in your local storage; record the mapping from// file.sourceHref / file.href to the resulting local file reference.}// Persist bundle.document, bundle.template and revision metadata locally.// Import the related product asset and its textures/mockups as needed:const product =awaitalterFetch('/assets/products/'+ selected.generator.productId);const mannequins =awaitalterFetch('/model-generator/mannequins');console.log({ product, mannequins });
Συνεδρία επεξεργαστή και τοπική αποθήκευση
Δημιουργήστε τη συνεδρία επεξεργαστή με tool: model-generator, ένα θετικό αριθμητικό toolId που προσδιορίζει το τοπικό έργο της γεννήτριας (όχι το UUID του ούτε το ID προϊόντος WooCommerce) και το επιτρεπόμενο origin του καταστήματος. Μη μεταβιβάζετε designId, orderId, runtimeBindingId ή πεδία καλαθιού για αυτό το εργαλείο. Το UUID του έργου της γεννήτριας είναι ξεχωριστό αναγνωριστικό. Μεταβιβάστε το token που επιστρέφεται μέσω του handshake iframe· το runtime bootstrap επιστρέφει το περιβάλλον της γεννήτριας με storageMode: wordpress_local.
// Server-side, after authorizing the merchant's access to this local project.const localProjectId =42;// Local generator project ID, not its UUID or WC product ID.const session =awaitalterFetch('/embed/session',{method:'POST',body:JSON.stringify({tool:'model-generator',toolId: localProjectId,origin:'https://yourstore.com'})});// The iframe receives session.token through ALTER_CUSTOMIZER_SESSION_READY.// Do not put API credentials or the token in the iframe URL.const bootstrapResponse =awaitfetch('https://alterproduct.com/public-api/v1/runtime/bootstrap',{headers:{Authorization:`Bearer ${session.token}`}});if(!bootstrapResponse.ok)thrownewError('Generator bootstrap failed');const context =await bootstrapResponse.json();console.log(context);
// Host page: WordPress returns a numeric toolId and a UUID in id.const url =newURL('https://alterproduct.com/app/model-generator');url.search=newURLSearchParams({embedded:'1',lng:'en',parentOrigin:window.location.origin,toolId:String(localProject.toolId),serverProjectId: localProject.id}).toString();// Optional: serverProjectRevision pins an existing saved revision.iframe.src= url.toString();// Install the authenticated handshake and storage bridge described below.// Setting iframe.src alone does not authorize the editor or provide storage.
Μηνύματα iframe που χρησιμοποιεί η γέφυρα WordPress
Το πρόσθετο WordPress φιλοξενεί τη γέφυρα αποθήκευσης και ελέγχει τα δικαιώματα διαχειριστή ή υπευθύνου WooCommerce. Επαληθεύει το origin του iframe, το παράθυρο προέλευσης, το nonce, το αναγνωριστικό αιτήματος και τις επιτρεπόμενες διαδρομές του έργου. Η γέφυρα στέλνει τις τοπικές αναγνώσεις και εγγραφές στο /wp-json/alter-wc/v1/model-generator. Τα διαπιστευτήρια API παραμένουν στον διακομιστή. Μια προσαρμοσμένη ενσωμάτωση πρέπει να υλοποιεί ισοδύναμη διαχείριση αποθήκευσης με έλεγχο ταυτότητας· το δημόσιο API της γεννήτριας δεν αποθηκεύει έργα στο Alter Product.
Τύπος
Περιγραφή
ALTER_CHILD_HELLO / ALTER_PARENT_ACK
Το θυγατρικό iframe ξεκινά το handshake με ένα nonce· η γονική σελίδα επιβεβαιώνει το ίδιο nonce.
Το θυγατρικό iframe ζητά μια συνεδρία επεξεργασίας model-generator· η γονική σελίδα επιστρέφει το εξουσιοδοτημένο token.
ALTER_MODEL_GENERATOR_REQUEST
Το θυγατρικό iframe στέλνει requestId, nonce και request που περιέχει method, path, data και responseType.
ALTER_MODEL_GENERATOR_RESPONSE
Η γονική σελίδα απαντά με τα ίδια requestId και nonce, μαζί με status, data, headers και τυχόν error.
// Messages after ALTER_CHILD_HELLO / ALTER_PARENT_ACK agree on the nonce.// Iframe -> parent:const sessionRequest ={type:'ALTER_CUSTOMIZER_INIT_SESSION',nonce: handshakeNonce,payload:{tool:'model-generator',alterProductId: localProject.toolId,mode:'edit'}};// Parent -> iframe, after the server authorizes the merchant and issues a token:const sessionReady ={type:'ALTER_CUSTOMIZER_SESSION_READY',nonce: handshakeNonce,token: session.token,tool:'model-generator',cartKey:`model-generator:${localProject.id}`,mode:'edit',localSession:false,adminSession:true};// Send only to the validated iframe's exact origin and source window.// An authorized token and successful bootstrap are still required.
Η αποθήκευση παρέχει expectedRevision, templateRevision, document και αναφορές σε τεχνουργήματα. Δημιουργεί μια αμετάβλητη αναθεώρηση· ένα μη ενημερωμένο expectedRevision επιστρέφει HTTP 409. Το WordPress αποθηκεύει τα μεταδεδομένα στη βάση δεδομένων του και τα αρχεία στον κατάλογο uploads. Το JSON ελαχιστοποιείται και συμπιέζεται με gzip, όταν η συμπίεση μειώνει το μέγεθός του.
// Example message from the iframe; savedSnapshot and artifact IDs come// from the generator. The host checks origin/source/nonce/project permissions.const message ={type:'ALTER_MODEL_GENERATOR_REQUEST',requestId: crypto.randomUUID(),nonce: handshakeNonce,request:{method:'POST',path:`/pattern-generator/projects/${projectUuid}/revisions`,data:{expectedRevision: loadedRevision,name: projectName, templateRevision,document: savedSnapshot,references:{artifactIds: savedArtifactIds }},responseType:'json'}};
Η ενέργεια Χρήση αποθηκευμένου μοντέλου σε σχέδιο δημοσιεύει μια πλήρη αποθηκευμένη αναθεώρηση σε ένα συνδεδεμένο σχέδιο. Οι πελάτες τη βλέπουν στη συνέχεια μέσω του υπάρχοντος Customizer, Configurator ή Viewer, με τις συνήθεις συνδέσεις προϊόντων και τους ελέγχους συνδρομής. Ο επεξεργαστής της γεννήτριας παραμένει εργαλείο του εμπόρου. Οι σύνδεσμοι των παραγγελιών διατηρούν το αποθηκευμένο έργο και την αναθεώρηση, ώστε οι μεταγενέστερες αλλαγές να μην τροποποιούν αυτόματα παλαιότερες παραγγελίες.
Οι εισαγωγές σχεδίων παρέχουν πρόσβαση σε σχέδια και αρχεία που φιλοξενούνται στο Alter για εξωτερική παραγωγή ή μεταφορά δεδομένων. Το API ελέγχει αν πληρούνται οι προϋποθέσεις του προγράμματος Business.
Τα δημόσια αρχεία προεπισκόπησης είναι κατάλληλα για προγράμματα περιήγησης. Τα προστατευμένα αρχεία απαιτούν υπογεγραμμένο URL ή διαπιστευτήρια API με files:read. Οι γραμματοσειρές και τα νομίσματα έχουν δημόσια endpoints ανάγνωσης.
Οι συνδέσεις περιβάλλοντος εκτέλεσης συνδέουν εξωτερικά εμπορικά προϊόντα με σχέδια Alter Product και τύπους εργαλείων. Χρησιμοποιούνται κυρίως από ενσωματώσεις WordPress/WooCommerce και προηγμένα backend καταστημάτων.
Παράμετρος
Υποχρεωτικό
Λεπτομέρειες
designId
όχι
ID σχεδίου Alter Product που ανήκει στο κατάστημα.
externalProductId
ναι για συγχρονισμό
Εξωτερικό ID προϊόντος, π.χ. ID προϊόντος WooCommerce.
runtimeType
ναι για συγχρονισμό
viewer, configurator ή customizer.
status
όχι
draft, active, inactive, archived ή legacy_active.
awaitalterFetch('/runtime-bindings/sync-from-wordpress',{method:'POST',body:JSON.stringify({bindings:[{externalProductId:'wc_123',runtimeType:'viewer',status:'active',externalDesign:{externalDesignKey:'wp-design-381',productId:4,title:'WooCommerce local design',manifestUrl:'https://yourstore.com/wp-content/uploads/alter/381/manifest.json',assetBaseUrl:'https://yourstore.com/wp-content/uploads/alter/381/',manifestHash:'a3b1...',sourceMeta:{pluginVersion:'1.2.0'}}}]})});
Το endpoint ανταλλαγής σύνδεσης WordPress καταναλώνει κωδικό μεταβίβασης μίας χρήσης και επιστρέφει διαπιστευτήρια API στο πρόσθετο. Δεν αποτελεί endpoint γενικής δημιουργίας διαπιστευτηρίων.
Τα περισσότερα σφάλματα ελεγκτών κανονικοποιούνται σε απάντηση code. Το middleware ελέγχου ταυτότητας και οι περιοριστές ρυθμού μπορούν να επιστρέφουν απάντηση error.
// Controller error{"code":"assetCatalog.invalidType"}// Auth middleware or rate limit{"error":"Unauthorized"}{"error":"Too Many Requests"}