1. Documentation /
  2. Stripe


The Stripe payment gateway for WooCommerce lets you accept payments directly onsite, and includes the option to offer express checkouts (such as Apple Pay and Google Pay), iDEAL, SEPA, and more international payment methods. For pricing info, please visit Stripe’s website.

Download it now at WordPress.org or via the “Add New” option under Plugins on your site. For full details of updates, please see the Changelog.

For pricing info, please visit https://stripe.com/pricing


↑ Back to top
  1. Go to Plugins > Add New on your WordPress site.
  2. Enter WooCommerce Stripe in the Search Plugins bar. The author is WooCommerce.
  3. Click Install Now and Activate.

To learn more, see Installing and Managing Plugins.

Setup and Configuration

↑ Back to top
  1. Go to WooCommerce > Settings > Payments > Stripe.
  2. On initial setup, select Finish set up:
  1. On initial setup, click “Create or connect an account” to configure the Stripe payment method with a new or existing Stripe account.
  2. Alternatively, selecting “Enter account keys (advanced)” will allow you to manually enter the Stripe account’s API keys. These keys can be copied from your Stripe dashboard:
  1. When the new checkout experience is enabled, you can change the payment method title by editing the Name under Display Settings.
  2. If you wish to test payments before accepting real transactions, check the Enable test mode box and enter test account keys if prompted. Uncheck that box and save the settings before you begin accepting real payments with Stripe. You can read more about test mode here.
  3. Leave Enable payments via saved cards checked if you want to give Stripe customers the ability to use a card saved on their account for future purchases.
  4. If available, leave Enable separate credit card form checked unless you want all credit card inputs to appear as one field.
  5. By default, payments will be authorized and captured at the same time.If you want to manually capture funds after a payment is authorized, tick the checkbox to Issue an authorization on checkout, and capture later. If this setting is enabled, you’ll need to capture funds manually for each order within 7 days – otherwise the authorization will be canceled alongside the order. See our FAQ on this for more.
  6. Optionally, enter a Customer bank statement, which is the descriptor that will appear on a customer’s bank or credit card statement. If left blank, the setting on the Stripe account will be used. If you enter information into this field, it must:
    • Be 22 characters or less
    • Contain at least one letter
    • not include these characters: > < " ' (see full requirements)
  7. Under “Advanced settings”, tick Log error messages if you wish to save logs that can help you/us troubleshoot your site. This can be disabled and enabled as needed.
    1. Logs will appear under WooCommerce > Status > Logs. Use the dropdown menu to select, and view.
      • The log will be format as follows:
    2. When enabled, only events that happen after the point of being enabled are logged.
  8. Save changes.
  9. Finally, we highly recommend completing the webhooks integration, which is presented in the next section. That will help keep the communication between Stripe and your site synchronized.

How to reset or roll API Keys for Stripe

↑ Back to top

In certain cases, you may need or want to roll or reset the API keys used in Stripe.

  • To get started, head to: WP Admin > WooCommerce > Settings > Payments > Stripe > Settings
  • Once there, click the Edit Account Keys
  • There you’ll see the current keys currently in place on your account.

The next step is revoking the API keys on the Stripe side:

  • Head to the API keys section of your Stripe Account
  • Next to each key select the ellipsis icon (…) and then Roll Key…
  • Fill in the details and select “Roll API key
  • Copy and paste your new keys to the appropriate place in the Stripe settings and save your changes.

How to change the Stripe account connected to your site

↑ Back to top

In certain cases, you may want to change the Stripe account connected to your site.

  • To get started, head to: WP Admin > WooCommerce > Settings > Payments > Stripe > Settings
  • Once there, click the Edit Account Keys
  • Replace the Live publishable key and Live secret key with the one in your preferred Stripe account
  • Add webhooks to your preferred Stripe account and add the Webhook secret to the Webhook secret field
  • Save your new keys and settings


↑ Back to top

Webhooks are used by Stripe to communicate with your site. It provides information such as the status of the payment, and is used to update the order based on certain events from Stripe’s side of things.

In the settings, you’ll find a webhook endpoint URL ready for you to copy and paste into your Stripe dashboard:

  • Head to WooCommerce » Settings » Payments » Stripe. Under the Settings » Account details section, copy your webhook endpoint URL into your clipboard.
  • Next, in your Stripe Dashboard go to Developers » Webhooks and select Add endpoint (with “Test mode” enabled or disabled, depending on which mode is being configured).
  • Paste the webhook endpoint URL you copied earlier into the Endpoint URL field, and select the following events (at minimum):
    • source.chargeable
    • source.canceled
    • charge.succeeded
    • charge.failed
    • charge.captured
    • charge.dispute.created
    • charge.dispute.closed
    • charge.refunded
    • review.opened
    • review.closed
    • payment_intent.succeeded
    • payment_intent.payment_failed
    • payment_intent.amount_capturable_updated
    • payment_intent.requires_action
    • setup_intent.succeeded
    • setup_intent.setup_failed
  • Select Latest API version from the Version section, if shown, and then “Add endpoint”.
  • Copy the Signing secret (after clicking Reveal).
  • Back in WooCommerce » Settings » Payments » Stripe, click Edit account keys (above the “Account details”), paste the secret into the Webhook secret field, and save the keys.
  • If this was done in test mode, repeat the process after switching Enable test mode off (or vice versa, if necessary).

