Checkout

v1.17.3 Annual Subscription Updated Sep 18, 2026

Checkout

A fast one-page or multi-step checkout built with Alpine.
Hyvä Compatible Magento 2.4.4 Magento 2.4.5 Magento 2.4.6 Magento 2.4.7 Mage-OS 2.0 Mage-OS 2.1
€199.00
Try the live demo
  • Updates and support included for 12 months
  • License key delivered immediately by email
  • 30-day money-back guarantee
  • Full documentation included
  • Compatible with Hyvä themes
  • Composer-ready installation

Checkout

A modern, fast and fully configurable Magento checkout — built with Alpine.js, server-rendered for speed, and compatible with Luma, Hyvä (via the companion module) and Swissup Breeze. Replaces Magento's default checkout with a one-page or multi-step layout that addresses the well-known pain points: slow rendering, fragile session handling, missing post-order redirects for off-site gateways, no payment method icons, and a generic success page.

The whole flow runs on the standard Magento REST endpoints (no proprietary JSON-API), so existing extensions for shipping, payment, tax, gift messages, coupons and newsletters keep working. The Alpine.js component is small (~30 KB), CSP-safe via SecureHtmlRenderer, and has a robust fallback that rebuilds the checkout config from the database when DefaultConfigProvider crashes.

Who it's for

  • Merchants whose conversion rate suffers from Magento's slow native checkout and want a faster, more focused experience
  • Stores using off-site payment gateways (MultiSafepay, Mollie, PayNL, Buckaroo, Adyen, Stripe…) that need the customer redirected to the hosted payment step reliably after placeOrder
  • B2B and B2C teams that need a configurable success page (thank-you message, next-order coupon, social share, related-product upsells)
  • Agencies who want the same checkout module to work on Luma, Breeze and Hyvä (via the dedicated wimakeit/module-checkout-hyva companion)

