Docs & Support

Learn about all the Formidable features and get support from our amazing customer success team.

Add-onseCommerce
Stripe Forms

Stripe Forms

Integrate your WordPress forms with Stripe to process your one-time and recurring payments. Stripe forms enhance the user experience by allowing users to stay on your site while securely making a payment.

As of Formidable Stripe version 3.0, the add-on has been updated to accept payments with Link by Stripe and additional payment methods. Stripe Lite always shows them. Learn more on how to set up Stripe Link.

In order to use Stripe forms, you will need an SSL connection. However, you can use an unencrypted connection for testing purposes. In live mode, with Stripe Lite, a form on a page that isn't loaded over HTTPS shows the error "Stripe payments require HTTPS. Please use a secure URL or contact the site administrator." Stripe payment forms support 3D Secure payments with Strong Customer Authentication.

Download and install

Stripe Lite is built into Formidable Forms, including the free Formidable Forms Lite. The Stripe add-on adds more features and needs Formidable Forms Pro. To access this add-on, ensure you have the Business license or above.
    1. If you haven't already done so, install and activate Formidable Forms.
    2. (Optional) To use the Stripe add-on, go to Formidable → Add-Ons and toggle on the Stripe Pro add-on. The Stripe card (without "Pro") is Stripe Lite, which is built into Formidable Forms and always on. Formidable Forms Lite alone allows one Stripe action per form. Formidable Forms Pro lets you add more, but to take payments through more than one Stripe action on a form, use the Stripe Pro add-on.
      Stripe - Turn on the Stripe Pro add-on
    3. Once the plugin has been activated, go to your WordPress Dashboard and look for the Formidable menu.
Note: If you use Stripe with Formidable Forms Lite, Expired, Basic, or Plus license, a fee of 3% will be charged in addition to the Stripe fees. Stripe handles all of this, and no additional steps are required from the customer. To avoid paying the extra 3% charge, upgrade to Formidable Forms Business or Elite.

Formidable Forms makes advanced site building simple. Launch forms, directories, dashboards, and custom WordPress apps faster than ever before.

Set up Stripe API integration

Once you have successfully activated Formidable Forms, you need to connect it with your Stripe account to start accepting payments. To do this, follow the steps below.

  1. Go to Formidable → Global Settings → Payments (1), click the Stripe button (2), and click the Connect to Stripe button (3). Keep in mind that this will need to be done once for testing purposes and once for when the system goes live.
    Global Settings with numbered circles on Payments (1), the Stripe button (2) and the Connect to Stripe button (3)

    The Process One-time Payments setting needs the Stripe add-on. Stripe Lite doesn't show it.
  2. To authorize the connection between your forms and Stripe, you will be redirected to connect.stripe.com, where you can log in and select your Stripe account.
    Stripe Get Connected
  3. After completing the required steps in the Stripe wizard, you will automatically be redirected back to your site.
  4. To confirm a successful connection, look for a green checkmark with the text Connected next to the Connection Status. It shows beside the mode you connected (TEST or LIVE).
    Stripe Connection Status

    If it says Not connected! instead, Stripe still needs details about your account. Click Finish Stripe Setup and complete the steps in Stripe.
  5. Now you are ready to start collecting secure payments. All the webhooks are covered, and need no additional setup.
Formidable Forms connects to Stripe only with Stripe Connect. Since version 3.2, the Stripe add-on uses Stripe Connect in place of API keys.

Set up a Stripe form to collect payments

Once you have connected your Stripe account, you can set up a form to take Stripe payments. Follow the directions below to collect Stripe payments with a Formidable form.

  1. Using pricing fields. When using pricing fields in your form, use the Total field type and set your item options as Product field types. Product and Total fields are included in Formidable Forms Lite.

    Pricing Fields - Total field

    Using other field types may result in inaccurate total calculations. For instance, if you are selling shirts, your product options can include size variations with the corresponding prices.

    Pricing Fields - Product field with size options and prices

    Using standard fields. When using standard fields in your form, such as a dropdown, radio, or checkbox fields for item options, you must use a single text or number field type as your Total field. Field calculations need Formidable Forms Pro. Enable field calculations to ensure the total amount is calculated correctly. Insert the field IDs or keys of the dropdown, radio, or checkbox field in the Default Value (Calculation) field to calculate the total amount.
  2. Edit the form and add a Payment field. If the form doesn't have one, a Payment field is added for you when you save the Stripe action.
    Stripe Forms Action - Payment Field
  3. Go to your form Settings → Actions & Notifications. In the E-Commerce tab, hover over the Stripe card and click Add. You can also search for Stripe in the Search Actions box.
    Stripe - Add button on the Stripe card in Actions & Notifications
  4. Give your Payment action an Action Name for easy reference. This name will only be seen on the back-end.
    Stripe action with numbered circles 4 to 6 on Action Name, Description and Amount
  5. Give your Payment action a Description to attach to the payment. This information will be sent to Stripe along with the payment. You can either type in a description, or use a field from your form to set the description dynamically. To use a field for the description, click the icon in the Description box and then select your field in the dropdown list. This will insert a value like [3130] for your Description setting.
  6. Set the Amount for the payment. You can either type in an amount, or use a field from your form to calculate the amount. To use a field for the amount, click the icon in the amount box and then click your field in the dropdown list. This will insert a value like [3138] for your Amount setting.
    With Formidable Forms Pro, it may be helpful to use field calculations to calculate a total in your form. Note: If you are using a field that uses separate values in the Amount field, insert [x show=value] instead of [x], where x is the field ID.
For extra security, calculate the payment amount in a Virtual Field (Formidable Forms Pro) so the total is never exposed in the browser. The server-side value can then be referenced in the Amount setting of your Stripe action.
  • Your Payment Type can be one-time or recurring. With the Stripe add-on, a form can take payments through several Stripe actions. Each submission can run one one-time action and any number of recurring actions, such as a setup fee and a subscription. To allow either a one-time payment or recurring subscription, add conditional logic to both actions so they only trigger at the times you want. If you have chosen a recurring payment type, you will see the following options:
    Payment Type set to Recurring, with an arrow on the Recurring Payment Settings section it opens

Without the Stripe add-on (Stripe Lite), use one Stripe action per form. With Formidable Forms Pro, you can add conditional logic to that action to choose when it runs. For more than one Stripe action, use the Stripe add-on. Each submission can run one one-time Stripe action and any number of recurring Stripe actions. If a form has several one-time actions, add conditional logic so only one runs on each submission. Turn off Enable Stripe link and additional payment methods in every Stripe action, including actions created before you turned on the add-on. This toggle works in only one Stripe action per form. Learn more about the difference between Stripe Lite and add-on.
  • Decide whether to Capture the Payment later. You can authorize the payment now, and manually collect it later. Or finalize and collect the payment when the entry is submitted. This setting is for one-time payments only. Capturing a payment later needs the Stripe add-on.
  • Set your preferred currency for Stripe. By default, this will be set to the Global currency.
  • With the Stripe add-on, choose whether to turn on Enable Stripe link and additional payment methods. It's off in a new action. When it's on, the form shows Stripe's payment field with the payment methods turned on in your Stripe Dashboard. Examples are Apple Pay, Google Pay, and Link by Stripe. When it's off, the form shows only Stripe's card field. Stripe Lite always shows the payment methods, so it has no toggle. As soon as you turn on the toggle, a Layout setting shows below it. Use it to show the payment methods as Tabs or Accordion. In Stripe Lite, the Layout setting is always there.
    Enable Stripe link in form action

    Learn more about the different Stripe payment gateways.
  • The Customer Information fields can be associated with field values in your form.
    Stripe Customer Info

    To pass a custom address to Stripe, add an Address field to your form. Note: If the form has no Address field, Stripe detects the user's country automatically, and it can't be customized.
    For one-time payments, the billing name and address are also sent to Stripe as the shipping details when both are filled in.
  • You can also change field values automatically when a payment is completed, fails, or is refunded. Anything you set here is also triggered with every payment in a subscription. After Payment settings need the Stripe add-on.
    WordPress Stripe Forms After Payment

    For example, if you're creating posts and only want the post published when it's paid, then use the After Payment settings. When the Payment is Completed, set your post status field to "publish". When Failed, set it back to "draft."
  • After you save the Stripe form action, a hidden Payment Method field is added to your form. Stripe Lite doesn't use it. With the Stripe add-on, this field is required. Do not remove it, or payments made with the add-on are not sent to Stripe for processing.
    Hidden Payment Method field in the form builder with the Stripe add-on