Test Mode

↑ Back to top

Test Mode allows you to process transactions and simulate different payment responses using Stripe.com Test Cards. Toggle the Enable Test Mode checkbox and ensure the test API Keys are listed. Stripe has documentation on obtaining your test API keys in their documentation. After that, use your store as a customer, adding the test card details at the Checkout. Test Mode can also be used with express checkouts by adding a Test card to your browser for Microsoft Pay. Using Apple Pay/ Google Pay when the Stripe setting for Test Mode is checked will allow you to process a payment without charging your saved Apple Pay/ Google Pay payment method.

Note: When Stripe is in Test Mode use one of Stripe’s test cards to avoid using real credit cards. While the latter will still work for testing purposes, it can lead to issues when a profile is created in one mode and then later used in the other.

Stripe Checkout

↑ Back to top

The new Stripe Checkout is not part of the WooCommerce Stripe payment gateway. This is an open enhancement and further details and any future development will be linked from this GitHub Issue.

Express checkouts

↑ Back to top

When the express checkouts option is selected, all types of express checkouts are activated (on your site) at once so you’re ready to accept payments via Apple Pay, Google Pay, or payment methods saved in the browser via the Payment Request API.

Express checkouts can be displayed on the product page, cart and checkout pages, and you can opt for hiding it in certain pages with the “Show express checkouts on” option.

Express checkouts customization

↑ Back to top

You can also customize the the express checkouts call to action, size and theme via “Customize appearance”.

To preview the button, you need a compatible device and browser combination, as well as have a properly configured Apple Pay/Google Pay wallet, or a saved credit card on your browser.

To see what an express checkout button looks like and how it behaves, go to the Stripe.com Demo Shop.

There are two styles of buttons you might see depending on if you A) allow third-party cookies for the site you’re visiting, and B) have the “Share that you have Google Pay with companies outside Google” setting enabled in Google Pay itself.

If you have both enabled, the button is styled like this:

When 3rd-party cookies are allowed on the site and your Google Pay is set to share that you have Google Pay beyond Google, the button is Google-branded.

Otherwise, the button may be styled like this:

If 3rd-party cookies are not allowed on the site, or your Google Pay is set to not share that you have Google Pay beyond Google, then then the button appears without branding.

Apple Pay

↑ Back to top

Customers need to have a payment method from a supported bank or payment card provider listed on the Apple Pay™ support page and a compatible Apple device. Using this official ApplePay Demo page Apple.com will help confirm if Apple Pay should be available.

The WooCommerce Stripe payment gateway handles domain verification for you automatically, so no manual configuration should be required. If you encounter an issue, you can re-trigger domain verification by disabling the express checkouts option, saving changes, and then re-enabling it. (To manually verify your domain, navigate to the Apple Pay configuration on your Stripe Dashboard – see Stripe’s “Verify your domain with Apple Pay” doc for more.)

Adding a domain to Stripe.com for Apple Pay

For existing Stripe merchants looking to enable Apple Pay, please ensure that the express checkouts option is ticked on within WooCommerce > Settings > Payments > Stripe (as mentioned above). If you have any issues with accepting Apple Pay, please follow the steps above by logging into your Stripe Dashboard and verifying your domain.

Use of “Apple Pay > Web domains”, which our Stripe integration uses to display the Apple Pay button, is subject to the Apple Pay on the Web terms of service. This is a part of the Stripe Services agreement to which you agree when activating your Stripe account.

Apple Pay Requirements

  • Your entire site must be served over HTTPS.
  • Your domain must have a valid SSL certificate.
  • Your server must support the TLS 1.2 protocol or later.
  • Your server must have port 443 open.

Google Pay / Microsoft Pay

↑ Back to top

Make sure that the express checkouts option is enabled, there is no other setup for you to accept payments via these methods.

Note: these buttons usually only show when there is a saved payment method in the browser or device being used. Customers need to have a payment method from a supported bank or payment card provider saved to their browsers.

More details and support at Google Pay Help, Microsoft Pay.

Additional Payment Methods

↑ Back to top

Aside from standard credit and debit cards, Stripe comes with additional payment methods (APMs) that can be used to target different markets. Our extension supports:

For detailed information about these payment methods, please click on the links above or visit the Stripe Payment Methods – alternatively Stripe.com has a Payments overview page with a lot of useful information. Most of these additional payment methods need to be enabled under Payment Settings on your Stripe.com Dashboard and may require additional information to be fully set up.

Once enabled in Stripe, they can be set up and managed under WooCommerce > Settings > Payments. If the new checkout experience is disabled, all of the APMs will appear separately, and can be enabled by using the slider icon or configured by selecting the payment service name. You can also change the title and description of each service within settings for that method.

WooPayments page showing Stripe international payment methods