Key benefits

  • Two layout modes — one-page (all sections visible) or multi-step (guided), switchable per store from the admin.
  • Off-site gateway redirects done right — built-in post-placeOrder redirect map for MultiSafepay, Mollie (mollie_methods_*), PayNL and Buckaroo, plus an admin field to add any other gateway (Adyen HPP, Stripe redirect…) without touching code.
  • Payment method icons — ships with 5 neutral SVGs (card, bank, wallet, cash, voucher) auto-mapped to major gateways plus a title-keyword fallback (bancontact, iDEAL, PayPal, Apple/Google Pay, Klarna…). Override per code via the admin: full URL, module-relative path, or built-in slug.
  • Smart features merchants actually need — guest-email detection with login suggestion, address autocomplete (Google Places or HERE Geocoding), saved customer addresses, editable quantities in the sidebar, coupon code, newsletter opt-in, order comments, gift messages, checkout agreements, virtual/downloadable cart support, configurable accent color, step indicator.
  • Configurable success page — replaces the native Magento order confirmation with a hero, order recap, copy-to-clipboard next-order coupon, social share row, and an upsell grid built from the just-bought items' related products — each section individually toggleable.
  • Theme-aware build — single LESS source shimmed into Luma (_module.less, auto-imported by _extend.less), Breeze (breeze/_checkout.less, critical-CSS wrapped) and Hyvä (tailwind/module.css, scanned by Hyvä's Tailwind build). The Alpine.js component runs natively on Hyvä and Breeze, and is bundled with Alpine 3.14 for Luma.

Compatibility

  • Magento 2.4.x / Mage-OS equivalent
  • PHP 8.1, 8.2, 8.3
  • Requires wimakeit/module-core ^3.0.9
  • Native checkout, Swissup Breeze and Hyvä supported (Hyvä via the companion wimakeit/module-checkout-hyva ≥ 1.1.0)
  • CSP-compliant (inline scripts rendered via SecureHtmlRenderer)
  • Translations shipped: en_US, fr_FR, nl_NL

Install this module via Composer. Make sure your auth.json is configured with your Wimakeit credentials.

Terminal
$ 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

SettingDefault
Enable Custom CheckoutYes
Layout ModeOne-page
Enable Debug LoggingNo — leave off in production

Features

SettingDefault
Show Coupon CodeYes
Show Newsletter Opt-inYes
Show Delivery Date Instead of Lead TimeNo — a carrier quotes transit only, not availability
Show Order CommentsNo
Show Gift MessageNo
Guest Email DetectionYes
Editable Quantities in SidebarYes

Address

SettingDefault
Default CountryBE (Belgium)
Address AutocompleteNo
Autocomplete ProviderGoogle Places
API Key(blank — encrypted when set)
Single Full Name FieldNo — check your surname data first, the admin help text carries the query
Normalise Phone Numbers on SubmitNo — 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

SettingDefault
Enable Custom Success PageYes
Thank-you Message(blank)
Next-order Coupon Code(blank — section hidden when empty)
Coupon Description(blank)
Show Social Share ButtonsYes
Show Upsell ProductsYes
Upsell Products Limit4

Payment

SettingDefault
Payment Method Order by Country(blank — built-in order for BE, NL, FR, DE, LU)
Show Wallets FirstYes — Apple Pay and Google Pay above the card form
Show the Customer's Previous Method FirstYes — signed-in customers only
Show Payment Method IconsYes
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

SettingDefault
Accent Color#ef6f14
Show Step IndicatorYes
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.

SettingDefault
Enable Delivery Date CalculationNo
What to ShowA 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 DaysMonday 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 CheckoutNo

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
License
Annual Subscription
Support
12 months
Last updated
Sep 18, 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

Compatibility checker

Pick your stack to see if this module fits.

Compatibility 4

Yes. Checkout is tested against Magento Open Source 2.4.4 → 2.4.7, Adobe Commerce on the same line, and Mage-OS 2.0+ — on PHP 8.1, 8.2 and 8.3. The Specifications tab lists the exact tested combinations. If your stack is in the list, we guarantee a clean install. Wimakeit is an Adobe-certified Magento agency based in Presles (Charleroi / Namur region), Wallonia, Belgium and runs every module against the same matrix we ship to enterprise clients across Belgium, France and the Netherlands.
Yes — fully. Checkout ships a native Hyvä-compatible frontend (Tailwind + Alpine.js) and integrates with Hyvä Checkout when applicable. No companion fallback module needed. Every Hyvä-marked module is built and maintained by the same Wimakeit team that ships Hyvä builds for production stores.
Hyvä Storefront (Tailwind + Alpine.js, server-rendered) and Hyvä Checkout (React-based, headless on top of Magento) are two distinct packages. Checkout ships native Hyvä Storefront compatibility — its frontend is rendered through Hyvä templates with no Luma fallback. Hyvä Checkout integration is delivered when the module has a checkout-step touchpoint (custom payment input, terms checkbox, etc.); otherwise the module runs server-side without any Hyvä Checkout customisation needed. See the Specifications tab for the exact Hyvä integration scope of this module.
Yes. Checkout respects the standard Magento scope (default / website / store / store_view). Every configuration is overridable per store view. Frontend labels use Magento's standard translation files — shipped in French, English and Dutch out of the box. Currencies follow your Magento currency setup with no extra wiring. A typical Wimakeit Magento store runs an fr_BE / nl_BE / en_GB triplet from a single backend — Checkout is ready for this B2B / international setup.

Pricing & licensing 4

€199 — one-time payment, perpetual licence, no recurring fees. Includes 1 year of minor updates + email support in French, English and Dutch, 1 production domain + 1 staging/dev domain. Renewing the support window after year 1 is optional. Volume licences are negotiated directly — write to contact@wimakeit.com for agency or multi-store pricing.
Yes. Checkout has a live demo on demo.wimakeit.be/module-checkout where you can poke around the admin and frontend with a real install pre-populated with sample data. For longer evaluations, request an evaluation licence via our contact form — evaluations cover the same scope as the paid licence and convert to a permanent key on purchase.
We review refund requests case by case. If the module doesn't deliver what was advertised, email contact@wimakeit.com from the address tied to your licence. The refund policy is published on the terms page and applies to every module sold through this marketplace.
Checkout is distributed under a commercial proprietary licence — not MIT, GPL or any other open-source licence. The PHP source ships in vendor/wimakeit/ once you composer require the package, so you can read it, audit it, and patch it locally for your own Magento install. You may NOT redistribute it, sublicense it, publish it on a public package registry, or sell it on. One licence = one production domain + one staging/dev domain (see terms for the full EULA). Wimakeit modules are NOT part of Magento's open-source repository on packagist.org — they are distributed exclusively via the private Composer registry packages.wimakeit.be.

Installation & updates 6

Run composer require wimakeit/module-checkout:^1.7.14, then bin/magento setup:upgrade, bin/magento setup:di:compile, and finally bin/magento cache:flush. The Installation tab on this page lists every configuration step (ACLs, cron jobs, default values) so a deploy takes minutes, not hours. If you need a hand, Wimakeit offers Magento installation services from our Wallonian office (Presles, between Charleroi and Namur).
Step 1: get a token on packages.wimakeit.be → My account → Tokens. Step 2: at the root of your project add to auth.json: {"http-basic": {"packages.wimakeit.be": {"username": "YOUR-EMAIL", "password": "YOUR-TOKEN"}}}. Step 3: register the repo: composer config repositories.wimakeit composer https://packages.wimakeit.be. Step 4: composer require wimakeit/module-checkout:^1.7.14. In CI/CD pipelines, inject COMPOSER_AUTH as a JSON env var instead of committing auth.json.
Most merchants are live within 30 minutes: composer install (1-2 min) → setup:upgrade + di:compile (5-10 min depending on stack size) → admin configuration (5-15 min following the Installation tab) → smoke test on a product or order. Allow extra time if you have a custom theme overriding similar templates. The Wimakeit team has shipped this exact module to B2B and DTC stores across Belgium.
Checkout is built for Magento 2.4.x / Mage-OS 2.0+ and has no Magento 1 equivalent. When migrating from Magento 1, the Wimakeit team handles the audit, the data migration and the integration of Checkout into the new backend as part of a Magento migration project. Migrating from Adobe Commerce to Mage-OS is transparent for Checkout: same composer require, same module code, same database schema — no fork to maintain, no licence change.
Updates ship through your composer dependency (this exact package), hosted on Wimakeit's private Composer repository at packages.wimakeit.be. Each release is announced on the Changelog tab + the Wimakeit news and follows semantic versioning — composer update is safe within a major.
All .phtml templates are overridable from your theme: copy the file into app/design/frontend/{YourVendor}/{theme}/Wimakeit_{Module}/templates/ keeping the same relative path. Blocks, ViewModels and Helpers are overridable via DI preference in your own custom module — declare <preference for="Wimakeit\…\OriginalClass" type="YourVendor\Override\Class" /> in etc/di.xml. Layout XML is extended (preferred) or overridden the standard Magento way. Wimakeit modules never use the final keyword on classes you might reasonably want to override — overriding is a first-class scenario, not a hack.

Support & security 3

Open a ticket through the contact form on wimakeit.be or email contact@wimakeit.com with the module name, version, Magento/Mage-OS version and the steps to reproduce. Fixes ship in the next patch release. Wimakeit support is staffed in French, English and Dutch on business days (CET working hours).
Send security reports privately to contact@wimakeit.com with a clear [SECURITY] subject prefix — please include the module name, version and the steps to reproduce. We acknowledge promptly on business days and credit reporters in the Changelog if they wish. Wimakeit is a Belgian SRL (société à responsabilité limitée) bound by Belgian and EU privacy and disclosure law.
Yes. Checkout stores only the data its feature scope requires, never tracks shoppers across sites, and ships zero third-party calls by default. Combine it with the Wimakeit GDPR module to publish cookie banners and data-subject request forms compliant with Belgian, French and Dutch DPA guidance. Wimakeit's EU-based hosting partners (OVH Roubaix / Gravelines, Cblue Gembloux) keep every customer's data inside the EU.

About Wimakeit 1

Wimakeit is an Adobe-certified Magento partner agency based in Presles, Wallonia (between Charleroi and Namur), Belgium, building Magento and Mage-OS stores since 2020 across BE / FR / NL. Every module on this marketplace runs in production on at least one Wimakeit client (we eat our own dog food). Direct line to the developers who built the code, multilingual support (FR / EN / NL), CET business hours, no offshore handoff. See our portfolio for the kind of Magento builds we ship.

Found something not covered by the FAQ?

Report a bug or ask a question — the form is prefilled with this module.

Report a bug

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-hyva 1.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-hyva 1.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:options lists 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 required on 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 required when the phone field is filled. The plugin now re-saves the shipping address right before placing the order so the quote reflects every field below postcode — 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_image identifier declared in view.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.token column is VARCHAR(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 running multisafepay/magento2 4.2+.
  • Removed the diagnostic logging added in 1.7.12/1.7.13 that flooded system.log while 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 ServiceInputProcessor was stripping the redirect_token from additional_data before MultiSafepay's observer could read it (signature mismatch on PaymentInterface::setAdditionalData). A new CaptureMultisafepayRedirectTokenPlugin on Magento\Quote\Model\Quote\Payment::importData captures the value from the raw input and writes it to additional_information so 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.2 upgrade. 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 as paymentMethod.additional_data.redirect_token, and appends it to the redirect URL for all multisafepay* 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. The private-content-loaded event dispatched after a successful payment now carries a {detail: {data: {}}} payload, fixing a Cannot read properties of null thrown by Hyvä's messages section listener.

[1.7.8] - 2026-05-20

Fix

  • Order summary now shows whole quantities as 1 instead of the raw 1.0000 decimal 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_virtual flag and goes straight to billing + payment. WMI-130.
  • Order summary thumbnails now fall back through thumbnail → small_image → image so 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 %s into the pattern) and formatPrice() 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 paymentMethodsLoading flag 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/critical always log.

Perf

  • Production stores stop emitting hot-path traces from the checkout pipeline into var/log/system.log once the toggle is left off.

Deps

  • Requires wimakeit/module-core 3.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::config ACL resource so the Settings entry can be granted independently of code edits.

Deps

  • Certified PHP 8.1 → 8.3 support. Composer php constraint 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|value textarea) — value can be a full URL, a module-relative path, or a built-in slug.
  • New Off-site Gateway Redirect URLs field (multiline prefix|url textarea) — 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_before observer, etc/frontend/events.xml, pre-compiled CSS) moved to the companion wimakeit/module-checkout-hyva ≥ 1.1.0.
  • Removed pre-compiled checkout.css / success.css and 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="…"/> from checkout_index_index.xml and checkout_onepage_success.xml — Hyvä's page-config renderer was stripping the rel="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.css and success.css alongside 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_before observer — 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.less per breezefront convention.
  • New Hyvä Tailwind source at view/frontend/tailwind/module.css so 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/.jpg URL when the product has no small_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-information POST, the cart, checkout-data, cart-data, last-ordered-items and messages keys are wiped from mage-cache-storage, section cookies expired, and the Hyvä reload-customer-section-data / private-content-loaded events dispatched.