Notes:
      • With Strong Customer Authentication (SCA) implementation, the payment field is not visible when editing an entry.
      • When the form is submitted, an entry is created. If the payment fails, the entry is deleted immediately after.
      • If you have set up your emails to trigger when an entry is created, it will still be sent even if the payment fails. If you only want to send the emails for completed payments, change the trigger to Successful Payment.

Trigger Actions after payment

There are several actions that can be triggered after a payment is complete or fails. Email notifications, Twilio (text messages), Mailchimp, and Send API Data actions work this way. With the Stripe add-on, Register User actions do too. In each of these actions, the options are in the Trigger this action when dropdown. To send an email after the payment is complete, open the dropdown, clear Entry is created, and check Successful Payment.

When a one-time payment fails initially, only the entry created trigger is activated. The "Failed Payment" event will not trigger in this case, only for a recurring payment that fails.

With recurring payments, each payment will trigger one of these actions ("Successful Payment" or "Failed Payment"). The "Failed Payment" event occurs when a payment that is part of a recurring subscription fails.

Run a test payment

It is often helpful to run a test payment to ensure that your form and Stripe function well. By enabling test mode, you can simulate transactions without impacting actual payments. Follow the steps below to run a test payment.

  1. Go to Formidable → Global Settings → Payments. Then click the Stripe button.
  2. Select the option to Use the Stripe test mode. Make sure you have connected to your Stripe account for the Test connection. Click Update.
    Test Mode with Use the Stripe test mode checked and circled, above the TEST Connected status
  3. Open the page where your Stripe form is published.
  4. Submit a test entry. Use 4242424242424242 for the credit card number, any three digits for the CVC, and any future date. Enter at least the minimum amount for your currency, such as $0.50 for US dollars.
  5. To check a payment, go to Formidable → Payments and click View under its Receipt ID. A test payment shows Test as its Mode.
    Stripe Payments Mode
  6. That's it! When it's configured well and there are no errors, the form is submitted normally.

If you want to test a variety of situations, see Stripe's testing documentation.

Save payment status in a field

— Premium Feature —

This needs the Stripe add-on, which is available on the Business and Elite licenses.

To save the status of a payment in a field in your form, follow these instructions.

  1. Go into a form that has a Stripe action included.
  2. Add a hidden field and name it Status.
  3. Go into your form's Settings → Actions & Notifications and open the Stripe form action.
  4. Scroll down to the After Payment section. Click the Add button.
    Stripe action After Payment section with an arrow on Add
  5. In the 'Payment Status' column, select Completed. In the 'Field' column, select your Status field. In the Value column, type Completed. For each other status, click the ⊕ icon at the end of the row. Each new row starts with Completed, — Select Field —, and an empty value. In each new row, pick the status, your Status field, and the value: Failed, Refunded, Canceled, and Canceled and Expired. Canceled is for a subscription that is canceled but stays active until the end of its paid period. Canceled and Expired is for a subscription that has ended.
    Stripe action After Payment rows for Completed, Failed, Refunded, Canceled, and Canceled and Expired, each saving its status in a field
  6. Click Update to save your changes. When a payment is completed, the Status field changes to Completed. Formidable gets payment updates from Stripe through Stripe Connect. If the payment status doesn't update, check that Stripe is connected in the mode your site uses (test or live). If it is, see Stripe connections are not working.

Add sales tax to total

— Premium Feature —

Field calculations are available on the Basic, Plus, Business, and Elite licenses.

You can calculate sales tax by following our guide to calculating sales tax. Then you can add it to the total amount collected in your Stripe payment action.

Conditionally collect payments

— Premium Feature —

This needs the Stripe add-on, which is available on the Business and Elite licenses.

To set up different payment options in your form using Stripe, you'll need Conditional Logic. Suppose you have three payment plans in your form: Basic, Pro, and Enterprise.

A form with more than one Stripe action needs the Stripe add-on, with Enable Stripe link and additional payment methods turned off in every Stripe action. This toggle works in only one Stripe action per form. Also, set the conditional logic so only one one-time action runs on each submission.
  1. In your form, add a dropdown, radio, or checkboxes field called Payment Plan. For this example, add the options: Basic, Pro, and Enterprise. When your users fill out the form, they select the payment plan that they want to avail.
  2. Go to your form Settings → Actions & Notifications. In the E-Commerce tab, hover over the Stripe card and click Add. You can also search for Stripe in the Search Actions box.
    Stripe - Add button on the Stripe card in Actions & Notifications
  3. Set the Action name to Basic Plan. Type the Basic plan price in the Amount box and select your preferred payment type, if it is a one-time payment or recurring.
    Stripe action named Basic Plan with the Payment Type dropdown open: One-time Payment and Recurring

    Leave the Enable Stripe link and additional payment methods toggle off. It's below Capture Payment.
    Enable Stripe link and additional payment methods toggle turned off
  4. Click Add Conditional Logic and add the following.

    • Do this action if any of the following match: Payment Plan equals Basic. Select Basic in the value dropdown, which lists your field's options.


    Stripe action conditional logic: Payment Plan equals Basic

  5. Click the Update button to save the form action.
  6. Now, users who selected the Basic payment plan will only be charged for the amount relevant to their chosen payment option.
  7. Repeat steps 2-5 to create the form actions for the other payment plans.
  8. Make sure the one-time payment is processed: go to Formidable → Global Settings → Payments, click the Stripe button, and select After entry is created.
    Stripe Settings, Process One-time Payments, with an arrow on After entry is created
  9. Click the Update button to save the Stripe settings.

Need to conditionally collect payments through Stripe and PayPal in the same form? See how to add optional online payment processing to WordPress Forms.

Set up a recurring payment

If you want to set up a Stripe form action to take recurring payments, follow the steps below:

  1. Set up your WordPress form to take Stripe payments and set an Amount for the payment.
    Stripe Setup Recurring payment
  2. Under Payment type, select 'Recurring'.
  3. In the Repeat section, select how often the payment will recur. Stripe allows up to 3 years between payments (36 months or 156 weeks).
  4. To cancel a subscription after a specified number of payments, you can set the Recurring Payment Limit by entering a number or selecting a field. It will allow you to choose the duration of the subscription before it gets automatically canceled.
  5. You may include a trial period before the actual subscription begins. To include a trial period, enter the number of days in the Trial Period box.
  6. Click Update. When a user submits the form, Stripe will automatically bill the user at intervals determined by your 'Repeat' setting.

Set up multiple types of payment

— Premium Feature —

This needs the Stripe add-on, which is available on the Business and Elite licenses.

With the Stripe add-on, one submission can run one one-time Stripe action and any number of recurring Stripe actions. Here's an example with a one-time (non-recurring) payment, a recurring payment with a trial, and a recurring payment. All of these form actions trigger upon form submission.