If the new checkout experience is enabled, the Stripe gateway accepts multiple payments methods, as described under “Customer Usage” below. To enable or disable payment methods, toggle the corresponding checkboxes and click “Save changes” at the bottom of the page.

Payment methods that are not currently accepted in the new checkout experience can be enabled from WooCommerce > Payments > Settings:

↑ Back to top

Stripe Link allows customers securely save and reuse payment information for a faster checkout at the thousands of online businesses that have Link enabled.

Note: Stripe Link is available to US merchants only.

  1. Enable Link must be toggled on in your Stripe account’s checkout settings.
  1. The store must be able to accept payments in USD.
  2. Stripe Link must be enabled as an alternative payment method (APM). There are more details about enabling Stipe Link as an APM below.

To enable Stripe Link, the new checkout experience needs to be enabled. Then follow these steps:

  1. In your WordPress dashboard, go to WooCommerce > Settings > Payments > Stripe
  2. Under Payment Methods, check the box for Stripe Link.
  3. You’re done! Stripe Link should start working automatically.

When a customer goes through the checkout on your site for the first time after you enable Stripe Link, they will see the following field asking for their phone number:

Whether or not they choose to enter their phone number and save their information into Stripe Link, the rest of the checkout process will work as normal.

If they do enter their phone and select to save their information, Stripe will create a Link account for them using the email address they entered in the checkout form. These accounts can be managed via the Stripe Link website.

If a customer already has a Stripe Link account, whether it was created on your site or any other site that uses Stripe Link, the checkout process will become much faster.

As soon as they enter their email address on your checkout page, they will see this prompt, asking them to verify their phone number:

Stripe Link will automatically send a message to their phone number, and when the customer enters that into the Stripe Link popup, they will be asked to double-check their payment method and shipping address like so:

After the customer has selected their payment method and address, and then clicked Autofill Checkout, their information will be automatically put into the appropriate checkout fields. From there, the checkout process continues as normal.

Logged In Customer Experience

If a customer has an account on your site and also has an existing Stripe Link account, they will see this Stripe Link logo in the email field of your checkout page:

By clicking that logo, the Stripe Link phone verification popup will trigger, just like in the Enrolled Stripe Link User Experience section above. From there, the checkout process works exactly the same as described in that section.

Customers with a Stripe Link account can manage their account via the Stripe Link website, where they can add and remove payment methods and addresses, learn more about the security of Stripe Link, and delete their Stripe Link account if they wish. The Stripe Link documentation has guidance on how to perform these tasks.

As of 10th November 2022, Stripe rolled out a change in their system that enables “Stripe Link” in their Payment Request Button implementation by default. You can turn this off in your Stripe dashboard by disabling the “Enable Link in the Payment Request Button” option.

  1. Go to https://dashboard.stripe.com/settings/link
  2. Disable the “Link in the Payment Request Button” option

Customer Usage

↑ Back to top

Checkout Page

↑ Back to top

Customers pay on the checkout page, and if the new checkout experience is enabled, the form uses the Stripe Payment Element, which provides a way to accept multiple payment methods in a single secure component.

Payment methods are dynamically displayed based on your customer’s currency and location, and are automatically translated.

If the new checkout experience is disabled, the form uses Stripe Elements, and different payment methods will be displayed as separate fixed components.

Using a new card, they see the option to enter credit card details, and tick the Save payment info to account box (this screenshot shows a disabled “separate credit card form” version).

For customers who have a saved card, they are presented with stored card options on file (if that option is enabled) or they can store a new one (screenshot showing the standard separate credit card form):

When express checkouts are enabled, customers can see the corresponding button on the product page, cart page or checkout page when using a supported device, browser, and payment method.

Express checkouts

↑ Back to top

Browse the gallery to view default layouts for express checkout buttons.

Saved Payment Methods

↑ Back to top

On the My Account page, customers can add, view, and remove payment methods from their account within the Payment Methods submenu.

These are the payment methods which can be saved:

  • Credit card
  • SEPA Direct Debit
  • Bancontact *
  • iDEAL *

Payment methods with * can only be saved if the new checkout experience is enabled.


↑ Back to top

What is SCA/PSD2

↑ Back to top

New requirements for authenticating online payments were introduced in Europe with the second Payment Services Directive (PSD2) as of September 2019. These requirements are referred to as Strong Customer Authentication (SCA) for most electronic payments.

Woo.com works with payment partners, of which Stripe.com is one, to ensure all payment gateway extensions are updated. We have a post that goes through this in more detail. Our Stripe extension implemented this new change as of version 4.2.0.

Failed Payments, Subscription Renewals and SCA

↑ Back to top

It’s possible that you, the store owner, may receive an “Order #XXX has Failed” email when a subscription is due to renew, or when you are attempting to manually process a subscription renewal (from the Edit Subscription > Subscription Actions > Process Renewal) flow.

Why? The buyer may need to log in to authenticate the payment due to Strong Customer Authentication (SCA) or other authentication requirements by the bank issuing their credit card. If this is the case, there will be corresponding failed order notes:

  • “Stripe charge awaiting authentication by user”
  • “Stripe SCA authentication failed.”
  • “This transaction requires authentication.”

