Το Skroutz Smart Cart Webhook (v3.2.0) είναι ένα εξειδικευμένο πρόσθετο (module) για το PrestaShop 8.x, σχεδιασμένο από τον Ηλία Δαμιανίδη (DamiansLab), το οποίο αυτοματοποιεί σε πραγματικό χρόνο την εισαγωγή παραγγελιών από το Skroutz Smart Cart με πλήρη λογιστική ακρίβεια ΦΠΑ, ανίχνευση τιμολογίων ΑΦΜ/ΔΟΥ και απομόνωση μεταφορικών.

Περιβάλλον ρυθμίσεων του Skroutz Smart Cart Webhook v3.2.0 στο PrestaShop 8.2 με διαμόρφωση IP Whitelist, ομάδων πελατών και μεταφορέων.
Απρόσκοπτη γεφύρωση Skroutz Marketplace και PrestaShop 8
Κάθε φορά που ολοκληρώνεται μια αγορά μέσω του Skroutz Smart Cart, το webhook endpoint του module (/module/skroutzwebhook/webhook) υποδέχεται το JSON payload, επαληθεύει τη διεύθυνση αποστολής μέσω CIDR IP Whitelist και δημιουργεί αυτόματα τον πελάτη, τη διεύθυνση, το καλάθι και την τελική παραγγελία στο PrestaShop — χωρίς καμία χειροκίνητη καταχώρηση και χωρίς την αποστολή ανεπιθύμητων αυτοματοποιημένων emails στον αγοραστή.
Συνδυάζεται εγγενώς με το συνοδευτικό module πληρωμών Πληρωμή μέσω Skroutz (skroutzpayment), αποτυπώνοντας με ακρίβεια τον τρόπο εξόφλησης και τον πραγματικό κωδικό συναλλαγής του marketplace.
Βασικές δυνατότητες και αρχιτεκτονικές καινοτομίες
1. Έξυπνη ταύτιση προϊόντων 5 επιπέδων (Smart Product Matching Cascade)
- Πολυεπίπεδη αναζήτηση κωδικού (
findProduct): Για κάθε γραμμή προϊόντος (shop_uid), ο αλγόριθμος ελέγχει διαδοχικά: (1) το Product ID, (2) το κύριο Reference (SKU) του προϊόντος, (3) το Reference του συνδυασμού/παραλλαγής στον πίνακα ps_product_attribute, (4) το MPN του κύριου προϊόντος και (5) το MPN του συνδυασμού.
- Πλήρης υποστήριξη συνδυασμών (Combinations): Αποτρέπει τις αστοχίες αποθέματος σε καταστήματα με μεγέθη, χρώματα ή τεχνικές παραλλαγές, δεσμεύοντας ακριβώς το σωστό
id_product_attribute.
2. Μηχανή αποφορολόγησης ακριβείας 6 δεκαδικών (Net Price & VAT Engine)
- Μηδενικές αποκλίσεις στρογγυλοποίησης: Επειδή το Skroutz αποστέλλει τελικές τιμές με ΦΠΑ (
unit_price), το module ανακτά δυναμικά τον συντελεστή ΦΠΑ του προϊόντος για τη διεύθυνση παράδοσης ($productObj->getTaxesRate($address)) και υπολογίζει την καθαρή τιμή με ακρίβεια 6 δεκαδικών ψηφίων: round($skroutzPriceGross / (1 + ($taxRate / 100)), 6).
- Δυναμικό SpecificPrice ανά καλάθι: Δημιουργεί εξατομικευμένη εγγραφή
SpecificPrice συνδεδεμένη αποκλειστικά με το id_cart της παραγγελίας, εξασφαλίζοντας 100% ταύτιση του τελικού ποσού πληρωμής.
3. Αυτόματη επέκταση βάσης δεδομένων για 14+ ψηφία Order Reference
- Αυτόματο Schema Migration (
installDb): Κατά την εγκατάσταση, το module εκτελεί αυτόματα ALTER TABLE ps_orders MODIFY reference VARCHAR(32) και ALTER TABLE ps_order_payment MODIFY order_reference VARCHAR(32).
- Άμεση αναζήτηση με τον κωδικό Skroutz: Αντικαθιστά τον τυχαίο 9ψήφιο κωδικό του PrestaShop με τον πραγματικό κωδικό παραγγελίας του Skroutz (π.χ.
261016-849201) τόσο στην παραγγελία όσο και στην εγγραφή πληρωμής.
4. Απομόνωση μεταφορικών (Hidden Carrier Logic) και Store Pickup
- Αποκλειστική ομάδα πελατών: Μέσω των μεθόδων
$customer->cleanGroups() και $customer->addGroups([$targetGroupId]), οι πελάτες του Skroutz εντάσσονται αποκλειστικά στην ειδική ομάδα (π.χ. Skroutz Only), κρατώντας τους μεταφορείς του marketplace αόρατους από το κοινό της λιανικής.
- Αυτόματη ανίχνευση Παραλαβής από το Κατάστημα: Ελέγχει τα πεδία
dispatch_method και courier του payload και, εφόσον εντοπίσει store_pickup, δρομολογεί αυτόματα την παραγγελία στον ξεχωριστό μεταφορέα SKROUTZ_CARRIER_PICKUP.
5. Υποστήριξη τιμολογίων (ΑΦΜ / ΔΟΥ) και Silent Order Status
- Καταγραφή στοιχείων τιμολόγησης B2B: Όταν η παραγγελία απαιτεί τιμολόγιο (
invoice: true), το module αποθηκεύει την Επωνυμία, το Επάγγελμα, το ΑΦΜ (vat_number) και τη ΔΟΥ τόσο στον πίνακα invoice της βάσης όσο και ως ιδιωτικό μήνυμα (Private Order Message) μέσα στην καρτέλα της παραγγελίας.
- Κατάσταση παραγγελίας χωρίς ειδοποιήσεις email: Δημιουργεί αυτόματα την κατάσταση
Payment Accepted (Skroutz) με send_email = false, αποφεύγοντας τις διπλές ειδοποιήσεις προς τον πελάτη.
Οι οθόνες της εφαρμογής σε desktop και mobile
Σημείωση: Για λόγους προστασίας προσωπικών δεδομένων, όλες οι οθόνες απεικονίζουν αποκλειστικά συνθετικά δεδομένα δοκιμών (εικονικά ονόματα, τηλέφωνα 21000000xx και εικονικά ΑΦΜ).