Turn off Enable Stripe link and additional payment methods in each of the 3 Stripe actions. This toggle works in only one Stripe action per form.
  1. Go to your form Settings → Actions & Notifications. In the E-Commerce tab, hover over the Stripe card and click Add. You can also search for Stripe in the Search Actions box.
    Stripe - Add button on the Stripe card in Actions & Notifications
  2. In the Action Name box, insert 'Collect a Payment'. Each new action's header shows "Collect a Payment" until you click Update, so name every action to tell them apart.
  3. In the Amount box, type in the amount of the non-recurring payment or use a field from your form to calculate the amount.
    Stripe form Non-Recurring Amount
  4. In the Payment Type, select 'One-time Payment'.
  5. In Actions & Notifications, hover over the Stripe card again and click Add to add another Stripe form action.
    Stripe - Add button on the Stripe card in Actions & Notifications
  6. In the Action Name box, insert 'Collect a Payment with trial'.
  7. In the Amount box, type in the amount of the recurring payment or use a field from your form to calculate the amount.
    Stripe form Amount Recurring
  8. In the Payment Type, select 'Recurring'.
  9. In the Repeat section, select how often the recurring payment will take place. In the Trial Period box, enter the number of trial days.
    Stripe form Recurring Trial Payment
  10. In Actions & Notifications, hover over the Stripe card again and click Add to add another Stripe form action.
    Stripe - Add button on the Stripe card in Actions & Notifications
  11. In the Action Name box, insert 'Collect a Recurring Payment'.
  12. In the Amount box, type in the amount of the recurring payment or use a field from your form to calculate the amount.
    Stripe form Amount Recurring
  13. In the Payment Type, select 'Recurring'.
  14. In the Repeat section, select how often the recurring payment will take place.
    Stripe form Payment Type Recurring
  15. Click Update. When the user submits the form, all form actions will be triggered for each type of payment.

Conditionally allow credit card payments

— Premium Feature —

This needs Formidable Forms Pro and the Stripe add-on, which are available on the Business and Elite licenses.

To conditionally allow credit card payments in your Stripe form, you must add conditional logic to your payment field and the Stripe form action. Suppose you have two payment options in your form: Pay with a credit card and Pay with cash.

    1. In your form, add a dropdown or radio field called Payment Option. For this example, add the options: Pay with credit card and Pay with cash.
      Conditionally Collect Card Payments Credit Card Options in Stripe
    2. Add a Payment field to your form.
      Stripe Payment field in form builder

      Then, in the field's Field Options, open the Conditional Logic section. Next, turn on Enable Conditional Logic. Set it to show the field when Payment Option equals Pay with credit card.
      Add conditional logic to Payment field in Stripe form
    3. Go to your form Settings → Actions & Notifications. In the E-Commerce tab, hover over the Stripe card and click Add. You can also search for Stripe in the Search Actions box.
      Stripe - Add button on the Stripe card in Actions & Notifications
    4. Set the Action Name to Pay With Credit Card. Enter the amount and select your preferred payment type, whether it is one-time or recurring.
      Stripe Conditionally Collect Card Payments Form action
    5. Scroll down the Stripe form action and add conditional logic. Set it up to trigger when the Payment Option equals Pay with credit card.
      Stripe Conditionally Collect Card Payments Form action Logic
    6. Click the Update button to save the form action. A hidden Payment Method field is added to your form. With the Stripe add-on, this field is required. Don't remove it, or the add-on doesn't send the payments to Stripe for processing.

Users can select which payment option they want to use when filling out the form. If they decide to pay with a credit card, they will only be charged for the amount configured in the Stripe form action.

Link by Stripe (Stripe Link) is a secure and fast way to collect payments with the one-click checkout process. It lets users save their encrypted payment details, so they don't type them again in future transactions. Learn more about Stripe Link.

Link is one of the payment methods in Stripe's payment field. It isn't the same as the Enable Stripe link and additional payment methods toggle in the Stripe action.

That toggle turns on Stripe's payment field with all the payment methods turned on in your Stripe Dashboard, and Link is one of them. You turn Link itself on or off in your Stripe Dashboard.

Enable Stripe link and additional payment methods works in only one Stripe action per form. If a form has more than one Stripe action, turn it off in every Stripe action.
  1. To get started, go to your Stripe Dashboard → Settings → Payments → Payment Methods. Select your platform from the dropdown on the upper left corner. Scroll down to the Wallets section and click the Turn on button for the Link payment method.
    Stripe Link - Enable Payment Method
  2. If you haven’t yet, set up your Stripe form to collect payments.
  3. With the Stripe add-on, turn on Enable Stripe link and additional payment methods in the Stripe form action. Stripe Lite always shows Stripe's payment field, so skip this step.
    Enable Stripe link in form action
  4. Upon checkout, user accounts are authenticated by Stripe link using their email address.
    • Collect email at payment. If the Email setting under Customer Information in the Stripe action is empty, Stripe adds its own Email field right above the payment field. If your form also has an Email field, the form then shows two Email fields.
      Stripe Link - Collect Email At Payment
    • Collect email before payment. If the Email setting under Customer Information is set to your form's Email field, Stripe's Link email field replaces that field in the same place. When the user enters their email address, it starts the Link sign-in.
      Stripe Link - Collect Email Before Payment
  5. When an existing user completes the payment form again, Stripe Link will verify their identity by prompting a one-time code.
    Stripe Link - Prompt Code
Notes: There are a few flows with Stripe Link.
  • You can use Stripe Link without signing up for one-time payments. All you need is to fill in all of the fields.
  • If the email address has no Link account yet, Stripe shows an optional "Save my information for faster checkout" box in the payment field.
  • If you have set up Stripe Link already, it will prompt you for your 6-digit code when you enter your email address (directly underneath the email address input). Stripe sends it by text message or email. During testing (though there will be no text message), you can use any code. See note about error codes.

You can use any valid email and any code during testing, except for a few codes that trigger errors. Note that the verification code will not actually get sent to your phone during test mode.

  • Error 000001: Code invalid
  • Error 000002: Code expired
  • Error 000003: Max attempts exceeded

To test Link with 3D Secure, use Stripe's 3D Secure test card number 4000000000003220.

Link is turned on and off in your Stripe Dashboard, not in Formidable. Its setting there decides whether the Link button shows in Stripe's single-line card field. It also decides whether the "Save my information for faster checkout" option shows in Stripe's payment field.

To turn off Link, or choose where it shows:

  1. Go to Settings → Payments → Payment Methods in the Stripe Dashboard and find the Link payment method.
  2. To turn off Link everywhere, click the Turn off button. To keep Link on and choose where it shows, skip this step.
    Turn off the Stripe link
  3. To choose where Link shows, click the menu icon and select Create custom rules.
    Create custom rules in Stripe Link
  4. Set custom rules for the Stripe Link by selecting which integration to use.
    Set custom rules in Stripe Link
    • Toggle off the Card element to turn off the Link button in the single-line credit card field. Stripe offers Link in this card field only to some accounts.
      Link button in the single-line credit card field

      The form uses this card field only with the Stripe add-on, when Enable Stripe link and additional payment methods is turned off in the Stripe action.
      Enable Stripe link toggle turned off in the Stripe action
    • Toggle off the Payment element to turn off the "Save my information for faster checkout" option in Stripe's payment field. The form uses this payment field in Stripe Lite, and in the Stripe add-on when Enable Stripe link and additional payment methods is turned on. The other payment methods stay.
      Stripe's payment field with Card and US bank account tabs and no Save my information for faster checkout option
  5. Then, select the Save Rules button to apply the changes. After disabling the Link, your website may take a few minutes to reflect this change.

Stripe's fields use your form styling automatically.

Stripe's payment field is used in Stripe Lite, and in the Stripe add-on with Enable Stripe link and additional payment methods turned on. With this field, the submit button is disabled until the email and payment details are complete. When it is disabled, it appears at half opacity.