At the same time you receive the “Order #XXXX has Failed” email, the buyer is sent a “Payment authorization needed for renewal“ email asking them to log back in and authorize the payment with an included link.

Once the buyer returns and authorizes payment, the renewal order changes from Failed to Processing, and the subscription becomes Active again.

Frequently Asked Question

↑ Back to top

The Stripe payment method is not showing.

↑ Back to top

In live mode, an SSL certificate must be installed on your site to use Stripe. In addition to SSL encryption, Stripe provides an extra JavaScript method to secure card data.

The express checkout button is not showing.

↑ Back to top

The customer must have a compatible device and payment method in a supported region, otherwise, the option is unavailable. See the express checkouts section above for more details. Using this official Apple.com page will help confirm if Apple Pay should be available.
For general support, please see the related pages for full details:

What type of Products can be purchased with express checkouts?

↑ Back to top

Both Simple and Variable products are supported.

Additionally, express checkouts currently have added compatibility with the following plugins:

Known incompatibilities (not limited to this list):

Does WooCommerce Subscriptions support using Apple Pay or another express checkout?

↑ Back to top

Yes, express checkouts are supported for Simple and Variable subscription products when using the WooCommerce Subscriptions extension, however, they don’t work with All Products for WooCommerce Subscriptions.

Express checkout for subscription products requires account username and password generation settings to be enabled in the Accounts & Privacy:

Product Add-Ons are not charged with express checkouts from a single product page.

↑ Back to top

Express checkouts do not support custom product fields such as Product Add-Ons from single product pages. To avoid orders being placed with no add-ons paid, you can disable express checkouts on single product pages.

Charge was successful despite Zip code and CVC mismatch.

↑ Back to top

As per Stripe, a card can be charged even if zip/postal code or CVC are incorrect. This happens when a customer’s bank approves the charge despite the CVC or ZIP code mismatch.

This is a result of the bank allowing this transaction. If allowed, you can enable Radar rules to reverse the charge when incorrect information is used. Stripe will then reverse the transaction but the value will show as pending on your bank until it is removed (timing varies depending on the bank). Please check Stripe.com documentation for more details.

PCI Compliance – what level does the Stripe extension cover?

↑ Back to top

Since the Stripe extension uses Stripe Elements, this covers Pre-filled SAQ A – please see the Stripe.com Documentation for more details under “Checkout/Elements”.

How can I test Stripe transactions?

↑ Back to top

When your site is configured using test keys, you will be able to use one of the cards listed under Test card numbers and tokens.

You can view these test transactions on your Stripe Dashboard by using the toggle button to View Test data on the left sidebar at Stripe Dashboard.

Please don’t forget to switch to Live mode when you’re ready to start accepting real payments. You can do that by unchecking the Test mode button at WooCommerce > Settings > Payments > Stripe, and copying the live credentials from Stripe Dashboard.

Note: Test cards only work in test mode, and not in live mode. Similarly, you cannot use a real card while your site is in test mode.

Can I test Apple Pay or Google Pay?

↑ Back to top

Yes, as long as the WooCommerce Stripe settings are in test mode, then you can use Apple Pay as normal with your real payment card but you won’t be charged.

Can I test paying with cards saved in the browser?

↑ Back to top

Yes, save a Stripe test card to your browser, and view a product page. Cards can be saved via these links:

  • Chrome – chrome://settings/payments
  • Edge – edge://settings/payments

Can a single customer have multiple subscriptions?

↑ Back to top

Using the WooCommerce Stripe extension and WooCommerce Subscriptions, you can have multiple subscriptions in your WooCommerce store. It should be noted that WC Subscriptions and the WC Stripe extension don’t use Stripe Billing or Plans, but instead manage subscriptions in WooCommerce and Stripe Customer and Card tokens for each recurring payment.

What version of the Stripe API does this extension use?

We try to use the latest possible and we’ll update it whenever we can. Note that you can usually update the API version on your Stripe dashboard without affecting our extension. For clarification, you can find which version we’re using in code on GitHub.

Does this extension support Stripe Connect?

↑ Back to top

No, not currently. We’re unable to integrate at this time.

Does Stripe use AVS – Address Verification System?

↑ Back to top

Yes! AVS is enabled in your Stripe account dashboard and will then work in WooCommerce. See Stripe’s documentation about Avoiding fraud and disputes.

Does Stripe Support Authorization and Capture?

↑ Back to top

There is an option to only authorize charges. If enabled, charges will need to be captured within seven days. Otherwise, the authorization expires and the order will be cancelled.

NOTE: If you’ve opted into the new checkout experience and enabled authorize and capture, customers will only be able to pay with cards. Other payment methods do not yet support authorize and capture using the new checkout experience.

When the Stripe payment gateway is set to authorize, orders will be set to on hold and adds a note like the one shown below. As the note says to capture the charge and take payment for the order you need to change the order status to Processing or Completed. You can also set the order to Cancelled to release the authorization.

