Stripe Express Checkout
Version 1.0.7
September 1, 2026
Fixed
- The
charge.succeededwebhook no longer aborts when the store rejects the billing address a wallet returns (most commonly a country that is not in the store's country list). The shipping address is used as the billing address instead, so the order keeps running through the regular status flow. Previously the order was left without a billing address and stuck in its initial status, while the payment had already been captured. - Corrected a misplaced closing parenthesis in the billing address completeness check, which evaluated all three
empty()calls as a single boolean expression instead of checking each field.
Version 1.0.6
July 2, 2026
Added
- New
Variable::EVENT_MODIFY_BUTTON_OPTIONSevent (ModifyButtonOptionsEvent), fired before the express checkout buttons are rendered. Handlers can modify the options passed to the client sideStripeExpressCheckout.init()call. - The client side element now forwards a
paymentMethodConfigurationoption (if set) tostripe.elements(), so host projects can control which payment methods the Express Checkout Element displays (set it viaEVENT_MODIFY_BUTTON_OPTIONS).
Version 1.0.5
May 29, 2026
Added
- The express checkout request now flags itself via
Craft::$app->params['stripeExpressCheckout']before processing payment. Host projects can read this flag (e.g. in anEVENT_BUILD_GATEWAY_REQUESThandler) to distinguish the express checkout flow from the regular onsite checkout, since both run throughPaymentIntents::createPaymentIntent.
Version 1.0.4
May 20, 2026
Fixed
- README: corrected
setItemQtyparameter order to(qty, id?)to match the actual JS signature. Previously documented as(id, qty).
Version 1.0.3
May 20, 2026
Fixed
- Order is now created with the correct
orderSiteIdmatching the site the customer placed the order from. Previously fell back to the first site in the store.
Added
siteIdis sent with every plugin API request so the order site is deterministic regardless of the AJAX site-resolution.