Other considerations

Stripe payment methods

Start accepting credit and debit card payments (Visa, MasterCard, American Express) using your Stripe form. It also takes digital wallets, such as Apple Pay, Google Pay, and Cash App Pay. Bank debits and bank redirects work too, such as ACH Direct Debit, SEPA Direct Debit, and iDEAL. Click here for additional information on implementing these payment options.

These payment methods show in Stripe's payment field. To offer them in a form:

  1. In your Stripe Dashboard, go to Settings → Payments → Payment Methods and turn on each payment method you want to accept.
  2. With the Stripe add-on, turn on Enable Stripe link and additional payment methods in the Stripe action of your form. Stripe Lite always shows Stripe's payment field, so it has no toggle.
    Enable Stripe link in form action
  3. (Optional) Choose a Layout to show the payment methods as Tabs or Accordion. With the Stripe add-on, this setting shows as soon as you turn on the toggle.
  4. Click Update to save your changes.

With the toggle off, the form shows only Stripe's card field, so users pay by card.

Notes:
  • Certain payment methods only allow one-time payments and not subscriptions. This includes buy now pay later methods, bank redirects like iDEAL and Bancontact, as well as some wallets like Alipay. Refer to the Stripe documentation to determine which payment methods support subscriptions or recurring payments.
  • If you filter payment methods with the frm_stripe_payment_method_types hook, include the "card" and "link" types, or they are left out.
  • Stripe shows some payment methods, such as Apple Pay, only on a domain registered with Stripe. Learn more about registering your domain.

Processing payments

There is a processing intent status that some payment methods will use, including ACH Direct Debit (US Bank Account).

When a form is submitted with a processing payment status, it will include a Stripe processing message right after the submit message.
Success message followed by the Stripe processing message

The additional message can be customized in the Formidable → Global Settings → Message Defaults.
Stripe Forms Action - Payment Processing message

Set up a Stripe form to send emails

After setting up a form to collect Stripe payments, you can select the Successful Payment trigger to send an email once the payment has been completed. Emails will only be sent once Stripe confirms that the payment has been successfully processed.
Stripe Email Successful Payment
Here are some of the other payment triggers:

  • Failed Payment. Set an automated email notification in case of a failed payment.
  • Processing Payment. Set an automated email notification when payment is submitted to Stripe but is not completed.
  • Canceled Subscription. Set an automated email notification when a recurring payment is canceled.
  • Subscription Canceled and Expired. Set an automated email notification when a recurring payment has been canceled and expired.
  • Refunded Payment. Set an automated email notification on a refund.

Resend emails on complete payment

— Premium Feature —

This needs the Stripe add-on, which is available on the Business and Elite licenses.

If you have set up an email to trigger after collecting a Stripe form payment, you can resend an email by following the steps below:

    1. Add a payment status field in your form if you don't have one already.
    2. Go into the form's Stripe action. In the After payment section, set the value to Paid when the payment status is Completed.
      Stripe Resend Email After Payment Paid
    3. Add another email action to your form, set the trigger to Entry is created.
    4. Add conditional logic to this email action to fire only when the Payment status field equals Paid.
      Stripe Resend Email Conditional Logic Paid
    5. On your form Entries page, click the entry that you want to resend the email.
    6. In the Entry Actions section (right sidebar), click the Resend Emails link to resend the email.
      Stripe Resend Emails

Note: This process will work if you have selected After entry is created in Formidable → Global Settings → Payments under the Stripe button.

Customize the subscription renewal email

— Premium Feature —

Conditional statements are available on the Basic, Plus, Business, and Elite licenses.

In an email action that runs on Successful Payment, use inline conditional statements to change the email content for renewals. In this example, if the entry was created more than 7 days ago, the email thanks the user for a renewal.

[if created_at less_than='-7 days']Thanks for your renewal! Your next payment will be in x days.[/if created_at]

[if created_at greater_than='-7 days']Thanks for your initial payment! Your first renewal will trigger in x days.[/if created_at]

Replace 7 with your renewal period.

Set up Authorize and Capture

— Premium Feature —

This needs the Stripe add-on, which is available on the Business and Elite licenses.

Stripe has a two-step payment process which allows you to authorize a payment then capture it later. One of the benefits of using this feature is that you can capture the cardholder's payment only after an order or item is ready. It works for one-time payments only. Some payment methods, such as ACH Direct Debit and iDEAL, can't be authorized first. Learn more about placing a hold on a payment method. To set it up:

  1. Open the form action settings to create a Stripe payment. Change Capture Payment to Later (collect manually).
  2. Go to Formidable → Payments. When a payment is authorized but not captured, the status will be displayed as Authorized.
    Stripe authorized payment status
  3. Click View under the payment you want to capture. Then, in the Payment Details box, click Capture now. The link then reads Captured.
    Stripe capture now
  4. After you reload the page, the payment status shows Completed. If the payment is not captured within 7 days, the authorization expires and Stripe releases the funds. To release an authorization sooner, cancel the payment in your Stripe Dashboard.

Process refunds

You can refund a payment from Formidable with Stripe Lite or the Stripe add-on.

  1. Go to Formidable → Payments. Hover over the Receipt ID column for the payment you want to refund and click the View link.
    View link under a payment on the Formidable Payments page
  2. Inside this page, you can see several bits of information, but what we are looking for is located on the top right corner of your screen, the Payment Details widget.
    Stripe Refund Payment
  3. Click on Refund. Then click Confirm in the confirmation box that shows up.
    Refund confirmation box with an arrow on Confirm

    The word Refunded replaces the Refund link. After you reload the page, the payment's Status shows Refunded.
    Stripe Refunded Payment

A full refund made in your Stripe Dashboard also sets the payment to Refunded in Formidable and runs the frm_payment_status_refunded hook. A partial refund made in the Stripe Dashboard only lowers the payment amount in Formidable.

Display Stripe payment details

— Premium Feature —

These shortcodes need Formidable Views 5.13 or later (Plus license or above) or the Stripe add-on (Business license or above). They are available on the Plus, Business, and Elite licenses.

You can capture the customer Stripe payment information using the [frm-payment] shortcode within a page, email, or a View.

By default, a date uses the WordPress date format setting. To customize the date format, you can pass a format option in the shortcode like this:

[frm-payment entry=[id] show=created_at format="Y-m-d"]

Show payment details

You may insert the following shortcode to show the Stripe payment information from the Formidable → Payments table.
Stripe Payments Table

  • status: Show the status of the Stripe payment, such as complete or refunded.
    [frm-payment entry=[id] show=status]

  • created_at: Show the date and time the payment was created.
    [frm-payment entry=[id] show=created_at]

  • receipt_id: Show the receipt ID for a specific entry.
    [frm-payment entry=[id] show=receipt_id]

Note: You can use either [frm-payment entry=[id] show=receipt_id] or [frm-receipt-id entry=[id]], and they will have the same results.
  • sub_id: Show the Formidable subscription number for the payment. It's the number in the Subscription column of the Formidable → Payments list. Stripe's own subscription ID (sub_…) is the Profile ID in the Subscriptions list.
    [frm-payment entry=[id] show=sub_id]
  • amount: Show the amount paid in the Stripe transaction.
    [frm-payment entry=[id] show=amount]

    By default, the amount uses the currency set in the payment's Stripe action, such as $5.00. To show only the number, such as 5.00, add format=number. A payment added by hand in Formidable → Payments has no Stripe action, so it always shows only the number.

    [frm-payment entry=[id] show=amount format=number]
  • begin_date: Show the start date of the billing period for this payment.
    [frm-payment entry=[id] show=begin_date]
  • expire_date: Show the end date of the billing period for this payment.
    [frm-payment entry=[id] show=expire_date]