Regarding refunding an authorized order, if refunding will cancel the authorization. If you need to partially refund the order then capture it first by setting the order status to Processing, then process your partial refund as usual.

Does Stripe allow refunds inside WooCommerce?

↑ Back to top

It does, please see more info on our WooCommerce Refunds documentation page on processing refunds.

Can I cancel a payment processing by updating the order status to “Cancelled”?

↑ Back to top

No. Once the payment starts, Stripe handles its processing, and the order is automatically updated. If you need to cancel the order, you’ll have to wait until it goes through and perform a refund.

Does Stripe Support ACH?

↑ Back to top

Not currently but Stripe are actively working on this. For more details, please add your votes to our featured request board.

Why aren’t my subscriptions displayed on the Stripe Dashboard?

↑ Back to top

WooCommerce Subscriptions does not use the Stripe Billing product. Instead, it uses a Stripe Customer and Card token and controls the processing of recurring payments.

This avoids any potential issues that could occur by trying to keep two copies of each subscription’s data in sync on two different systems (one in your store and one at Stripe). It also makes it possible for Stripe to support all of WooCommerce Subscriptions’ features, like payment date changes, rather than only those the Stripe Subscriptions allows.

Because of this, you will not see subscriptions created with WooCommerce in your Stripe Dashboard as Subscriptions. This does not mean recurring payments will not be processed. As long as your store is running correctly, recurring payments will be processed correctly and will show up in the Stripe Dashboard as Payments.

Do I need to enable “payments via saved cards” to process subscriptions?

↑ Back to top

The WooCommerce Subscriptions extension has its own mechanism for saving credit card details. When a customer buys a subscription product, Stripe will create a special payment token that will use the same credit card details for future subscription payments. Saving the same card again on the customer’s account is not necessary unless you want to allow the customer to reuse the card for other purchases in your store.

What Stripe payment methods support Subscriptions?

↑ Back to top

Subscription purchases can be made using the standard debit/credit card fields, express checkouts, and SEPA. No other payment methods currently support WooCommerce Subscriptions.

What is Level3 Data?

↑ Back to top

There are three levels of information that WooCommerce stores can send to Stripe about transactions in order for Stripe to pass that information to the card networks. Each level sends additional data which can be used to boost payment acceptance, reduce fraud, and decrease network costs of processing the transaction.

While Stripe requires merchants to always send at least level 1 data, like the charge date and amount, the WooCommerce Stripe extension will also send level 3 data when possible. When US Stripe accounts connect to the WooCommerce Stripe Platform through Stripe Connect, it is possible for the account to pass tier 3 data.

If manually entering Stripe API keys instead of using Stripe Connect, the Stripe extension will attempt to send the tier 3 data, and if that fails, resend the request without that data. When this happens, you will see 400 errors in your log, followed closely by a near identical log entry with a successful transaction.

Am I eligible for Stripe Instant Payouts?

↑ Back to top

Stripe offers Instant Payouts for immediate access to your funds. Stripe determines your Instant Payouts eligibility. You can check your eligibility by logging into the dashboard and checking for the “Pay out funds instantly” button on the Balance page.

Pricing: 1% of the payout amount

Eligibility: Merchants who have been processing for at least 6 months with Stripe may become eligible.

New Stripe users are not immediately eligible for Instant Payouts. If you’re not eligible for Instant Payouts, you can request access at instantpayouts@stripe.com.

Is Stripe’s Saved Cards feature supported?

↑ Back to top

Yes, you can read more about this in the automatic card updates documentation.

Why are there many incomplete payments on my dashboard?

↑ Back to top

When you enable New Checkout Experience, which uses Stripe’s Payment Element, WooCommerce Stripe will fire the payment_intent event every time a customer arrives on the checkout page. This will result into an “Incomplete” payment.

This is essential to comply with the SCA/PDA2 related regulation in order to implement the additional payments that are available in the New Check Experience such as iDeal, SEPA, Giropay, etc.

Therefore, it’s possible that when New Checkout Experience is enabled, a customer would initiate to checkout but then leaves the page and doesn’t complete the payment.

Please note that having incomplete payments doesn’t mean something is wrong. It’s just people that didn’t finish the checkout. These are also called abandoned carts.

To follow up with the customers after they abandon their carts and recover them, you can use AutomateWoo.


↑ Back to top

Root Relative URLs

↑ Back to top

There are known issues with the Root Relative URLs plugin. You will not be able to use this with Stripe.

I get an error when placing an order telling me to enable JavaScript.

↑ Back to top

This error may be caused by non-standard/poorly coded themes and JavaScript (JS) issues. Common issues include:

  1. Javascript errors on the checkout page – To view the error, open up your browser error console (in Chrome: View > developer > javascript console) and look for red errors. This should indicate where the error is located and lead you to the problem, i.e., loading jquery wrong
  2. Failing to load scripts – Stripe loads 2 JS files which it needs to function. If these are not loaded you will see errors. The most common reasons for not loading are:
    • A theme missing wp_head() or wp_footer() calls
    • Old overridden template files from WooCommerce inside your theme
    • Loading headers/footers in a non-standard way. WooCommerce uses get_header()’s get_header action to init the checkout and load scripts. If you are not using get_header() you either need to do so, or you need to trigger the get_header action manually using: do_action( ‘get_header ); in your custom header loader.

