Checkout
v1.17.3
Checkout
- Mises à jour et support inclus pendant 12 mois
- Clé de licence livrée immédiatement par email
- Garantie satisfait ou remboursé 30 jours
- Documentation complète incluse
- Compatible avec les thèmes Hyvä
- Installation prête pour Composer
Checkout
Un checkout Magento moderne, rapide et entièrement configurable — bâti sur Alpine.js, server-rendered pour la vitesse, et compatible Luma, Hyvä (via le module compagnon) et Swissup Breeze. Remplace le checkout natif Magento par un layout one-page ou multi-step qui adresse les douleurs bien connues : rendu lent, gestion de session fragile, redirections post-commande manquantes pour les gateways off-site, pas d'icônes de moyens de paiement, et une page de confirmation générique.
Tout le flux tourne sur les endpoints REST standard Magento (pas de JSON-API propriétaire), donc les extensions existantes pour shipping, payment, tax, gift messages, coupons et newsletters continuent de fonctionner. Le composant Alpine.js est léger (~30 Ko), CSP-safe via SecureHtmlRenderer, et dispose d'un fallback robuste qui reconstruit la config checkout depuis la base de données quand DefaultConfigProvider crashe.
À qui ça s'adresse
- Marchands dont le taux de conversion souffre du checkout natif Magento, lent, et qui veulent une expérience plus rapide et plus focalisée
- Boutiques utilisant des gateways de paiement off-site (MultiSafepay, Mollie, PayNL, Buckaroo, Adyen, Stripe…) qui doivent être redirigées fiablement vers l'étape de paiement hébergée après
placeOrder - Équipes B2B et B2C qui ont besoin d'une page de succès configurable (message de remerciement, coupon pour la prochaine commande, partage social, upsells de produits liés)
- Agences qui veulent le même module checkout fonctionnel sur Luma, Breeze et Hyvä (via le compagnon dédié
wimakeit/module-checkout-hyva)
Bénéfices clés
- Deux modes de layout — one-page (toutes les sections visibles) ou multi-step (guidé), switchable par store depuis l'admin.
- Redirections off-site faites correctement — map de redirection post-
placeOrderintégrée pour MultiSafepay, Mollie (mollie_methods_*), PayNL et Buckaroo, plus un champ admin pour ajouter n'importe quel autre gateway (Adyen HPP, Stripe redirect…) sans toucher au code. - Icônes par moyen de paiement — livré avec 5 SVG neutres (card, bank, wallet, cash, voucher) auto-mappés sur les principaux gateways plus un fallback par mot-clé du titre (bancontact, iDEAL, PayPal, Apple/Google Pay, Klarna…). Override par code via l'admin : URL complète, chemin module-relatif ou slug intégré.
- Fonctions intelligentes vraiment utiles — détection d'email invité avec suggestion de login, autocomplétion d'adresse (Google Places ou HERE), adresses client enregistrées, quantités modifiables dans le sidebar, code promo, opt-in newsletter, commentaires de commande, messages cadeaux, checkout agreements, support des paniers virtuels, couleur d'accentuation configurable, indicateur d'étapes.
- Page de succès configurable — remplace la confirmation native Magento par un hero, un récap de commande, un coupon "next-order" copy-to-clipboard, une rangée de partage social et une grille d'upsells construite à partir des related products des articles achetés — chaque section toggleable individuellement.
- Build sensible au thème — source LESS unique shimmée dans Luma (
_module.less, auto-importée par_extend.less), Breeze (breeze/_checkout.less, wrappée en critical-CSS) et Hyvä (tailwind/module.css, scannée par le build Tailwind de Hyvä). Le composant Alpine.js tourne nativement sur Hyvä et Breeze, et est bundlé avec Alpine 3.14 pour Luma.
Compatibilité
- Magento 2.4.x / équivalent Mage-OS
- PHP 8.1, 8.2, 8.3
- Nécessite
wimakeit/module-core^3.0.9 - Checkout natif, Swissup Breeze et Hyvä supportés (Hyvä via le compagnon
wimakeit/module-checkout-hyva≥ 1.1.0) - Compatible CSP (scripts inline rendus via SecureHtmlRenderer)
- Traductions livrées : en_US, fr_FR, nl_NL
Installez ce module via Composer. Assurez-vous que votre auth.json est configuré avec vos identifiants Wimakeit.
$ composer require wimakeit/module-checkout:^1.17.3
$ bin/magento setup:upgrade
$ bin/magento setup:di:compile
Installation notes
The standard composer require + setup:upgrade + setup:di:compile flow applies. The points below cover what's specific to this module.
Required dependency
This module requires wimakeit/module-core ^3.0.9. Composer pulls it automatically from the Wimakeit registry as long as the registry is declared in your project's composer.json.
Soft dependencies on magento/module-gift-message, magento/module-newsletter, magento/module-checkout-agreements, magento/module-catalog and magento/module-sales are declared but require no manual action on a standard Magento install (these modules are always present).
Hyvä compatibility
On Hyvä stores, install the companion module wimakeit/module-checkout-hyva ≥ 1.1.0 in addition to this one. It ships the compiled stylesheets, the <link rel="stylesheet"> injection and the hyva_config_generate_before observer that registers the Tailwind sources of this module. After enabling both modules:
bin/magento hyva:config:generate
cd app/design/frontend/<Vendor>/<theme>/web/tailwind && npm run build-prod
Configuration
All settings live under Stores > Configuration > WiMakeIT > Checkout. Defaults are production-safe — enable the module, deploy, then fine-tune.
General
| Setting | Default |
|---|---|
| Enable Custom Checkout | Yes |
| Layout Mode | One-page |
| Enable Debug Logging | No — leave off in production |
Features
| Setting | Default |
|---|---|
| Show Coupon Code | Yes |
| Show Newsletter Opt-in | Yes |
| Show Delivery Date Instead of Lead Time | No — a carrier quotes transit only, not availability |
| Show Order Comments | No |
| Show Gift Message | No |
| Guest Email Detection | Yes |
| Editable Quantities in Sidebar | Yes |
Address
| Setting | Default |
|---|---|
| Default Country | BE (Belgium) |
| Address Autocomplete | No |
| Autocomplete Provider | Google Places |
| API Key | (blank — encrypted when set) |
| Single Full Name Field | No — check your surname data first, the admin help text carries the query |
| Normalise Phone Numbers on Submit | No — assumes the number belongs to the delivery country |
Set the API Key on the website / store scope, not the default scope, when you operate multiple stores with different keys.
Success Page
| Setting | Default |
|---|---|
| Enable Custom Success Page | Yes |
| Thank-you Message | (blank) |
| Next-order Coupon Code | (blank — section hidden when empty) |
| Coupon Description | (blank) |
| Show Social Share Buttons | Yes |
| Show Upsell Products | Yes |
| Upsell Products Limit | 4 |
Payment
| Setting | Default | |
|---|---|---|
| Payment Method Order by Country | (blank — built-in order for BE, NL, FR, DE, LU) | |
| Show Wallets First | Yes — Apple Pay and Google Pay above the card form | |
| Show the Customer's Previous Method First | Yes — signed-in customers only | |
| Show Payment Method Icons | Yes | |
| Custom Icon Overrides | *(blank — one `prefix\ | value` per line)* |
| Off-site Gateway Redirect URLs | (blank — built-in defaults already cover MultiSafepay, Mollie, PayNL, Buckaroo) |
Custom Icon Overrides values can be:
- a full URL (
https://…) - a module-relative path (
images/payment/my-logo.svg) - a built-in slug (
_card,_bank,_wallet,_cash,_voucher)
Off-site Gateway Redirect URLs entries can be absolute or start with / (prepended with the store base URL).
Design
| Setting | Default |
|---|---|
| Accent Color | #ef6f14 |
| Show Step Indicator | Yes |
| Place Order Button Label | (blank — ships "Acheter" / "Kopen" / "Buy now"; legal field, see the admin help) |
| Checkout Page Title | (blank — keeps Magento's own "Checkout" title) |
Checkout Page Title is set per store view and written as-is, in that store view's language. No translation file is involved.
Delivery Date
A separate section, WiMakeIT > Delivery Date. Everything here is off or blank on install: an update never makes a delivery promise appear on a store that did not ask for one.
| Setting | Default |
|---|---|
| Enable Delivery Date Calculation | No |
| What to Show | A single date (worst case) |
| Availability Attribute Code | (blank — announces nothing until set) |
| Value to Working Days | (blank — an empty table silences the date) |
| Days for Products Without a Value | (blank — blank means unknown, never zero) |
| Working Days | Monday to Friday |
| Closing Days | (ten Belgian tokens shipped as a starting point) |
| Shipping Cut-off Time | (blank — no cut-off) |
| Transit Time per Carrier | (blank — falls back to reading the method label) |
| Show in Checkout | No |
Closing Days takes three token forms, one per line: 2026-12-24 for a one-off date, 12-25 for a fixed yearly date, and easter+39 for an offset from Easter Sunday (+1 Easter Monday, +39 Ascension, +50 Whit Monday, -2 Good Friday). Prefer the recurring forms: a list of absolute dates has to be redone every January, and a list nobody redoes announces wrong dates without saying so.
Value to Working Days maps the option_id, not the label — two options can share a label, labels differ per store view, and at default scope a label is often the raw code written by an ERP import. Use - for a value that forbids any date at all. A value absent from the table is unknown, not zero: carts containing it get no date, and a warning goes to the log.
CLI
bin/magento wimakeit:delivery-date:options lists the availability attribute's values with their readable label, how many products carry each, and the delay they map to. It reads the store view's labels, never the default scope's. The command exits in failure while any value is still unmapped — run it after an ERP import, which creates options without notice.
--attribute=dispo inspect an attribute other than the configured one
--store=1 read labels from another store view
ACL
The module declares two ACL resources, granted to the Administrator role only: Wimakeit_Checkout::config for the checkout section, and Wimakeit_Checkout::delivery_date for the delivery date section. Assign them to your team roles as needed.
No cron, no patches, no env keys
The module has no cron jobs, no schema/data patches, and no app/etc/env.php keys to set.
- Version
- v1.17.3
- Licence
- Abonnement annuel
- Support
- 12 mois
- Dernière mise à jour
- 18 sept. 2026
- Magento
- Magento 2.4.4 Magento 2.4.5 Magento 2.4.6 Magento 2.4.7 Mage-OS 2.0 Mage-OS 2.1
- PHP
- PHP 8.1 PHP 8.2 PHP 8.3
- Hyvä
- Compatible
- Package
-
wimakeit/module-checkout
Vérifier la compatibilité
Indiquez votre stack pour vérifier la compatibilité du module.
Compatibilité 4
Tarification & licence 4
vendor/wimakeit/ après composer require, donc vous pouvez le lire, l'auditer, et le patcher localement pour votre propre installation Magento. Vous ne pouvez PAS le redistribuer, le sous-licencier, le publier sur un registre Composer public, ou le revendre. 1 licence = 1 domaine production + 1 domaine staging/dev (voir les Conditions Générales pour l'EULA complet). Les modules Wimakeit ne sont PAS sur le packagist.org public — ils sont distribués exclusivement via le registre Composer privé packages.wimakeit.be. Installation & mises à jour 6
composer require wimakeit/module-checkout:^1.7.14, puis bin/magento setup:upgrade, bin/magento setup:di:compile, et enfin bin/magento cache:flush. L'onglet « Installation » de cette page liste chaque étape de configuration (ACLs, crons, valeurs par défaut) — un déploiement prend quelques minutes, pas des heures. Besoin d'aide ? Wimakeit propose des prestations d'installation Magento depuis notre bureau wallon (Presles, entre Charleroi et Namur). auth.json : {"http-basic": {"packages.wimakeit.be": {"username": "VOTRE-EMAIL", "password": "VOTRE-TOKEN"}}}. Étape 3 : enregistrez le repo : composer config repositories.wimakeit composer https://packages.wimakeit.be. Étape 4 : composer require wimakeit/module-checkout:^1.7.14. Dans les pipelines CI/CD, injectez COMPOSER_AUTH en variable d'environnement JSON pour éviter de commiter auth.json. composer require, même code module, même schéma de base — pas de fork à maintenir, pas de changement de licence. composer update reste sûr à l'intérieur d'une version majeure. app/design/frontend/{VotreVendor}/{theme}/Wimakeit_{Module}/templates/ en respectant le même chemin relatif. Blocks, ViewModels et Helpers s'override via DI preference dans votre propre module custom — déclarez <preference for="Wimakeit\…\OriginalClass" type="VotreVendor\Override\Class" /> dans etc/di.xml. Le XML layout s'étend (préféré) ou s'override de manière standard Magento. Les modules Wimakeit n'utilisent jamais le keyword final sur les classes que vous pourriez raisonnablement vouloir override — surcharger est un scénario de premier ordre, pas un hack. Support & sécurité 3
contact@wimakeit.com avec le nom du module, sa version, votre version Magento/Mage-OS et les étapes pour reproduire. Les correctifs sont livrés dans le prochain patch. Le support Wimakeit répond en français, anglais et néerlandais en jours ouvrables (horaires CET). contact@wimakeit.com avec le préfixe [SECURITY] dans l'objet — précisez le module, la version et les étapes de reproduction. Accusé de réception en jours ouvrables, mention dans le Changelog sur souhait du déclarant. Wimakeit est une SRL belge (société à responsabilité limitée) soumise au droit belge et européen sur la vie privée et la divulgation responsable. À propos de Wimakeit 1
Quelque chose n'est pas couvert par la FAQ ?
Signalez un bug ou posez une question — le formulaire est pré-rempli avec ce module.
Changelog
Categories: Security, Feature, Fix, Perf, Admin, Deps.
[1.17.3] - 2026-09-17
Fix
- Shipping methods are listed by name alone. The carrier name is only added when two methods share the same name, instead of being repeated in front of every line. The shipping row of the summary follows the same label.
- A free shipping method reads "Gratuit" in French, a word that fits both the shipping row and the method badge.
[1.17.2] - 2026-09-17
Fix
- The discount line matches the discount actually applied. On a store whose cart rules discount tax-inclusive prices, the summary overstated the discount by the tax on it, while the amount charged stayed correct. The column now adds up again.
[1.17.1] - 2026-09-17
Fix
- Shipping costs are shown on the same basis as the rest of the column. On a store displaying prices with tax, the shipping line kept its net amount: it matched neither the rate announced by the chosen method nor the gap between subtotal and grand total.
[1.17.0] - 2026-09-16
Feature
- A structured checkout. Every step sits on its own card, and its badge shows what is done, what is expected now and what comes next — read from the same conditions the order itself is checked against.
- The email step folds away into one line with an Edit link once the customer leaves the field. It stays open while the account check runs and when an account exists, so the sign-in suggestion is not missed.
- Terms and the Place Order button move under the amount to pay, where the customer reads what will be charged. On mobile they form a bar pinned to the bottom of the screen.
- Free delivery reads "Free" on its shipping method line instead of "0.00".
Fix
- Terms written without HTML keep their line breaks when the condition is set to HTML mode, instead of arriving as a single block of text.
- No empty card under the last step when the newsletter is disabled.
Admin
- Accepted card brands, a new optional field shown at the head of the payment step. Empty by default: only the merchant knows what the acquiring contract covers.
Deps
- Hyvä storefronts need
wimakeit/module-checkout-hyva1.8.0, which ships the matching stylesheet.
[1.16.5] - 2026-09-15
Perf
- Faster payment step on virtual carts. Payment methods and totals now load in parallel once the billing address is saved, and a totals hiccup no longer hides the payment methods.
Admin
- API key guidance. The address autocomplete key field now tells you to restrict Google Places / HERE keys to your domain.
[1.16.4] - 2026-09-15
Security
- Cart item options can no longer inject HTML into the checkout. Options are reduced to plain text before display, so an option added by a third-party module without core escaping cannot run script.
Perf
- Google Maps loads on demand. With Google address autocomplete enabled, the Maps script is fetched when the customer starts typing a street — not on every checkout page view.
[1.16.3] - 2026-09-15
Fix
- Countries can be selected again. With preferred countries configured, 1.16.0 rendered every country in the dropdown as disabled, so customers could not pick a country other than the preselected one. Update from 1.16.0–1.16.2 as soon as possible.
[1.16.2] - 2026-09-15
Security
- Content Security Policy entries for Google Maps and HERE. Magento 2.4.7+ enforces a strict CSP on the payment page; address autocomplete and the pickup-point map now keep working there without loosening the store's policy.
Fix
- Checkout fallbacks now survive PHP errors, not only exceptions, so a misbehaving third-party plugin can no longer break the page they protect.
[1.16.1] - 2026-09-15
Fix
- The Preferred Countries field can be edited again. It showed a checked "Use system value" box at default scope that kept the multiselect greyed out.
Admin
- **New setting Address > Show Region / State.** Keep following Magento's configuration (default), or ask for a region only where the country requires it — a Belgian province or French department is no longer requested, without changing the core setting that also drives the customer address book.
[1.16.0] - 2026-09-15
Feature
- Preferred countries open the country list. Pick your usual countries in the admin and they appear first in the shipping and billing country dropdowns, followed by a separator and every other country — a Belgian customer no longer scrolls past two hundred names to find Belgium between Belarus and Belize. The default country leads; the others follow alphabetically in the customer's language.
Admin
- **New multiselect Address > Preferred Countries,** available per website and store view. Empty by default: the list stays fully alphabetical until you choose.
[1.15.4] - 2026-09-15
Fix
- Checkout shows only the terms and conditions of the current store view. Every agreement was loaded regardless of store and status, so a multilingual shop with one agreement per language showed every language's checkbox on every checkout — all required — and a disabled agreement was still enforced.
[1.15.3] - 2026-09-15
Fix
- Consent checkboxes line up with their text on Hyvä. The newsletter and terms sentences dropped below their checkbox, because the theme renders every label as a block. Luma and Breeze were not affected. Ships with
wimakeit/module-checkout-hyva1.7.1.
[1.15.2] - 2026-09-15
Fix
- Virtual carts no longer get stuck without payment methods on Mage-OS 3.5. The billing address was sent as soon as the postcode was filled, before street, city and phone; Mage-OS 3.5 rejects it, and filling the phone afterwards never re-sent it. The address now waits for every required field, and each of them re-sends it on blur. Carts with shipping are unchanged.
- The "address contains invalid data" message is translated (French, Dutch, English), and says whether the billing or the shipping address is at fault.
- Logged-in customers no longer trigger 401 errors on cart sync. Cross-tab cart updates now work for them too, not only for guests.
[1.15.1] - 2026-09-08
Fix
- The checkout summary now adds up on stores that display subtotals including tax. The subtotal was shown incl. tax while the discount stayed excl. tax, so the column mixed two units — a customer read a 10 EUR discount while the total dropped by 12,10. No charged amount changes: these settings decide which figure is shown, never what is billed.
Admin
- The summary states which basis it uses — "Amounts incl. VAT" or "Amounts excl. VAT" — and the tax line reads "of which VAT" when the tax is already contained in the subtotal, "VAT" when it is added. Stores that switch the basis per customer group show the same page in two different bases, with nothing on screen saying which.
[1.15.0] - 2026-09-07
Feature
- Delivery dates instead of lead times, calculated from both halves of the promise. A carrier only ever quotes transit; the module now reads how long the warehouse needs from a configurable product attribute and adds the two. Off by default.
- The cart takes the delay of its slowest line, and a kit that of the children actually selected. An order ships in one parcel: it waits for its slowest item.
- A single unknown line silences the date for the whole cart. No partial date, no date with a caveat — customers read a date as a promise, and a promise that holds for three lines out of four is a wrong one.
- Nothing is ever read as zero — not an empty attribute, not an unknown transit, not a value missing from the mapping table.
- Working days, public holidays and a shipping cut-off time, all configurable per store view. Holidays are written as tokens (
12-25,easter+39), so ten lines pasted once hold for every year instead of being redone each January. bin/magento wimakeit:delivery-date:optionslists the attribute's values with their readable label, how many products carry each, and what they map to. It exits in failure while any value is still unmapped.
Admin
- New configuration section under WiMakeIT > Delivery Date: availability attribute, value-to-days mapping, warehouse calendar, cut-off time, per-carrier transit, and a separate switch for showing the date in the checkout.
Changed
- The date is now calculated and worded server-side. It used to be computed from the browser clock, so a customer in another timezone read a wrong date; and the wording is now rendered in the store view's language, with that language's own date syntax.
[1.14.2] - 2026-09-07
Security
- The order confirmation page is now explicitly non-cacheable. It was staying out of the cache by accident, and would have become eligible again the day the account-creation prompt was removed — serving one customer's order number, items and contact details to the next.
- Terms and conditions are escaped on the fallback path. Wording entered as plain text and containing angle brackets could render as active markup for customers whose session had gone stale.
Fix
- Shipping is no longer shown as free on the fallback path, where it was written as zero regardless of the real amount while the grand total counted it.
[1.14.1] - 2026-09-07
Fix
- Phone number normalisation is now a setting, off by default. Shipped on in 1.14.0, it assumed the number belonged to the delivery country. That holds for most orders and fails for anyone shipping somewhere other than home: a French mobile entered on a Belgian address became a Belgian number, which is somebody else's number, and the carrier's text message went there. Nothing in the order would have looked wrong.
- No country code is ever invented. A number starting with neither a zero nor a plus sign is left exactly as typed.
[1.14.0] - 2026-09-07
Feature
- Payment methods are ordered by delivery country. iDEAL carries most online payments in the Netherlands, Bancontact does the same in Belgium, and showing a card first to a Dutch shopper means showing them the method they use least. Ships with a default order for BE, NL, FR, DE and LU, and a field to replace it country by country once you have counted your own orders.
- A returning customer sees the method they paid with last time, first. The country tells you what a market does on average; the customer's own history tells you what this customer does. It also handles trade accounts on its own: a professional whose last order went on invoice finds that line at the top, without any rule naming it.
- Apple Pay and Google Pay move above the card form. A wallet pays with what the phone already holds, fingerprint included. Under the card form it is only seen by customers who scroll past it, which means by customers who already gave up looking for it.
- One "Full name" field instead of First name and Last name, off by default. Two boxes side by side invite the wrong one. Check your data before switching it on: where the surname field holds company names, no splitting rule works, and the admin help text carries the query to run.
- A refused payment now says what to do. Gateways return their own wording, written for a log. The customer reads a sentence telling them to try another card or another method, with the original text kept alongside for support.
- The checkout survives a pickup point service outage. A third-party failure used to read as "no pickup point near this address" — untrue, and with no way forward. The customer now sees the real reason, and can either retry or switch to home delivery in one click.
Changed
- The order summary has been reworked. A rule separates each item, the amount to pay sits on its own band, quantity moves under the price, and the option detail of a kit opens right under the product reference with every value aligned on one column.
- The address complement is folded behind a link and opens on request. Three shoppers in ten stop at that field even though it concerns almost none of them.
- The phone number says why it is asked, under the field: the carrier texts you when the parcel is on its way.
- The payment block is visually enclosed, with a padlock and a line stating that card details go straight to the bank.
- Phone numbers and postcodes are normalised when the address is sent, never while typing. A Dutch postcode gets its space back, a national phone number leaves in international notation for the carrier's SMS.
- The keyboard follows the country: digits only for postcodes in France, Belgium, Germany and Luxembourg, full keyboard in the Netherlands where the code ends in two letters.
Fix
- A failed payment no longer empties the form. Returning from an off-site gateway used to land on a blank checkout. The address survives for the tab and is cleared as soon as the order goes through. Card details and consents are never kept.
- Contrast now meets WCAG. The product reference, the phone help line and the kit option labels sat at 2.6:1 against a 4.5 requirement; the remove control sat at 1.7 against a 3.0 requirement.
- Hovering the summary header no longer shifts the page. The theme adds a one-pixel border to every button on hover, which resized the module's bare controls under the mouse.
- Touch targets on the consent boxes and the delivery and payment rows reach 44 pixels, on touch screens only.
[1.13.0] - 2026-09-07
Feature
- The Place Order button wording is now a setting, per store view. It ships as "Acheter" / "Kopen" / "Buy now". This is a legal field, not a marketing one: EU case law (CJEU C-249/21) holds that only the words on the button itself count, and a non-compliant label voids the contract in France and Germany. The admin help text carries the references.
- Delivery options can show a date instead of a delay, off by default. "Delivered between Tuesday 8 and Wednesday 9 September" reads better than "ships in 24-48h", but a carrier only quotes transit, never how long the item takes to reach the warehouse. Turn it on only where the quoted lead time really covers availability: a customer reads a date as a promise.
- The order summary folds into a single bar on mobile, showing the item count and the amount to pay, and opens with one tap. It used to push the first form field off the screen.
Changed
- The promo code field opens on request, behind an "I have a promo code" link. A visible empty field makes the customer without a code feel short-changed, and sends the one who thinks he has a code out of the checkout to look for it.
- Field errors clear when the value becomes valid again, not on the first keystroke.
- The "an account exists with this email" prompt no longer looks like a warning, and says first that you can carry on without signing in.
[1.12.1] - 2026-09-07
Fix
- The per-line details in the order summary no longer repeat the price of every component. The line price and the order total are already there.
[1.12.0] - 2026-09-07
Feature
- The order summary shows what each line actually contains. A "Details" link opens the sprockets, chain and vehicle model of a kit, the attributes of a configurable product, or any custom option — the same information the cart page shows two screens earlier. Folded away by default so the amount to pay stays in view.
[1.11.0] - 2026-09-07
Fix
- The error message now names the right problem. A customer who had filled in nothing was told to pick a delivery method, when the real issue was an empty address — and delivery methods cannot even be offered until the address is known. Missing address fields are reported first.
- A missing email address is flagged on the field, not only in the message at the bottom of the page.
- The error appears next to the button that triggered it. It used to sit at the very top of the checkout, out of sight: the customer clicked Place Order and nothing seemed to happen.
Feature
- The error links to the field that needs fixing, named after that field's own label, and one click takes the customer there.
- The terms and conditions can be read before accepting them. They were a checkbox with no way to see what was being agreed to. The full text now opens in place, and the checkbox carries the required-field asterisk.
- Choosing a carrier is a step of its own, numbered like the others and visible from the moment the page opens, instead of a small unlabelled heading that appeared only once the rates came back.
Changed
- Newsletter opt-in and terms acceptance are no longer numbered steps. They are two checkboxes, grouped just above the Place Order button.
[1.10.0] - 2026-09-07
Feature
- The checkout page title is now yours. Magento writes "Checkout" into the page and every shop shows the same word for the same moment. Each store view can now set its own heading, in its own language and tone, from Stores > Configuration > WiMakeIT > Checkout > Design. Left empty, nothing changes.
- The checkout reads as a numbered path. Each step carries a number and a discreet icon; newsletter opt-in and terms acceptance became steps of their own instead of two unlabelled boxes at the bottom of the payment block. Numbering adjusts itself when a step does not apply, so a logged-in customer never sees a gap in the sequence.
- A secure-payment line closes the order summary, at the point where the customer is about to hand over card details.
Fix
- Phone numbers are accepted as people write them. A Belgian number typed
071/39 72 55, a French one with the country code in brackets, or a switchboard number with a slash were all rejected as invalid, without saying which character to remove. Only the count of digits matters now. - Form fields look like form fields again. On themes that strip borders from every input site-wide, the checkout fields rendered as flat grey rectangles indistinguishable from disabled ones, and the red error ring had no border to draw on.
- The order summary follows the page. It was meant to stay in view while the form is filled, but the amount to pay scrolled out of sight at the second section.
- Text and prices are readable. The whole checkout was set one and a half steps too small; input text now also clears the threshold below which iOS Safari zooms the page and breaks the layout.
Admin
- New store-view setting: Checkout Page Title, under Design.
Accessibility
- The checkout can be completed without a mouse. Every control shows where the keyboard focus is, the progress steps are real buttons, address suggestions respond to arrow keys, Enter and Escape, and error messages are announced and linked to the field they belong to.
- The Place Order button is never greyed out. A disabled button is invisible to screen readers and unreachable by keyboard, and it never says which field is holding the order back. It now stays active and points at the missing field.
- Larger tap targets on checkboxes, quantity buttons and delivery options, and the system "reduce motion" preference is honoured.
[1.9.5] - 2026-09-03
Fix
- A field in error is visible on every theme. On themes that draw no border around inputs, the only sign of an invalid field was its message; the field itself now carries a red ring.
[1.9.4] - 2026-09-03
Fix
- Choosing a delivery method with the phone number still empty no longer leads to an empty payment block. The checkout now marks the missing address fields, reopens a saved address that lacks a phone number, and says which field is blocking.
- Apple Pay is only offered where the browser supports it. The payment list comes from the server, which knows nothing about the shopper's device, and was shown as-is.
[1.9.3] - 2026-09-02
Fix
- The 1.9.2 filter now actually applies. It was declared for the storefront only, while the checkout reads its payment list over the REST API, so the previous release had no visible effect.
[1.9.2] - 2026-09-02
Fix
- Stored-card and subscription payment methods no longer appear in the checkout. They exist to charge a card the customer has already registered; offered to someone who has none, they lead nowhere.
[1.9.1] - 2026-09-02
Fix
- The carrier name is no longer repeated in front of every delivery option. A shop offering workshop pickup, standard and express delivery under a single carrier read "Delivery — Workshop pickup", "Delivery — Delivery", "Delivery — Express delivery". The carrier is prefixed only when several of them compete for the same cart.
[1.9.0] - 2026-08-27
Fix
- Guests can change quantities again. The +/− buttons in the order summary answered
"quoteId" is requiredon every click for a guest cart: the masked cart id was missing from the update call. - The order summary no longer understates the total. Applying a coupon, changing a quantity or removing a line dropped the delivery cost from the displayed totals, so the customer read a total lower than the one charged.
- Address autocomplete works when enabled. The Google Places / HERE key is stored encrypted and was being sent to the browser as-is, so the provider never answered.
- Stores installed in a subdirectory work. The checkout rebuilt the REST base URL from the domain root, which only matched a store at the root of its domain.
- A separate billing address is checked before the order is sent, field by field, instead of failing on the server with a message that named nothing.
- An incomplete saved address is no longer a dead end. A missing phone number blocked the order behind a hidden form; the form now opens, pre-filled.
- A coupon refreshes the shipping rates, so a free-shipping rule takes effect immediately.
- A pickup delivery can no longer leave without a pickup point when the address changed after the point was chosen.
- Pickup-point interface translated to French and Dutch.
- The "copy coupon code" button on the confirmation page works again on Luma and Breeze, where it silently did nothing.
- Products sold by weight or by the metre no longer show "× 0" on the confirmation page and in the checkout summary.
- Stores served under a second domain or a staging alias keep working: the checkout no longer sends its calls to the host configured in the admin.
Feature
- "Save this address to my address book" for signed-in customers typing a new address.
- Checkout fields are wrapped in a real form, so browser autofill and password managers work as expected.
Perf
- The success page only proposes products it can actually sell — disabled, out-of-stock, invisible or off-website related products (and their 0.00 prices) are filtered out.
[1.7.19] - 2026-06-08
Fix
- Place order no longer fails with
"telephone" is requiredwhen the phone field is filled. The plugin now re-saves the shipping address right before placing the order so the quote reflects every field belowpostcode— including the phone number.
[1.7.18] - 2026-06-05
Deps
- Marketing documentation refreshed to list PHP 8.4 in the supported PHP range.
[1.7.17] - 2026-06-05
Deps
- PHP 8.4 certified — constraint widened to
>=8.1 <8.5.
[1.7.16] - 2026-06-05
Feature
- Quote billing/shipping addresses now pre-fill from the customer's default addresses at checkout entry, so registered customers don't see blank inputs when their cart was started during a guest session. Manually-typed addresses are never overwritten.
[1.7.15] - 2026-06-05
Fix
- Success page item thumbnails now render real product images instead of the placeholder. The image helper is initialised with the valid
product_small_imageidentifier declared inview.xml.
[1.7.14] - 2026-05-26
Fix
- MultiSafepay redirect handshake fixed (orders no longer bounce back to /checkout/cart/). The redirect token sent to MultiSafepay is now generated as a 32-character hex string instead of a 36-character UUIDv4 — the
multisafepay_redirect_token.tokencolumn isVARCHAR(32), so MySQL was silently truncating the UUID and the redirect controller's later lookup never found the row, throwing "Redirect token does not exist" after every Place Order on stores runningmultisafepay/magento2 4.2+. - Removed the diagnostic logging added in 1.7.12/1.7.13 that flooded
system.logwhile we tracked the issue down.
[1.7.11] - 2026-05-26
Fix
- MultiSafepay 4.2 redirect_token now persists end-to-end. Magento's REST
ServiceInputProcessorwas stripping theredirect_tokenfromadditional_databefore MultiSafepay's observer could read it (signature mismatch onPaymentInterface::setAdditionalData). A newCaptureMultisafepayRedirectTokenPluginonMagento\Quote\Model\Quote\Payment::importDatacaptures the value from the raw input and writes it toadditional_informationso MultiSafepay's place-order observer can persist the redirect_token row.
[1.7.10] - 2026-05-26
Fix
- MultiSafepay checkout restored after
multisafepay/magento2 4.2upgrade. The 4.2 metapackage requires token-based redirect handling (PLGMAG2V2-888) — the gateway redirect controller refuses session-based lookups and demands a?token=...query string. The Hyvä checkout JS now generates a per-order token, sends it aspaymentMethod.additional_data.redirect_token, and appends it to the redirect URL for allmultisafepay*gateway codes. Other off-site gateways (Mollie, PayNL, Buckaroo) are untouched. WMI-130.
[1.7.9] - 2026-05-26
Fix
- Post-order redirect no longer leaves the customer on
/checkout/cart/with the page looking like they've been logged out. Theprivate-content-loadedevent dispatched after a successful payment now carries a{detail: {data: {}}}payload, fixing aCannot read properties of nullthrown by Hyvä's messages section listener.
[1.7.8] - 2026-05-20
Fix
- Order summary now shows whole quantities as
1instead of the raw1.0000decimal returned by Magento's quote API. The sidebar item count and the in-summary+ / −quantity buttons also stop misbehaving (the previous code was string-concatenating qty values instead of summing them numerically). - One-page checkout no longer leaves shoppers stuck on "Please complete the shipping step first to see payment methods" after they pick a shipping method. The first user click now reliably loads the payment methods (the previous one-page watcher silently swallowed the very first selection when no shipping method was preselected).
- Added missing French and Dutch translations for "Back to cart" and "Loading payment methods…" — both strings now render in the active store language instead of leaking English on non-English storefronts.
[1.7.7] - 2026-05-19
Fix
- Logged-in customers whose Magento session became corrupted were re-exposed to the storefront as guests, so the checkout silently tried a guest place-order. On stores with downloadable products (where guest checkout is disabled by default), the place-order then aborted with "guest checkout not available" even though the shopper was logged in. The session fallback now restores the logged-in flag and customer profile from the quote's stored customer link. WMI-130.
[1.7.6] - 2026-05-19
Fix
- Downloadable-only carts (a cart of only digital / module products) no longer freeze on the shipping step waiting for a method that will never appear. The checkout now treats a cart of only virtual/downloadable items as virtual regardless of Magento's stored
is_virtualflag and goes straight to billing + payment. WMI-130. - Order summary thumbnails now fall back through
thumbnail → small_image → imageso marketplace products that only carry a base image still render their picture in the cart and on the success page. WMI-130.
[1.7.5] - 2026-05-19
Fix
- Order summary and totals no longer render every amount as the literal "0,00 €" on locales where Magento's
Currency::getOutputFormat()returns a formatted zero instead of the%s €template. The checkout config is now repaired after serialization (re-injecting%sinto the pattern) andformatPrice()falls back to%s €if a broken pattern still leaks through. WMI-130.
[1.7.4] - 2026-05-18
Fix
- Virtual and downloadable-only carts no longer trigger the full-page loader while the customer is still typing their address. The billing / payment-methods / totals preload now runs against a localized
paymentMethodsLoadingflag and surfaces as a small inline "Loading payment methods…" indicator inside the payment section. The full-page loader is preserved for genuine blocking operations (Place Order, Set Shipping Info, cart item updates). Fixes WMI-124.
[1.7.3] - 2026-05-10
Feature
- New Enable Debug Logging toggle (Stores → Configuration → Wimakeit → Checkout → General), off by default. Internal traces in success-page hydration, checkout data provider, config provider and the payment-information plugins (logged-in + guest) are gated behind it;
error/criticalalways log.
Perf
- Production stores stop emitting hot-path traces from the checkout pipeline into
var/log/system.logonce the toggle is left off.
Deps
- Requires
wimakeit/module-core3.0.9+ for the shared debug logger virtual type.
[1.7.2] - 2026-05-08
Admin
- Admin menu group standardized — module appears under a top-level Wimakeit_Checkout entry with a Settings child that opens directly on the configuration section.
- New
Wimakeit_Checkout::configACL resource so the Settings entry can be granted independently of code edits.
Deps
- Certified PHP 8.1 → 8.3 support. Composer
phpconstraint tightened to>=8.1 <8.4.
[1.7.1] - 2026-04-29
Admin
- Internal release pipeline standardized (validate, tag, deploy, release stages). No functional change for merchants.
[1.7.0] - 2026-04-30
Feature
- New payment method icons — 5 neutral SVG categories (card, bank, wallet, cash, voucher) auto-mapped to the major gateways (MultiSafepay, Mollie, PayNL, Buckaroo, Adyen, Stripe, native PayPal/Braintree) and generic codes (cashondelivery, checkmo, banktransfer, sepa, klarna, afterpay…), with a title-keyword fallback (bancontact, iDEAL, PayPal, Apple/Google Pay, Klarna, sofort, giropay, payconiq, FR/NL translations).
- Expanded post-order redirect defaults to cover
multisafepay,mollie_methods,mollie,paynl_payment,buckaroo_magento2. Previously only MultiSafepay was handled server-side, so Mollie iDEAL/Bancontact customers were dropped on the native success page before the gateway could redirect them.
Admin
- New Show Payment Method Icons toggle (default on) under Stores > Configuration > WiMakeIT > Checkout > Payment.
- New Custom Icon Overrides field (multiline
prefix|valuetextarea) — value can be a full URL, a module-relative path, or a built-in slug. - New Off-site Gateway Redirect URLs field (multiline
prefix|urltextarea) — URLs starting with/are prefixed with the store base URL, letting integrators add gateways without touching code.
[1.6.1] - 2026-04-25
Fix
- Off-site payment gateways (MultiSafepay and similar) no longer drop customers on the native success page right after placing the order. The Alpine place-order handler now resolves the gateway redirect URL from the server-side map instead of always navigating to
successUrl.
[1.6.0] - 2026-04-20
Admin
- Module is now laser-focused on Luma + Breeze. Hyvä-specific surface area (Tailwind module,
hyva_config_generate_beforeobserver,etc/frontend/events.xml, pre-compiled CSS) moved to the companionwimakeit/module-checkout-hyva≥ 1.1.0. - Removed pre-compiled
checkout.css/success.cssand the non-partial LESS entries that existed only for the Hyvä<css src=>publisher.
Deps
- Hyvä sites must now install
wimakeit/module-checkout-hyva≥ 1.1.0 (ships its own compiled stylesheets and a proper<link rel="stylesheet">injection).
[1.5.2] - 2026-04-15
Admin
- Dropped
<head><css src="…"/>fromcheckout_index_index.xmlandcheckout_onepage_success.xml— Hyvä's page-config renderer was stripping therel="stylesheet"from it, leaving the browser with a bare<link>it never loaded. Luma and Breeze still pick up the styles via their existing_extend.less/ critical-CSS pipelines. - Ship compiled
checkout.cssandsuccess.cssalongside the LESS partials so the Hyvä companion module can reference them.
[1.5.1] - 2026-04-12
Fix
- Restored the runtime LESS entry points (
checkout.less,success.less) after the 1.5.0 cleanup so themes that don't bundle our partials still get styled.
Feature
- Native Hyvä Tailwind registration via the
hyva_config_generate_beforeobserver — themes that opt-in to the proper pipeline no longer double-load the styles.
[1.5.0] - 2026-04-10
Admin
- Frontend assets restructured into a single LESS source under
view/frontend/web/css/source/: _variables.less— design tokens (text, font-size, radius, breakpoints, transitions, dark-mode palette)._mixins.less— spinner, input-base, selectable-card, button-base, visually-hidden._checkout.less,_success.less— fully nested page partials._module.less— Luma bundle entry (auto-included via_extend.less).- New Breeze critical-CSS entry at
view/frontend/web/css/breeze/_checkout.lessper breezefront convention. - New Hyvä Tailwind source at
view/frontend/tailwind/module.cssso Hyvä's Tailwind build keeps the.wm-co-*classes. - New Breeze JS widget shim registered in
breeze_checkout_index_index.xml— Breeze can defer / bundle the Alpine component instead of treating the<script src>as a standalone asset.
[1.4.4] - 2026-04-08
Fix
- Custom success page no longer renders a duplicate native "Thank you for your purchase!" heading nor the "Print" link above our hero.
- Product thumbnails on the success page no longer produce a broken
placeholder/.jpgURL when the product has nosmall_image. Magento's normal placeholder URL is now returned. - Social share text now reads "I just placed an order at WiMakeIT" instead of the raw store-view code (was "FR").
[1.4.3] - 2026-04-05
Admin
- "Place Order" button now uses the configured Accent Color instead of the neutral text color, so the primary CTA matches the brand. Hover darkens via
filter: brightness(.92).
[1.4.2] - 2026-04-03
Fix
- Minicart no longer shows the items from the order just placed. After a successful
payment-informationPOST, thecart,checkout-data,cart-data,last-ordered-itemsandmessageskeys are wiped frommage-cache-storage, section cookies expired, and the Hyväreload-customer-section-data/private-content-loadedevents dispatched.
[1.4.1] - 2026-04-02
Fix
placeOrderno longer fails silently when a shipping/billing field is invalid. The validator now sets a global error (with the offending field's message) and scrolls/focuses the first invalid input. Previously the button stayed enabled while the click did nothing.
[1.4.0] - 2026-04-01
Feature
- New custom order success page with five individually toggleable sections:
- Hero with personalised greeting, order number and confirmation email line.
- Order summary card listing each item (thumbnail, qty, line total) plus the grand total.
- Next-order coupon card with a copy-to-clipboard button (Alpine, no extra JS).
- Social share row (Facebook, X, LinkedIn, WhatsApp, email) with brand-coloured hover.
- Upsells grid built from related products of the just-bought items, deduped against the order itself and capped to a configurable limit (default 4).
- New
SuccessDataViewModel that pulls the last real order from the checkout session, formats prices viaPricing\Helper\Data, and degrades gracefully when the order is no longer available (empty-state with "continue shopping" CTA).
Admin
- Module now sequences
Magento_CatalogandMagento_Salesfor the upsell + order data needed by the success page.
[1.3.0] - 2026-03-28
Feature
- New extension attribute
wm_newsletter_emailso the newsletter subscription uses the email actually captured in the checkout form rather thanbilling.email. Avoids subscribing the wrong address after the user changes the email in a later step. Falls back to billing/quote email if missing or invalid. - New
getDeliveryEstimate(method)helper exposing per-method delivery ETAs when the carrier provides them (extension_attributes.delivery_date,eta,lead_time,estimated_delivery). Displayed under the carrier title.
Perf
- Shipping form no longer issues redundant
POST /billing-addresscalls — the request is now skipped when neither the address nor the cart changed since the last successful load.
Admin
- Bundled
phpstan.neon(level 8) andphpcs.xml(PSR-12 + Magento2) so the module ships with a clean static-analysis baseline.
[1.2.0] - 2026-03-25
Feature
- Virtual / downloadable cart support — when
$quote->isVirtual()is true, the shipping leg is skipped, the address form becomes the billing address, and payment methods are loaded viaPOST /billing-address+GET /payment-methods+GET /totals. - Step indicator shows "Billing" instead of "Shipping" for virtual carts.
Admin
- Removed the "billing address same as shipping" toggle and the secondary billing form for virtual carts — the displayed address IS the billing address.
[1.1.0] - 2026-03-20
Feature
- Order comments now persisted on the quote and copied to
sales_order.customer_note(plugin onPaymentInformationManagementInterface+ guest variant). - Newsletter opt-in actually subscribes the email after a successful order, for both customer and guest checkout.
- Gift message UI (sender / recipient / message) wired to the native
Magento_GiftMessageREST endpoint, called before order placement. - Real address autocomplete implementation for both Google Places and HERE Geocoding — country-restricted suggestions under the street field, with a session token to keep Google billing on the autocomplete-only tier.
- Bundled Alpine.js 3.14.1 in
view/frontend/web/js/vendor/alpine.min.jsso Luma works out of the box (Hyvä and Breeze keep using their native Alpine). - Telephone validation (E.164-ish: 7–20 digits after stripping separators).
Security
- Email validation now uses the WHATWG HTML5 regex with a 254-char cap.
isEmailAvailablecalls are debounced and rate-limited (≥ 1.5s between requests) to slow down enumeration probes.
Admin
- Declared
extension_attributesonQuote\Api\Data\PaymentInterface:wm_customer_note,wm_subscribe_newsletter. - Removed the
0000000000telephone fallback — the field is now properly required.
Deps
- Soft dependency on
magento/module-gift-messageandmagento/module-newsletterdeclared incomposer.jsonandmodule.xml.
Vous avez trouvé un bug ? Faites-nous-en part.
Un court formulaire s'ouvre dans un nouvel onglet — le nom du module et votre langue sont déjà pré-remplis. Décrivez ce que vous avez tenté, ce qui n'a pas fonctionné, et nous vous répondrons sous un jour ouvré.
Signaler un bug pour CheckoutBesoin d'aide ?
Notre équipe est disponible pour vous accompagner dans l'intégration.