Use begin_date, expire_date, and the subscription options for subscription payments only. A one-time payment has no expire date or next bill date. These options don't show a real date for it.

Use the Recurring payment limit option in the Stripe action if you want to cancel a subscription after a specific number of payments.
  • paysys: Show the payment processor used in the transaction.
    [frm-payment entry=[id] show=paysys]
  • test: Show whether the payment was made in test mode. It shows 1 for a test-mode payment and 0 for a live payment.
    [frm-payment entry=[id] show=test]
  • action_id: Show the ID of the Stripe action.
    [frm-payment entry=[id] show=action_id]

Show subscription details

You may insert the following shortcode to show the Stripe payment information from the Subscriptions list on the Formidable → Payments page.
Subscriptions list on the Formidable Payments page

  • subscription_next_bill_date: Show the next bill date of the subscription
    [frm-payment entry=[id] show=subscription_next_bill_date]

  • subscription_status: Show the status of the subscription. It shows the raw status value, such as active, or future_cancel for a subscription canceled at the end of its period.
    [frm-payment entry=[id] show=subscription_status]

Export list of payments

— Premium Feature —

This needs the Stripe add-on, which is available on the Business and Elite licenses.

To get a list of the payments made in your Stripe form, export the entries as a CSV file. With the Stripe add-on, the file adds Payments (the total of completed payments), Expiration Date, and Status columns. Stripe Lite doesn't add payment columns.

To get started, go to the Formidable → Entries page and select the form where the Stripe payments were made. Then click the Download CSV button above the entries table to export the payment details via CSV.
Stripe Export Payments

Show a list of subscriptions

As an admin, you can see and cancel all the subscriptions on your site. You can do this with Stripe Lite or the Stripe add-on.

  1. Go to Formidable → Payments and click Subscriptions above the list. This link shows once your site has at least one subscription.
    Subscriptions link above the list on the Formidable Payments page
  2. To cancel a subscription, hover over it and click View.
    Subscriptions list with the View link under a subscription
  3. Click Cancel Subscription in the Subscription Details box. Then click Confirm in the confirmation box that shows up.
    Stripe View Subscription

Show subscriptions for current user

— Premium Feature —

This shortcode needs Formidable Views 5.13 or later (Plus license or above) or the Stripe add-on (Business license or above).

To show your users a list of their subscriptions, insert [frm-subscriptions] on a page. If a user is logged in, they see their subscriptions listed here. With the Stripe add-on, each subscription has a Cancel link. With Formidable Views, the list shows the billing cycle, next bill date, and status, with no Cancel link.

Conditionally show active subscriptions

— Premium Feature —

This needs the Stripe add-on and Formidable Views, which are available on the Business and Elite licenses.

To display the active subscriptions for the current user but conditionally show the payment form when there is none, follow these instructions.

  1. In the form builder, add a hidden field called Payment Status and save the payment status in the field. Make sure that you have added a row for the Completed payment status. Also add a row for Canceled and Expired with a different value, so an ended subscription no longer matches the View filter. The [frm-subscriptions] shortcode lists the user's subscriptions in every status.
  2. Add a User ID field to the same form. The View filter below uses it to find the current user's entries.
  3. If you haven't already, go to Formidable → Add-Ons and toggle on the Formidable Views add-on.
  4. Create a single entry View of the same subscription form. Use a Classic View.
  5. Set up the View filter such as:

    • User ID equals current_user.

    • Payment Status equals completed.


    Stripe Subscription View Filter

  6. In the Listing Page Content box, insert the [frm-subscriptions] shortcode to show your users a list of their subscriptions.
    Stripe Subscription View content
  7. In the No Entries message box, insert your Payment form shortcode:
    Stripe Subscription No Entries
  8. Click Update and publish the View on a page.

Find the payment action ID

To find the Stripe payment action ID, follow the steps below.

  1. Navigate to your form settings.
  2. Go to the Actions & Notifications page and select the Stripe action.
  3. If you just added the action, click Update first. A new action shows a temporary number until it's saved.
  4. The payment action ID is shown in the bottom right corner of that form action.
    Bottom of the Stripe action with an arrow on the Action ID

Get receipt ID

— Premium Feature —

This shortcode needs Formidable Views 5.13 or later (Plus license or above) or the Stripe add-on (Business license or above).

Use this shortcode to show the payment's receipt ID, which is a Stripe PaymentIntent ID or charge ID. It has one option, entry, which takes an entry ID or entry key.

To get the receipt ID for the current entry:

[frm-receipt-id entry="[id]"]

To get the receipt ID for a specific entry ID:

[frm-receipt-id entry="65076"]

The shortcode may be placed in a View, email message, success message, or even an API action that fires after a payment is complete.

Publish a post on complete payment

— Premium Feature —

This needs the Stripe add-on, which is available on the Business and Elite licenses.

To publish a post after collecting a Stripe form payment, follow these steps.

  1. Set up your form to take a Stripe payment.
  2. Add a Create posts action.
  3. Add a post status field to your form, if you don't have one already. In the Create Post action, set Post Status to Create New Dropdown Field. Then click Update. This adds a Status dropdown field to your form.
  4. Select 'Draft' as the default value in your new 'Status' field.
    Dropdown Options of the Status field with Draft set as the default

    If you do not want the user to have access to changing the status of this field, you can set the field to Read Only. You can also hide the whole field from the user by changing the Visibility to 'Administrator'.
  5. Click Update.
  6. Go into the form's Stripe action. In the After Payment section, set the dropdown in the Payment Status column to 'Completed', set the dropdown in the Field column to your 'Status' field, and type 'publish' in the Value column.
    Stripe After Payment Publish
  7. Click Update and Publish your form on a page. Now when a user submits the form with their payment information received, the post will be published.

Troubleshooting

The Stripe Token is missing

This message comes from the Stripe add-on, for a Stripe action with Enable Stripe link and additional payment methods turned off. Stripe Lite doesn't show it. If you see it, check each of the following:

  1. Do you have a payment field in your form? If not, this is required in order for a payment to process.
  2. Is Stripe connected in the right mode? Go to Formidable → Global Settings → Payments and click the Stripe button. The Connection Status must show Connected for the mode your site uses: TEST when Use the Stripe test mode is checked, LIVE when it isn't. If it doesn't, connect Stripe with Stripe Connect. Formidable Forms connects to Stripe only with Stripe Connect.
  3. Do you have more than one payment form on the same page? With the Stripe add-on, put one Stripe payment form on each page.
  4. Does the form have more than one Stripe action? Turn off Enable Stripe link and additional payment methods in every Stripe action. Then click Update.
  5. Are Formidable Forms, Formidable Forms Pro, and the Stripe add-on up to date? If not, please update.
  6. Do you have another plugin installed that uses Stripe? If so, try deactivating it to check for a conflict.
  7. If you have the Formidable Authorize.net plugin installed, choose between using that or the Stripe add-on.
Note: If you only have Stripe Lite enabled, installing the Formidable Authorize.net plugin or other payment methods will not cause any issues.

If you continue getting this message, please create a new ticket in the help desk.

There was something wrong with the payment data.

With the Stripe add-on, a form can take payments through more than one Stripe action. If it does, check that Enable Stripe link and additional payment methods is turned off in every Stripe action. This toggle works in only one Stripe action per form.

With the Stripe add-on, also check that only one one-time Stripe action runs on each submission. Add conditional logic to each one-time Stripe action, as shown in Conditionally collect payments.

Stripe Lite always works as if the toggle is on. With Stripe Lite, use one Stripe action per form, even though Formidable Forms Pro lets you add more.

No such plan or No such price

