PS PrestaShop Intermediate

Express Checkout — Apple Pay, Google Pay & Amazon Pay via Stripe — Complete guide

Install, connect to Stripe (manual or automatic) and configure express payment with Apple Pay, Google Pay and Amazon Pay on the product page, cart and checkout for PrestaShop 8 and 9.

Updated Module version 1.1.0

Overview

DataFirefly Express Checkout adds wallet payments — Apple Pay, Google Pay and Amazon Pay — to your PrestaShop 8 or 9 store, via Stripe. The module relies on Stripe’s Express Checkout Element: a single component that automatically detects the wallets available on the customer’s device and displays the matching buttons.

The buttons can appear in three locations, each toggled independently: on the product page (express buy), in the cart and on the checkout page. After payment, the order is created and validated by a signature-verified Stripe webhook, with idempotent logic that prevents any duplicate order. The module is compatible with single and multistore, and shipped in five languages (FR, EN, ES, DE, IT).

Requirements

  • PrestaShop 8.0 to 9.x, PHP 7.4 or higher.
  • The PHP cURL extension enabled (checked at installation).
  • An active Stripe account.
  • A store served over HTTPS (required for Apple Pay and Google Pay).

Installation

  1. In the back office, open Modules > Module Manager.
  2. Click Upload a module and drop the module’s ZIP archive.
  3. Once installation is complete, click Configure.

On installation, the module creates a transactions tracking table and a dedicated order state “Payment authorized (awaiting capture)” used by the manual capture mode.

Connecting to Stripe

The module offers two connection modes, set by the Connection mode field.

Manual mode (API keys)

Enter your keys from the Stripe Dashboard (Developers > API keys):

  • Publishable key and Secret key, in Test then Live versions.
  • Webhook secret (see the Webhook section below).

Switch the Mode field to Test during integration, then to Live in production. Each mode has its own set of keys.

Automatic mode (Stripe Connect / OAuth)

This mode connects your Stripe account in one click. Click Connect with Stripe, authorize access, and the module automatically retrieves the publishable and secret keys, creates the webhook (and its signing secret) and attempts to register the wallet domain for Apple Pay / Google Pay. The Disconnect button revokes access and purges the keys.

Automatic mode requires a Stripe Connect application. Two options:

  • Your own Connect application: enter the client_id and the platform secret (Test and Live).
  • DataFirefly broker: enter the broker URL, which holds the platform secret and performs the OAuth exchange. If this URL is set, it takes priority.

Declare the redirect URL shown in the connection panel in the Redirect URIs of your Stripe Connect application, otherwise the OAuth authorization will be refused.

Stripe configuration (Dashboard)

Webhook

In manual mode, create the endpoint in Developers > Webhooks > Add an endpoint:

  • URL: the one shown at the top of the module’s configuration page (.../module/dfexpresscheckout/webhook).
  • Events: payment_intent.succeeded and payment_intent.payment_failed.
  • Copy the signing secret (whsec_…) into the module configuration.

In automatic mode, the webhook and its secret are created automatically on connection.

Without a configured webhook secret, the module rejects incoming calls: this is a security measure — an order is never created based on an unverified call.

Enabling the wallets

  • Amazon Pay: enable it in Settings > Payment methods of your Stripe Dashboard. It then appears automatically in the Express Checkout Element.
  • Apple Pay: your domain must be verified in Stripe (Settings > Apple Pay). In automatic mode, the module attempts this registration for you.
  • Google Pay: active automatically, no action required.

Module configuration

Display locations

Three switches control the display of the buttons: product page, cart and checkout. Enable them independently according to your strategy.

Capture mode

  • Immediate capture (default): the payment is charged right away and the order moves to “Payment accepted”.
  • Authorization then manual capture: Stripe authorizes the payment without charging it; the order arrives in the “Payment authorized (awaiting capture)” state.

Title and theme

Customize the displayed title above the buttons and the button theme (black, white, white outline) to match your design.

Customer side

Depending on the location, the customer sees one or more wallet buttons. They confirm the payment in a single authentication (Face ID, fingerprint, Amazon password), without creating an account: the email as well as the shipping and billing addresses are retrieved from the wallet. When shipping fees apply, the module offers the active carriers and recalculates the total on every address change. Digital products work without a shipping step.

From the product page, the express purchase covers the displayed product (and the chosen quantity) via a dedicated cart, without modifying the customer’s current cart.

Manual capture: charge or cancel

In manual capture mode, control is done through the order status:

  • To capture the payment, move the order to the “Payment accepted” status.
  • To release the authorization, move the order to the “Canceled” status.

A Stripe authorization has a limited lifetime (usually 7 days). Remember to capture before expiry, otherwise the authorization is released automatically.

Orders, webhook and idempotency

The order is created and validated on receipt of the payment_intent.succeeded event (signed webhook). A return controller acts as a safety net when the customer comes back to the store. A transactions table links each PaymentIntent to its order: a single transaction therefore never generates two orders, regardless of the order in which the browser return and the webhook arrive. The guest customer and their addresses are rebuilt from the information returned by the wallet.

Multilingual and multistore

The module ships with translation files for FR, EN, ES, DE, IT and works in a multistore context. The Stripe keys, connection mode and capture mode are standard configuration settings.

Troubleshooting

The buttons do not appear

Check that the store is on HTTPS, that the Stripe keys are set for the active mode (Test/Live), and that the relevant location is enabled. Apple Pay only appears on Safari/iOS with a verified domain; Google Pay on Chrome/Android.

The payment succeeds but no order is created

Check the webhook: correct URL, events payment_intent.succeeded and payment_intent.payment_failed, and a signing secret identical to the module’s. Review the Stripe logs (webhook delivery attempts) and the PrestaShop logs.

Amazon Pay is missing

It must be enabled in Settings > Payment methods of the Stripe Dashboard. It then appears automatically.

Automatic connection fails

Check that the Connect client_id is set for the active mode and that the module’s redirect URL is properly declared in your Connect application. An invalid state token indicates an expired session: restart the connection from the back office.

Uninstallation

Uninstalling removes the module configuration. The transactions tracking table is kept by default for traceability of past orders.

FAQ

Does Amazon Pay really work through Stripe?

Yes. Stripe supports Amazon Pay within the Express Checkout Element; you just need to enable it in the Stripe Dashboard.

Do I have to install dependencies (Composer)?

No. The module ships with an internal Stripe client in cURL. Just install the module and enter (or connect) your keys.

Is the module compatible with PrestaShop 9?

Yes, it is compatible with PrestaShop 8.0 to 9.x and tested on PHP 8.1 to 8.3.

Can I switch from manual to automatic mode?

Yes, at any time from the configuration. In automatic mode, the keys are filled in by the OAuth connection; in manual mode, you enter them yourself.

Was this page helpful?

Still stuck? Contact support