Apple Pay – I am getting this error “Error: Unable to copy domain association file to domain root”

↑ Back to top

That could mean your server configuration is not allowing files/paths to be written in that location. You would have to manually do this by following the step outlined here.

Apple Pay – I am getting this error “Error: Unable to verify domain – Bad Request”

↑ Back to top

Try manually doing this by following the step outlined here.

Apple Pay – Button only shows in private/incognito Safari window

↑ Back to top

First, perform a conflict test to rule out plugin or theme interference. If the problem persists, try removing the domain from the Stripe dashboard and re-adding it:

  1. Go to Apple Pay management in Stripe dashboard.
  2. Remove the existing Apple Pay domain.
  3. Add it again inside the dashboard.

Apple Pay – Button stuck at loading status when using with WP-Rocket

↑ Back to top

Try excluding WooCommerce cookies from WP Rocket settings in order for Apple Pay to work.

I’m getting an API error.

↑ Back to top

Ensure that you have entered the correct keys. If you are in Live Mode, you should have entered live keys (not test keys).

  • If you are using test mode, keys are prepended with sk_test and pk_test
  • If you are using live mode, keys are prepended with sk_live and pk_live

I’m seeing the error “Could not find payment information.”

↑ Back to top

This usually means that test mode is still enabled while using live keys, or that test keys are being used in live mode. For more details, please check the Stripe logs under WooCommerce > Status > Logs

Error Amount must be at least $0.50

↑ Back to top

Stripe, requires a minimum of goods value of at least $0.50. This minimum amount is to ensure that you don’t lose money on a charge because Stripe’s processing fee combines a small fixed amount and a percentage.

Code Snippets

↑ Back to top

Note: We are unable to provide support for customizations under our Support Policy. If you need to further customize a snippet, or extend its functionality, we highly recommend Codeable, or a Certified WooExpert.

How can I change the style of the Stripe Form?

↑ Back to top

The payment form is served in an iframe method on your site; this provides extra security and is required by Stripe. We have a separate documentation page for Styling Stripe Fields.

To view the iframe, right-click on the page and select Inspect > Element via the browser console (it is not otherwise visible when viewing the page source). If you target the iframe with CSS you will find it doesn’t work. What you need to do instead is target the wrapping div element. Here’s some sample CSS that can help you:

Custom CSS to change the style of the Stripe Elements form:

↑ Back to top
View on Github

Note: You can style the size, margin, padding, and background color of the boxes.

You can also add custom Stripe Elements styles using the wc_stripe_elements_styling filter. Here’s an example of how you can do that:

View on Github

How can I translate the placeholders text inside the credit card form?

↑ Back to top

The placeholders text inside the credit card form is automatically translated by Stripe and cannot be translated by adding new translation strings to your site. Here’s a screenshot showing which is the placeholder text:

Screenshot indicating the placeholder text seen in a Stripe credit card form

By default Stripe detects the locale of the browser and use that as the default. The available locales are ar, da, de, en, es, fi, fr, he, it, ja, lt, lv, ms, nb, nl, pl, pt, ru, sv, zh (see the Stripe documentation for more details).

You can change the locale used with the filter wc_stripe_elements_options. For example, to change it to use the site locale you can use this snippet:

To use the site’s locale as the language, you can instead use this line with the above snippet:

'locale' => get_locale(),

How can I change the payment icons used such as Visa, Mastercard…etc?

↑ Back to top

You can change it via a built-in hook. Here is an example showing the use of the hook changing out the Visa logo.