Formidable creates a plan in Stripe for each recurring Stripe action. If you connect a different Stripe account, the plan doesn't exist there yet. Stripe Lite creates the missing plan again by itself. With the Stripe add-on, a recurring payment can fail with a 'No such price' message. To fix it, open each recurring Stripe action on the form. Then add a word to its Description and click Update. This creates the plan in the connected Stripe account. You can then change the Description back and click Update again.

No such customer

When a logged in user submits a payment, a customer is created for that user in Stripe. The customer ID is linked to the logged in user. If the Stripe account is changed, or the customer account deleted in Stripe, a logged in user who has previously submitted a payment may see the message "No such customer" when a payment form is submitted. When this happens, the customer ID is unlinked from the user, and the next try from this user succeeds. This message will not appear for logged out users or for those submitting the first payment. When Formidable gets Stripe's notice that a customer was deleted, it also clears that customer ID from the user.

If this error continues, the customer id assigned to the user can be manually deleted in PHPMyAdmin or with a line of code.

$user_id = 1; // Change the user id to the user getting errors.
delete_user_meta( $user_id, '_frmstrp_customer_id' );
delete_user_meta( $user_id, '_frmstrp_customer_id_test' );

Incomplete payments

For a one-time Stripe action, Formidable creates a payment in Stripe before the form is submitted in 2 cases. One is when the form uses Stripe's payment field: always in Stripe Lite, and in the Stripe add-on with Enable Stripe link and additional payment methods turned on. The other is when the Stripe add-on processes one-time payments before the entry is created. For a recurring Stripe action with Stripe's payment field, Formidable creates a SetupIntent instead, which isn't a payment.

In both cases, Stripe shows an incomplete payment each time a visitor loads the form, even if they don't submit it.

Its amount is the payment amount, or a placeholder such as $1 when the amount comes from fields that are still empty. As the form is filled out, the amount is updated.

Incomplete payments aren't charges, and they need no action.

To reduce them:

  • Stripe Lite: the form always uses Stripe's payment field. On a multi-page form, the payment is created only when the visitor reaches the page with the payment field. Put the payment field on the last page so only visitors who get that far create one. On a single-page form, the payment is created when the form loads.
  • Stripe add-on: with Enable Stripe link and additional payment methods turned on, the payment is created when the form loads, even on a multi-page form. The Process One-time Payments setting doesn't change this. With the toggle off, the payment is created when the form loads only if Process One-time Payments is set to Before entry is created. This happens on single-page and multi-page forms. To stop these incomplete payments, turn off Enable Stripe link and additional payment methods in the Stripe action. Then go to Formidable → Global Settings → Payments and click the Stripe button. Set Process One-time Payments to After entry is created.

Payment Intent status: requires_payment_method

requires_payment_method is the first status of every Stripe payment. It means Stripe is waiting for the payment details. The incomplete payments created when a form loads have this status too, and they need no action.

With the Stripe add-on, if a submitted payment stays at this status, check the hidden "Payment Method" field. The add-on needs it to process the payment. If you don't see the field in your form, delete the payment field and the Stripe form action, and then re-create them. If the field is present, make sure there is no conditional logic set on this field.

The provided PaymentMethod was previously used

If you are seeing an error message that looks similar to this: "The provided PaymentMethod was previously used with a PaymentIntent without Customer attachment", first make sure that you are running the most current version of the Stripe add-on. If you are and continue to see this message, it's possible that the Payment Method field has become unlinked from the Stripe form action. Try deleting the Payment Method field from your form, along with the Stripe form action(s), and recreate the Stripe form action(s).

Please specify an amount for the payment

This message shows when the payment amount is 0. Amounts with a currency symbol or thousands separator, such as $25.00, 1,250.50, or 25 USD, work. Check the following:

  • The Amount setting in the Stripe form action isn't empty and includes a number.
  • If the Amount uses a field, the correct field shortcode is in the Amount setting. That field has a value when the form is submitted.

Logging for other errors

If you run into an error related to the payments and aren't sure where to start, then a log message helps. With the Stripe add-on, a log file keeps a list of the most recent errors in wp-content/plugins/formidable-stripe/formidable-payments/log/results.log. The most recent messages are at the bottom of the log. Stripe Lite saves errors in Formidable → Logs when the Formidable Logs add-on is active, or in your server's PHP error log.

In addition to the log stored in Formidable, Stripe has a separate log. It may be useful to compare the two and see if additional errors are appearing in your Stripe account log as well. You can find it in your Stripe Dashboard under Workbench → Logs.

No payments created

If no payments are showing up under your Formidable → Payments page, it's possible that your database has not created a Payments table or is not properly updating. On some servers, the database user doesn't have permissions to ALTER database tables. To grant and revoke rights to database tables using phpMyAdmin, follow the instructions below:

  1. Navigate to the Privileges tab which has a list of your users.
  2. Click the Edit Privileges link.
  3. Select your database.
  4. In the Database-specific privileges, select the wp_frm_payments table. Your table prefix may be different from wp_.
  5. In the Table-specific privileges, you can define the operations in detail.
  6. Manually make adjustments to the table to match the structure in our database schema.

Note: If you are using the PayPal add-on at the same time, leave the Completed column as is.

Cannot set id on this object

If you see the error message Cannot set id on this object. HINT: you can't set: id, check each of the following:

  1. Do you see anything related to this error in the Stripe logs?
  2. Do you have another plugin installed that uses Stripe? Try deactivating it to check for a conflict.

If you continue getting this message, please create a new ticket in the help desk.

The account id does not match its signature

With the Stripe add-on, this message means that no account ID is sent to our Stripe connect service. Stripe Lite shows "Stripe is not connected. Please connect your Stripe account to process payments." instead. The data that is being passed to us isn't what we're expecting it to be.

You might want to check if your Stripe API integration has been disconnected or if the account password is wrong. If you continue to see this message, check for plugin/theme conflicts.

This message comes with a 400 error in your Stripe logs. It means a payment asked Stripe for the Link payment method while Link is turned off in your Stripe Dashboard. By default, Formidable lets Stripe choose the payment methods, so this happens only when a frm_stripe_payment_method_types filter adds the link type. Turn on Link in your Stripe Dashboard, or remove link from the filter.
Stripe log entry with the payment method type link is invalid error

Stripe connections are not working

If you click the Connect to Stripe button and it never reaches the initial Stripe setup page, you might be getting blocked by a security service on their server. If you see an error message cURL error 28: Connection timeout, please check the following:

  • Your web host may be blocking communication with formidableforms.com and causing the Stripe connections to stop working. how to whitelist our IP.
  • The cURL is not enabled on your server. If you need help checking this, contact your host to find out.
  • If that does not eliminate the error message, you may be behind a corporate firewall preventing communication with formidableforms.com. Please get in touch with us through the help desk for assistance.

Stripe is not connected. Please connect your Stripe account to process payments.

Stripe Lite shows this message when a form with a Stripe action is submitted, but Stripe isn't connected in the mode it's set to use. Site administrators also see a link to the payment settings. Go to Formidable → Global Settings → Payments, click the Stripe button, and connect your Stripe account.

There was a problem communicating with Stripe. Please try again.

With the Stripe add-on, this message shows when a form with a Stripe action is submitted. It means Stripe isn't connected in the mode it's set to use. Go to Formidable → Global Settings → Payments, click the Stripe button, and check the connection status. If it says Not connected!, click Finish Stripe Setup. Otherwise, connect your Stripe account.

Stripe is set to test mode, but it is only connected in live mode

This message comes from Stripe Lite. Stripe is connected separately for test mode and live mode. You may also see "Stripe is set to live mode, but it is only connected in test mode". Either message means Stripe is set to the mode that isn't connected. Connect Stripe in that mode. Or go to Formidable → Global Settings → Payments and click the Stripe button. Then turn Use the Stripe test mode on or off to match the connected mode.

