Για τεχνικούς
Τι ακριβώς αγγίζει το Pricebreeze στο WooCommerce
Οι ερωτήσεις που κάνει ο τεχνικός ενός καταστήματος πριν πει «ναι», με τις απαντήσεις που ισχύουν στον κώδικα.
Μία σελίδα, όχι τεκμηρίωση. Αν κάτι λείπει, γράψε μας και θα το προσθέσουμε εδώ.
Δικαιώματα, ανάγνωση και εγγραφή
Τι διαβάζει
- Προϊόντα μέσω της WooCommerce REST API, με κλειδί «Ανάγνωση/Εγγραφή» που φτιάχνεις εσύ και ανακαλείς όποτε θέλεις.
- Παραλλαγές μεταβλητών προϊόντων, ώστε μια γραμμή τιμοκαταλόγου να μπορεί να στοχεύσει τη σωστή.
- Ανά προϊόν: id, sku, όνομα, τύπος, γονέας, τιμή, κανονική τιμή, τιμή προσφοράς, διαθεσιμότητα. Προαιρετικά ένα πεδίο barcode που διαλέγεις εσύ.
Τι γράφει
- Μόνο δύο πεδία: regular_price και stock_status. Τίποτα άλλο δεν στέλνεται ποτέ σε αίτημα εγγραφής.
- Μέσω products/batch και products/{parent}/variations/batch, αποκλειστικά στον πίνακα update. Παρτίδες περίπου 100, με σταδιακή επιβράδυνση όταν το κατάστημα δυσκολεύεται.
- Ποτέ create, ποτέ delete. Δεν υπάρχει διαδρομή στον κώδικα που να δημιουργεί ή να σβήνει προϊόν.
Παραγγελίες, πελάτες, εκπτωτικά κουπόνια, ρυθμίσεις και χρήστες δεν ζητούνται και δεν διαβάζονται. Αν το κλειδί έχει ευρύτερα δικαιώματα, το Pricebreeze δεν τα χρησιμοποιεί.
Πού μένουν τα κλειδιά και τι τα προστατεύει
Τα Consumer key και secret κρυπτογραφούνται σε επίπεδο εφαρμογής με AES-256-GCM, πάνω από την κρυπτογράφηση της βάσης. Το κλειδί κρυπτογράφησης ζει σε μεταβλητή περιβάλλοντος, ξεχωριστά από τη βάση.
Τα plaintext δεν περνούν ποτέ σε logs, σε αναφορές σφαλμάτων, σε URL ή στον browser. Ο server τα ανοίγει μόνο τη στιγμή της κλήσης προς το κατάστημα.
Με την «Αποσύνδεση» σβήνονται από εμάς. Ανεξάρτητα από αυτό, μπορείς να διαγράψεις το κλειδί μέσα από το WordPress όποτε θέλεις, και η σύνδεση σταματά αμέσως.
- AES-256-GCM, με έλεγχο ακεραιότητας
- Αλλοιωμένο κρυπτογράφημα δεν ανοίγει, δεν αποδίδει σκουπίδια.
- Το κρυπτογράφημα δένεται με τον προορισμό
- Η διεύθυνση του καταστήματος είναι μέρος της κρυπτογράφησης. Αν κάποιος καταφέρει να αλλάξει τη διεύθυνση, τα κλειδιά απλώς δεν ανοίγουν. Προστέθηκε μετά από δικό μας έλεγχο διείσδυσης.
- Καμία κλήση σε ιδιωτική διεύθυνση
- Πριν από κάθε σύνδεση αναλύεται το DNS και απορρίπτονται μη δημόσιες διευθύνσεις. Τα redirects δεν ακολουθούνται, ώστε να μην παρακάμπτεται ο έλεγχος.
- Δύο ανεξάρτητοι διακόπτες
- Η ανάκληση δουλεύει και από τις δύο μεριές: από το Pricebreeze και από το WordPress.
Τι γίνεται όταν το κατάστημα δεν είναι όπως το είδε ο χρήστης
Ανάμεσα στον έλεγχο και την εγγραφή μπορεί να μεσολαβήσουν λεπτά ή ώρες. Πριν γράψει, το σύστημα ξαναδιαβάζει ζωντανά τα προϊόντα και εξαιρεί ό,τι δεν ταιριάζει. Κάθε εξαίρεση παίρνει κωδικό και φαίνεται στην αναφορά.
| Κωδικός | Πότε | Αποτέλεσμα |
|---|---|---|
| ON_SALE | Το προϊόν έχει ενεργή τιμή προσφοράς τη στιγμή της εγγραφής. | Καμία εγγραφή. Η έκπτωση που βλέπει ο πελάτης δεν αλλάζει σιωπηλά. |
| STORE_CHANGED | Η τρέχουσα τιμή διαφέρει από αυτή που είχε ο χρήστης μπροστά του στον έλεγχο. | Καμία εγγραφή. Η έγκριση αφορούσε άλλη κατάσταση. |
| MISSING_IN_STORE | Το προϊόν δεν επιστρέφεται πλέον από το κατάστημα. | Καμία εγγραφή. Δεν δημιουργείται προϊόν και δεν επιλέγεται άλλο. |
| ALREADY_APPLIED | Η ζητούμενη τιμή ή διαθεσιμότητα ισχύει ήδη. | Καμία εγγραφή. Το ιστορικό δεν γεμίζει με αλλαγές που δεν άλλαξαν τίποτα. |
Καμία εξαίρεση δεν επιλύεται αυτόματα. Το σύστημα δεν ξαναϋπολογίζει, δεν προσαρμόζει και δεν ξαναδοκιμάζει με άλλη τιμή.
Απομόνωση δεδομένων ανά πελάτη
01
Row Level Security
Κάθε πίνακας κουβαλά αναγνωριστικό πελάτη και πολιτική στη βάση. Ερώτημα εκτός του δικού σου χώρου δεν επιστρέφει γραμμές, ανεξάρτητα από το ποιος το έστειλε.
02
Δικαιώματα ανά στήλη
Στήλες που ορίζει το σύστημα, όπως κατάσταση εργασίας ή σημάνσεις ποιότητας, δεν είναι εγγράψιμες από τον χρήστη ακόμη κι όταν η γραμμή του ανήκει.
03
Έλεγχος στον server
Κάθε ενέργεια που αλλάζει κατάσταση περνά από κώδικα στον server, με έλεγχο ρόλου και πακέτου. Ο ιδιοκτήτης εγκρίνει και στέλνει, το μέλος ετοιμάζει.
Ο δημόσιος κώδικας του browser δεν είναι μυστικό: το κλειδί που φτάνει στον επισκέπτη είναι σχεδιασμένο να είναι δημόσιο. Γι' αυτό η απομόνωση δεν στηρίζεται σε αυτόν, αλλά στα τρία επίπεδα από πάνω, που ζουν στη βάση και στον server.
Όρια ρυθμού
Τα όρια υπάρχουν για να μη γίνει η υπηρεσία εργαλείο επίθεσης σε λογαριασμούς και για να μην ξεφύγει το κόστος ανάγνωσης. Μετρώνται στη βάση, ώστε να ισχύουν σε όλες τις εκτελέσεις.
| Ενέργεια | Όριο |
|---|---|
| Σύνδεση, ανά διεύθυνση και ανά email | 30 και 10 ανά 15 λεπτά |
| Δημιουργία λογαριασμού ανά διεύθυνση | 5 την ώρα |
| Σύνδεσμος σύνδεσης ανά email | 3 την ώρα |
| Ανεβάσματα ανά χώρο εργασίας | 30 την ώρα |
Πώς χρησιμοποιείται το μοντέλο
Καρφωμένες εκδόσεις μοντέλου
Τα αναγνωριστικά των μοντέλων είναι σταθερά στον κώδικα, όχι «η τελευταία έκδοση». Μια αναβάθμιση είναι απόφαση με δοκιμή, όχι κάτι που συμβαίνει στον ύπνο σου.
Δομημένη έξοδος, με σχήμα
Το μοντέλο επιστρέφει γραμμές σε συγκεκριμένο σχήμα. Ό,τι δεν το τηρεί σημαίνεται και δεν γίνεται σιωπηλά γραμμή προϊόντος.
Το περιεχόμενο αρχείου είναι δεδομένα
Το κείμενο ενός τιμοκαταλόγου δεν λειτουργεί ποτέ ως οδηγία. Κελιά που μοιάζουν με εντολή προς μοντέλο ή με τύπο υπολογιστικού φύλλου σημαίνονται και πάνε στον έλεγχο.
Καμία αριθμητική από το μοντέλο
Τιμές, περιθώρια και στρογγυλοποιήσεις υπολογίζονται από ντετερμινιστικό κώδικα, σε ακέραια λεπτά. Το μοντέλο δεν συμμετέχει σε κανέναν υπολογισμό χρήματος.
Τι δεν υπάρχει
Χρήσιμο να το ξέρεις από τώρα, γιατί κανένα από αυτά δεν είναι στα σχέδια της τρέχουσας έκδοσης.
- Δημόσιο API προς το Pricebreeze
- Εξερχόμενα webhooks προς δικά σου συστήματα
- Shopify ή άλλη πλατφόρμα εκτός WooCommerce
- Δημιουργία προϊόντων στο κατάστημα
- Οποιαδήποτε πρόσβαση σε παραγγελίες ή πελάτες
- SSO ή SAML
- Σύνδεση σε API προμηθευτή σε πραγματικό χρόνο
- Πλήρης αυτοματισμός χωρίς ανθρώπινη έγκριση
Αν αυτά στέκουν, το υπόλοιπο είναι απόφαση του ιδιοκτήτη
Δύο σελίδες ακόμη καλύπτουν ό,τι θα ρωτούσε: τι ακριβώς αλλάζει στο κατάστημα, και πόσο κρατά η εγκατάσταση.