add_filter( 'wc_stripe_payment_icons', 'change_my_icons' );
function change_my_icons( $icons ) {
        // var_dump( $icons ); to show all possible icons to change.
    $icons['visa'] = '<img src="https://shipyouridea.com/wp-content/plugins/woocommerce/assets/images/icons/credit-cards/visa.svg" />';
    return $icons;

How can I change the width of the express checkout button?

↑ Back to top

You can target the button div using #wc-stripe-payment-request-button and the “OR” separator using #wc-stripe-payment-request-button-separator. See the Styling documentation for more details.

How can I change the position of the express checkout buttons?

↑ Back to top

You can use the following code snippet to move the express checkout buttons (Apple Pay/Google Pay). Please know that the code snippet may require further customization depending on where you’d like to put the button(s) on your page:

 * Move Payment Request Buttons button - Stripe

function move_woocommerce_stripe_payment_request_buttons() {
	$PaymentReqBtnInst = WC_Stripe_Payment_Request::instance();

	//Checkout Page
	remove_action( 'woocommerce_checkout_before_customer_details', array( $PaymentReqBtnInst, 'display_payment_request_button_separator_html' ), 2 );
	remove_action( 'woocommerce_checkout_before_customer_details', array( $PaymentReqBtnInst, 'display_payment_request_button_html' ), 1 );
	// Move to any location: https://www.tychesoftwares.com/woocommerce-checkout-page-hooks-visual-guide-with-code-snippets/
	add_action( 'woocommerce_review_order_before_payment', array( $PaymentReqBtnInst, 'display_payment_request_button_html' ), 1 );
	add_action( 'woocommerce_review_order_before_payment', array( $PaymentReqBtnInst, 'display_payment_request_button_separator_html' ), 2 );


add_action( 'init', 'move_woocommerce_stripe_payment_request_buttons', 1 );

Why isn’t the shipping cost updating in the payment request modal when WooCommerce Advanced Shipping Packages is used?

↑ Back to top

When using the WooCommerce Advanced Shipping Packages alongside Google Pay/Apple Pay/Link Pay, shipping costs aren’t always updated in the payment request modal when changing the chosen shipping method within the modal. This issue is being tracked on a larger scale, but can be fixed in the meantime with the following snippet:

add_filter( 'woocommerce_cart_shipping_packages', function( $packages ) {
    return array_values( $packages );
}, 100 );

Note: We are unable to provide support for customizations under our Support Policy. If you need to further customize a snippet, or extend its functionality, we highly recommend Codeable, or a Certified WooExpert.

How can I send the ordered products’ data to Stripe?

↑ Back to top

You can use the following code snippet to send the customer’s ordered products’ data to Stripe as metadata:

Add Stripe metadata along with WooCommerce purchase
@param $metadata
@param $order
@param $source
@return mixed
function customstripepayment_metadata( $metadata, $order, $source ) {

 * Get order data
$order_data = $order->get_data();
$metadata[ __( 'Billing Company', 'woocommerce-gateway-stripe' ) ] = sanitize_text_field( $order_data['billing']['company'] );
$metadata[ __( 'Customer Name', 'woocommerce-gateway-stripe' ) ] = sanitize_text_field( $order_data['billing']['first_name'] . ' ' . $order_data['billing']['last_name'] );
$metadata[ __( 'Customer Phone', 'woocommerce-gateway-stripe' ) ] = sanitize_text_field( $order_data['billing']['phone'] );

 * List products purchased
$count = 1;
foreach( $order->get_items() as $item_id => $line_item ){
    $product = $line_item->get_product();
    $product_name = $product->get_name();
    $item_quantity = $line_item->get_quantity();
    $item_total = $line_item->get_total();
    $metadata['Line Item '.$count] = 'Product name: '.$product_name.' | Quantity: '.$item_quantity.' | Item total: '. number_format( $item_total, 2 );
    $count += 1;

return $metadata;
add_filter( 'wc_stripe_payment_metadata', 'customstripepayment_metadata', 10, 3 );

The product details are added to the Metadata section as shown in the screenshot below:

Hooks (Actions/Filters)

↑ Back to top

This section describes all hooks available to you if you need to manipulate how Stripe functions. This is more advanced so read over the Hooks page of the WordPress.org Codex if unfamiliar with how hooks work within WordPress.

Hook name (parameters)

Action Hooks

  • wc_gateway_stripe_process_response ($stripe_response, $order) – The response we get back after calling a charge request to Stripe.
  • woocommerce_credit_card_form_start ($gateway_id) – Before showing the credit card form.
  • woocommerce_credit_card_form_end ($gateway_id) – After showing the credit card form.
  • wc_gateway_stripe_process_payment ($stripe_response, $order) – The response we get back after calling a charge request to Stripe but before processing the actual response.
  • wc_gateway_stripe_process_payment_error ($error, $order) – Called when an error occurs during the process payment event.
  • woocommerce_stripe_add_customer ($args, $response) – Called after creating a Stripe customer.
  • woocommerce_stripe_add_source ($stripe_customer_id, $wc_token, $response, $source_id) – Called after creating/attaching a source to a customer.
  • wc_stripe_delete_source ($stripe_customer_id, $response) – Called after deleting a source from customer.
  • wc_stripe_set_default_source ($stripe_customer_id, $response) – Called after setting a default source to a customer.
  • wc_gateway_stripe_process_redirect_payment ($response, $order) – Called after a redirect payment process.
  • wc_gateway_stripe_process_redirect_payment_error ($error, $order) – Called after a failed redirect payment process.
  • woocommerce_stripe_process_manual_capture ($order, $result) – Called after a manual capture of a charge within admin order.
  • woocommerce_stripe_process_manual_cancel ($order) – Called after a cancel of the order that is authorized and not yet captured.
  • wc_gateway_stripe_process_webhook_payment ($response, $order) – Called after a webhook payment process.
  • wc_gateway_stripe_process_webhook_payment_error ($order, $notification, *$e) – Called after a webhook payment process error.

Filter Hooks

  • wc_stripe_save_to_account_text ($text) – Text that shows to customers next to the save payment information checkbox.
  • wc_stripe_payment_icons ($icons_array) – Icons that show next to each payment method.
  • wc_stripe_send_stripe_receipt *boolean* – Whether to send a receipt via Stripe.
  • wc_stripe_payment_metadata ($metadata, $order, $prepared_source) – Metadata that gets passed during an express checkout.
  • wc_stripe_generate_payment_request ($post_data, $order, $prepared_source) – Post data that gets passed during an express checkout.
  • wc_stripe_owner_details ($details, $order) – The owner details of an order.
  • wc_stripe_force_save_source ($force_save_source, $customer) – Override force save customer.
  • wc_stripe_use_default_customer_source ($use_default) – Whether to use default customer source if source not found.
  • wc_stripe_refund_request ($request, $order) – Request parameters when refund is requested.
  • wc_stripe_PAYMENT_METHOD_settings ($settings)</strong – Admin settings for payment method.
  • wc_stripe_description ($description, $payment_method_id) – Override the description of credit card payments.
  • wc_stripe_display_save_payment_method_checkbox *boolean* – Whether to show the save payment method checkbox.
  • wc_stripe_sepa_mandate_notification ($method) – The method to use to inform customer of the SEPA mandate.
  • wc_stripe_allow_prepaid_card *boolean* – Whether to allow prepaid credit card to be used.
  • wc_stripe_elements_options – Additional options to manipulate Stripe elements.
  • wc_stripe_elements_styling – Additional options to manipulate the Stripe elements styling.
  • wc_stripe_elements_classes – Additional options to add classes to the Stripe elements.
  • wc_stripe_params ($params) – Localized JS key/value pair.
  • wc_stripe_payment_request_params ($params) – Localized JS key/value pair.
  • wc_stripe_hide_display_order_fee ($bool, $order_id) – Whether to hide the display order fee in orders view.
  • wc_stripe_hide_display_order_payout ($bool, $order_id) – Whether to hide the display order payout in orders view.
  • woocommerce_stripe_request_headers ($headers_args) – Headers parameters for cURL requests.
  • wc_stripe_idempotency_key ($key_string, $request) – The string for the idempotency key on request.
  • woocommerce_stripe_request_body ($request, $api) – The request body to pass when doing a request
  • wc_stripe_customer_metadata ($metadata, $user) – The meta data used when creating a customer.
  • wc_stripe_create_customer_args ($args) – The arguments used when creating a customer.
  • wc_stripe_localized_messages ($localized_messages) – The messages used from Stripe responses.
  • wc_stripe_logging ($bool, $message) – Whether to log a specific message when logging is enabled.
  • wc_stripe_webhook_review_change_order_status ($bool, $order, $notification) – Whether to change the order status when order review event happens.
  • wc_stripe_PAYMENT_METHOD_supported_currencies ($currencies) – The supported currencies for that specific payment method.
  • wc_stripe_payment_request_total_label_suffix ($suffix) – Label suffix to use when express checkout is engaged.
  • wc_stripe_payment_request_total_label ($label) – The total label to use when express checkout is engaged.
  • wc_stripe_payment_request_supported_types ($types) – The product types express checkout supports.
  • wc_stripe_hide_payment_request_on_product_page *boolean* – Whether to hide express checkout button on product detail page.
  • wc_stripe_show_payment_request_on_checkout *boolean* – Whether to show express checkout button on checkout page.
  • wc_stripe_payment_request_hide_itemization *boolean* – Whether to show itemizations when using express checkouts.
  • wc_stripe_save_to_subs_text ($text) – Text that shows to customers next to the checkbox to update all active subscriptions with the new saved card.
  • wc_stripe_save_to_subs_checked *boolean* – Whether to have the checkbox to update all active subscriptions with the new saved card be checked by default.
  • wc_stripe_update_subs_payment_method_card_statuses ($statuses) – Which subscriptions will have their payment method updated if the customer chose that option when adding a new payment method. By default, only the “active” subscriptions will be updated.
  • wc_stripe_show_payment_request_on_cart – Manage the display of payment request buttons in cart

New checkout experience (early access)

↑ Back to top

In WooCommerce Stripe version 5.6.0+, we introduced a new checkout experience allowing shoppers to choose their own preferred payment method.

An example for credit cards, giropay, and SEPA in the new checkout block experience

How to activate the new checkout experience?

↑ Back to top
  1. Go to: WooCommerce > Settings > Payments > Stripe.
  2. Select the Settings tab.
  3. Scroll down to the bottom and click on Advanced settings to display the settings.
  4. Tick the checkbox for New checkout experience and click on Save changes.

Payments accepted on checkout (Early access)

↑ Back to top

After enabling the “New checkout experience” you can view the available payment methods. To enable or disable payment methods, toggle the corresponding checkboxes and click on “Save changes” at the bottom of the page.

This section shows a list of available payment methods you can use for your checkout. You may need to provide more information to Stripe before enabling them. You can click on the Get more payment methods button to check your Stripe payment settings for their eligibility.

Requirements for non-Credit Card payment methods to show at checkout

↑ Back to top

Credit Card is the only payment method that allows “manual capture”. For other payment methods, you will need to disable the “capture later” checkbox.

Does this new checkout experience work with the WooCommerce Pre-Orders plugin?

↑ Back to top

Currently, the new checkout experience does not work with the WooCommerce Pre-Orders plugin.