The Stripe connection for live mode was started but never finished

This message comes from Stripe Lite. The Stripe setup was started but not completed. This message can also say "test mode". Go to Formidable → Global Settings → Payments, click the Stripe button, and click Finish Stripe Setup.

Stripe payments require HTTPS. Please use a secure URL or contact the site administrator.

Stripe Lite shows this message in the payment field when Stripe is in live mode and the page with the form isn't loaded over HTTPS. Install an SSL certificate on your site and open the page with an https:// URL. To test payments on a page without SSL, go to Formidable → Global Settings → Payments and click the Stripe button. Then turn on Use the Stripe test mode.

Missing payments

This check is for the Stripe add-on. If the Stripe payment is not reflected even after submitting the form, you might have added conditional logic to the Payment Method field. It can affect the Stripe form action, resulting in the form being submitted without processing any payments or displaying errors. To resolve this issue, try to delete the conditional logic from your Payment method field.

If you plan to collect payments only when a specific field option is selected, you can add conditional logic to the Stripe form action. The conditional logic makes the payment run only when it's needed. Learn more about conditionally allowing payments.

Incorrect $1 payment amounts in Apple Pay and Google Pay

If you have set up your form to accept Stripe payments with Google Pay or Apple Pay, you might encounter an issue where the payment amount is incorrectly set to $1. This is due to a limitation with Stripe when the total amount is calculated dynamically in Stripe's payment field. That field is used in Stripe Lite, and in the Stripe add-on with Enable Stripe link and additional payment methods turned on.

To get the correct amount:

  1. Go to your form builder and set it up as a multipage form.
  2. Add a page break field between the Amount field and the Payment field. Stripe's payment field starts only when the Payment field loads on the page. With the Payment field on the next page, it gets the calculated total amount.
    Troubleshooting Stripe - Incorrect $1 with Google Pay and Apple Pay
  3. That's it! The Stripe transaction processes the correct amount when the form is submitted.

Apple Pay popup keeps reappearing after canceling

On a multipage form, if a user clicks Submit to pay with Apple Pay, cancels the Apple Pay popup, then navigates back through the form, the popup can trigger again.

The Apple Pay flow is controlled by Apple and Stripe, not Formidable.

With the Stripe add-on and Enable Stripe link and additional payment methods turned off, the form uses Stripe's single-line card field. In some browsers, Stripe still shows the Link Autofill button (it reads Autofill, with the Link icon) in that field, because Link is turned on in your Stripe Dashboard. The toggle doesn't control Link.
Disable Stripe Link Autofill

To remove the button, turn off Link in your Stripe Dashboard:

  1. Go to your Stripe Dashboard → Settings → Payments → Payment Methods and scroll down the page until you find the Link payment method.
  2. Click the Turn off button to disable the Link payment method.
    Disable Stripe Link payment method
  3. Once the Link has been disabled, the change may take a few minutes to take effect on your website.

To turn it off only in the card field, use the Card element rule in Turn off Stripe Link.

This account cannot make live charges

If your Stripe payment form throws an error message "This Connect account cannot currently make live charges. The requirements.disabled_reason property on the account will provide information about why this account is currently disabled" during checkout, this usually happens when Stripe restricts the user's account. Stripe may be reviewing the account due to certain risk factors or as part of their business verification process. You can contact Stripe directly to identify the issue with this error message.

Amount too small

The amount_too_small error code indicates that the payment amount you entered in your Stripe transaction is below the minimum limit set by Stripe. To resolve this issue, please select a higher amount and attempt the transaction again.

  • Stripe has established minimum payment amounts for charges to ensure that their fees do not exceed the charge amount.
  • The minimum amount required varies depending on the currency of the payout bank account.
  • With subscription charges, zero-amount charges are allowed for coupons and free trials, while any non-zero charge must meet the minimum payment requirement.

For more detailed information, refer to the Stripe documentation on minimum and maximum charge amounts.

Additional Customizations

Change the user role

You may want to change the role back if a payment fails or is refunded. Use the frm_payment_status_complete hook if you want to change the user role when the payment is completed. With a recurring payment, this hook will be fired each time a payment is completed.

Similar hooks are fired each time the status on payment changes. These hooks work exactly the same way but simply fire at different times.

  • frm_payment_status_complete
  • frm_payment_status_refunded
  • frm_payment_status_failed
  • frm_payment_status_canceled

Trigger an action based on payment amount

If you want to trigger an action in another form (or the same form) when a payment is more than a certain amount, use the following example:

add_action( 'frm_payment_status_complete', 'frm_trigger_action_on_payment' );
function frm_trigger_action_on_payment( $atts ) {
	$minimum = 100.00; // Change 100.00 to the payment amount above which you want to trigger the action.

	if ( (float) $atts['payment']->amount < $minimum ) {
		return;
	}

	$entry = FrmEntry::getOne( $atts['entry_id'], true );
	if ( ! $entry ) {
		return;
	}

	$form = FrmForm::getOne( $entry->form_id );
	FrmFormActionsController::trigger_actions( 'update', $form, $entry, 'email' );
}

As is, the above example will trigger all Email actions set to trigger on update, in the same form. To trigger the actions of a different form, replace $atts['entry_id'] with the ID of an entry in that form.

Trigger an action on complete payment

Use the frm_payment_status_complete hook if you want to target a specific payment action ID and send an email on complete payment.

Save receipt ID in a field

To save the receipt ID in a field when a payment is completed, use the following example. With a recurring payment, the field is updated with each new receipt ID.

add_action( 'frm_payment_status_complete', 'frm_save_receipt_id_on_payment' );
function frm_save_receipt_id_on_payment( $atts ) {
	$field_id   = 1819; // Change 1819 to the ID of the field that stores the receipt ID.
	$entry_id   = $atts['entry_id'];
	$receipt_id = $atts['payment']->receipt_id;

	if ( empty( $receipt_id ) ) {
		return;
	}

	if ( null === FrmEntryMeta::get_entry_meta_by_field( $entry_id, $field_id ) ) {
		FrmEntryMeta::add_entry_meta( $entry_id, $field_id, '', $receipt_id );
	} else {
		FrmEntryMeta::update_entry_meta( $entry_id, $field_id, '', $receipt_id );
	}
}

Use the Stripe receipt

By default, an email form action can be used to send a receipt. In this case, the email is set to trigger after successful payment. But this example will allow you to use the Stripe receipts.

The frm_strp_new_charge filter is part of the Stripe add-on. It runs for one-time payments in a Stripe action with Enable Stripe link and additional payment methods turned off.

add_filter( 'frm_strp_new_charge', 'set_stripe_to_trigger_receipt', 10, 2 );
function set_stripe_to_trigger_receipt( $new_charge, $atts ) {
  if ( $atts['action']->ID == 30 ) { // change 30 to your payment form action ID
    $email_field_id = 25; // change 25 to your email field id
    $new_charge['receipt_email'] = $atts['entry']->metas[ $email_field_id ];
  }
  return $new_charge;
}

Note: This will only work for live payments. Read more about using Stripe receipts.

Send entry details to Stripe as metadata

Add the form and entry details to a one-time payment in Stripe as metadata. Stripe stores them with the payment, so you can find the Formidable entry for each payment. This example adds the form name, ID, and key, and the entry ID and key.