Καρτέλα Webhook Logs: παρακολούθηση εισερχόμενων JSON payloads σε πραγματικό χρόνο, έλεγχος κατάστασης και άμεση μετάβαση στην παραγγελία.

Αναλυτική απεικόνιση της μηχανής ταύτισης προϊόντων/συνδυασμών 5 επιπέδων και του υπολογισμού καθαρής τιμής (Net Price Engine).

Εισαγόμενη παραγγελία στο PrestaShop 8 με τον αυθεντικό κωδικό αναφοράς Skroutz, την ομάδα Skroutz Only και τη μέθοδο Πληρωμή μέσω Skroutz.

Αυτόματη εξαγωγή στοιχείων τιμολογίου (Επωνυμία, ΑΦΜ, ΔΟΥ, Δραστηριότητα) από το JSON payload και διπλή καταχώρηση στο Back-Office.

Μηχανισμός απομόνωσης μεταφορικών μέσω Customer Group Isolation και αυτόματης εναλλαγής μεταξύ Courier και Παραλαβής από Κατάστημα.

Εσωτερική θωράκιση: αυτόματη επέκταση των στηλών reference σε VARCHAR(32) και override της κλάσης Validate για συμβατότητα με το PrestaShop 8.

Μηχανισμός Manual Retry (reprocessLog): επανεκτέλεση αποθηκευμένου JSON payload με ένα κλικ μετά τη διόρθωση κωδικού SKU.

Responsive προβολή σε κινητό: γρήγορος έλεγχος και αποθήκευση των παραμέτρων του webhook από smartphone.

Responsive προβολή σε κινητό: παρακολούθηση των εισερχόμενων παραγγελιών Skroutz και επανεκτέλεση payloads εν κινήσει.
Στο παρασκήνιο: Ασφάλεια, Idempotency και Strict Typing
- Έλεγχος IP & CIDR Subnet Filtering (
isIpAllowed): Ο SkroutzWebhookWebhookModuleFrontController επαληθεύει τη διεύθυνση REMOTE_ADDR έναντι των επίσημων IP subnets της Skroutz (π.χ. 185.6.76.0/22) με bitwise mask calculation, απορρίπτοντας κάθε μη εξουσιοδοτημένη κλήση με 403 Forbidden.
- Προστασία Διπλοεγγραφών (Idempotency Guard): Η μέθοδος
orderExists($skroutzCode) ελέγχει ταυτόχρονα τα πεδία ps_orders.reference, ps_orders.note και ps_order_payment.transaction_id ώστε καμία παραγγελία να μην καταχωρηθεί διπλή ακόμη κι αν το Skroutz επαναλάβει την αποστολή του webhook.
- Συμβατότητα με PHP 8.1+ & PrestaShop 8 Strict Typing: Αρχικοποίηση όλων των προαιρετικών πεδίων του πίνακα
ps_address σε κενό αλφαριθμητικό ("" αντί NULL) και ενσωμάτωση του override/classes/Validate.php (isName / isCustomerName) για απρόσκοπτη επεξεργασία πελατών στο Back-Office.