[1.4.1] - 2026-04-02

Fix

  • placeOrder no 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 SuccessData ViewModel that pulls the last real order from the checkout session, formats prices via Pricing\Helper\Data, and degrades gracefully when the order is no longer available (empty-state with "continue shopping" CTA).

Admin

  • Module now sequences Magento_Catalog and Magento_Sales for the upsell + order data needed by the success page.

[1.3.0] - 2026-03-28

Feature

  • New extension attribute wm_newsletter_email so the newsletter subscription uses the email actually captured in the checkout form rather than billing.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-address calls — the request is now skipped when neither the address nor the cart changed since the last successful load.

Admin

  • Bundled phpstan.neon (level 8) and phpcs.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 via POST /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 on PaymentInformationManagementInterface + 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_GiftMessage REST 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.js so 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.
  • isEmailAvailable calls are debounced and rate-limited (≥ 1.5s between requests) to slow down enumeration probes.

Admin

  • Declared extension_attributes on Quote\Api\Data\PaymentInterface: wm_customer_note, wm_subscribe_newsletter.
  • Removed the 0000000000 telephone fallback — the field is now properly required.

Deps

  • Soft dependency on magento/module-gift-message and magento/module-newsletter declared in composer.json and module.xml.

Found a bug? Tell us about it.

A short form opens in a new tab — the module name and your language are already filled in. Share what you tried, what went wrong, and we will get back to you within one business day.

Report a bug for Checkout
Module SKU: wimakeit-module-checkout · Language: en_US

Need help?

Our team is available to assist with integration.

Contact us
Planifier un appel