add_filter( 'frm_strp_new_charge', 'frm_add_entry_details_to_stripe_metadata', 10, 2 );
function frm_add_entry_details_to_stripe_metadata( $new_charge, $atts ) {
	$action_ids = array( 30 ); // Change 30 to your Stripe action ID. Separate several IDs with commas.

	if ( ! in_array( (int) $atts['action']->ID, $action_ids, true ) ) {
		return $new_charge;
	}

	$metadata = isset( $new_charge['metadata'] ) ? $new_charge['metadata'] : array();

	$new_charge['metadata'] = array_merge(
		$metadata,
		array(
			'form_name' => $atts['form']->name,
			'form_id'   => $atts['form']->id,
			'form_key'  => $atts['form']->form_key,
			'entry_id'  => $atts['entry']->id,
			'entry_key' => $atts['entry']->item_key,
		)
	);

	return $new_charge;
}

Replace 30 with the ID of your Stripe action. Learn how to find the payment action ID.

Notes:
  • The frm_strp_new_charge filter is part of the Stripe add-on. Turn off Enable Stripe link and additional payment methods in the Stripe action. Set Process One-time Payments to After entry is created in Formidable → Global Settings → Payments → Stripe. With Before entry is created, the metadata isn't added.
  • For recurring payments, the Stripe add-on uses a different filter, frm_strp_new_subscription.

Get customer ID

The Stripe customer ID is saved in the user meta called _frmstrp_customer_id for live payments and _frmstrp_customer_id_test for test-mode payments. To get the current user's customer ID in the mode Stripe is set to, use this code:

$meta_key    = class_exists( 'FrmStrpLiteAppHelper' ) ? FrmStrpLiteAppHelper::get_customer_id_meta_name() : '_frmstrp_customer_id';
$customer_id = get_user_meta( get_current_user_id(), $meta_key, true );

Cancel subscriptions

By default, Stripe subscriptions will be canceled at the end of the period. Use the frm_stripe_cancel_subscription_at_period_end hook if you want to cancel subscriptions immediately. It works with Stripe Lite and the Stripe add-on.

If you show subscriptions for the current user, you can customize the cancellation link displayed with the subscription by following the example below. The Cancel link and this filter are part of the Stripe add-on.

add_filter( 'frm_pay_stripe_cancel_link', 'customize_stripe_subscription_cancel_link', 10, 2 );
function customize_stripe_subscription_cancel_link( $link, $subscription ) {
	$entry = FrmEntry::getOne( $subscription->item_id );
	$link  = str_replace( '>Cancel<', '>' . 'Cancel ' . $entry->form_name . ' subscription ' . '<', $link );
	return $link;
}

Update credit card details

The Stripe customer portal lets users manage their subscriptions and billing details through a Stripe-hosted page. With the no-code Stripe customer portal link, you can configure the following settings:

  • Payment Method: Add or delete credit card payments.
  • Subscriptions: Upgrade, downgrade, or cancel a subscription.
  • Billing information: View and update billing information, such as name, address, and phone number. Note: Users can’t update their email address if they are using the no-code customer portal link.
  • Invoice: View the invoice history.
Stripe Customer Portal Page

If you want your users to update their payment method, such as credit cards, you can use the Stripe customer portal no-code link to set this up. Follow the instructions to get started.

  1. Go to Stripe → Settings → Billing → Customer Portal.
    Stripe Customer Portal
  2. Click the Activate link button (Activate test link in test mode) and copy the customer portal link.
    Stripe Activate Customer Portal Link
  3. Choose what customers can do in the portal, such as update their payment methods.
  4. Go back to your site. Create a new page, add a WordPress Buttons block, and paste the customer portal link as the button's link. (Optional) To show the subscriptions for the current user, insert the [frm-subscriptions] shortcode on the same page. A logged-in user then sees their subscriptions and the button. This example uses the Stripe add-on, which adds the Cancel link. With Formidable Views, the list has a Status column instead:
    Page showing the logged-in user’s subscriptions and an Update payment method button

    You can also use HTML to create the link.
<a href="https://billing.stripe.com/p/login/test_xxxx">Update payment method</a>
  • When the user clicks the link, it will redirect them to the Stripe Customer Portal page, where they can add or delete their payment method.
    Stripe Customer Portal Update Card
Note: If you plan to test the customer portal before going live, it must be configured in the Stripe Dashboard for both Live and Test modes.

Frequently Asked Questions

What is the difference between Stripe Lite and Stripe add-on?

Stripe Lite is built into Formidable Forms, including the free Formidable Forms Lite. The Stripe add-on needs Formidable Forms Pro and the Business or Elite license. Some features also need Formidable Forms Pro (conditional logic) or Formidable Views (payment shortcodes). The table compares the two.

Stripe LiteStripe add-on (Business or Elite license)
Stripe link and additional payment methods✅ Always on✅ With the Enable Stripe link and additional payment methods toggle
Single-line card field (toggle off)-✅ Included
One-time and recurring payments✅ Included✅ Included
Refunds✅ Included✅ Included
Cancel subscriptions in Formidable → Payments✅ Included✅ Included
More than one Stripe action per form- Formidable Forms Lite alone allows one. Formidable Forms Pro lets you add more, but Stripe Lite takes payments through one Stripe action per form.✅ Included
Conditional payments✅ One Stripe action, with Formidable Forms Pro✅ Included
[frm-payment], [frm-receipt-id], and [frm-subscriptions] shortcodes✅ With Formidable Views 5.13 or later✅ Included
Cancel link in [frm-subscriptions]-✅ Included
Capturing a payment later-✅ Included
Process One-time Payments (Before or After entry is created)-✅ Included
After Payment settings-✅ Included
Payment columns in the entries CSV export-✅ Included
Manually add payments-✅ Included

Are there any fees associated with using Stripe in my forms?

Yes. A 3% transaction fee is charged for each payment unless your site has an active Business or Elite license. Formidable Forms Lite, the Basic and Plus licenses, and expired licenses pay it. It is in addition to the Stripe fees, which depend on how you use their platform. See Stripe's pricing for a breakdown. Upgrade to the plan that eliminates this fee.

How can I enable the additional payment methods?

First, turn on the payment methods you want in your Stripe Dashboard, as shown in Stripe payment methods. Stripe Lite always shows Stripe's payment field with those methods, so it has no toggle. With the Stripe add-on, turn on the Enable Stripe link and additional payment methods toggle in the Stripe action. Then click Update. Learn more about the different Stripe payment gateways.

Why is the Connect to Stripe button not working?

Only owners or administrators are granted permission to connect an account using Stripe Connect. In WordPress, the user also needs permission to change Formidable's global settings. If you need help completing the process, please verify your Stripe user role to ensure it meets the requirements. If you continue having problems connecting to Stripe, follow these troubleshooting steps.

Is my payment information stored in the form?

Rest assured that sensitive credit card information entered on your website is secure. Instead of sending the credit card information to your server, it will be hosted in an iframe by Stripe. Stripe will handle all the compliance measures, and your users' credit card details are never at risk on your server.

Are the Stripe keys stored in Formidable Forms?

Formidable Forms connects to Stripe only with Stripe Connect, so you don't need to store your API keys. We use generated passwords that only work when making requests through our API. It is more secure as it eliminates the need to manually handle or store your sensitive API Keys in plain text.

Why can't I set a default country in the Stripe form?

This applies to Stripe's payment field (Stripe Lite, or the Stripe add-on with Enable Stripe link and additional payment methods turned on). The Country dropdown defaults to the user's location. Formidable doesn't pass a default country to Stripe, so you can't set a different one. The user will always need to manually select a different country if their location is not correct.

Was this article helpful? *

This article may contain affiliate links. Once in a while, we earn commissions from those links. But we only recommend products we like, with or without commissions.

In this article

    We have a small, but amazing team of dedicated people who are committed to helping you achieve your goals and project requirements.


    Copyright © 2026 Strategy11, LLC. Formidable Forms® is a registered trademark Strategy11, LLC.

    Complete your purchase
    Don't forget your purchase!
    Complete Purchase
    Join 400,000+ using Formidable Forms to create form-focused solutions fast. Get Formidable Forms