Accepting Payments with Stripe (PRO) | Form Forge - Build Forms with AI in Seconds
Download Log in

Accepting Payments with Stripe (PRO)

User Guide

Form Forge integrates with Stripe to let you collect credit card payments directly within your forms. This is the right solution for order forms, donation forms, service bookings, event registrations with fees, and any situation where you need to charge visitors at the time of submission. The payment field is powered by Stripe Elements, which means card data is entered into Stripe’s secure iframe and never touches your WordPress server.

Stripe is trusted by millions of businesses worldwide. Form Forge takes no commission on payments — 100% goes to your Stripe account (minus Stripe’s standard processing fees). You control everything from your Stripe dashboard.

What You Need Before Starting

  • A Stripe account (sign up free at stripe.com if you do not have one)
  • Your Stripe Publishable Key and Secret Key (found in your Stripe dashboard)
  • Your Stripe Webhook Signing Secret (created during setup)

Setup Walkthrough

  1. Log in to your Stripe Dashboard at dashboard.stripe.com.
  2. Click the Developers menu, then API Keys.
  3. You will see two keys: Publishable Key (starts with pk_) and Secret Key (starts with sk_). Start with your Test mode keys to verify the setup works before going live.
  4. Copy both keys.
  5. In WordPress, go to Form Forge > Settings > Stripe.
  6. Paste the Publishable Key into the first field.
  7. Paste the Secret Key into the second field.
  8. Make sure the Mode toggle is set to Test (since you are using test keys).
  9. Now set up the webhook. In Stripe, go to Developers > Webhooks and click Add Endpoint.
  10. Enter the webhook URL shown on the Form Forge Stripe settings page (it will look like https://yourdomain.com/wp-json/formforge/v1/stripe-webhook).
  11. Under “Events to send,” select payment_intent.succeeded, payment_intent.payment_failed, and charge.refunded.
  12. Click Add Endpoint, then copy the Webhook Signing Secret that Stripe generates.
  13. Back in Form Forge settings, paste the Webhook Signing Secret into the corresponding field.
  14. Click Save Settings.

Adding a Payment Field to Your Form

  1. Open your form in the builder.
  2. Drag the Payment (Stripe) field from the PRO fields section into your form. Place it near the bottom, typically as the last field before the submit button.
  3. Click the pencil icon on the payment field to open the right-hand Field Settings panel. The Payment (Stripe) section there has these controls:
Amount type — pick Fixed amount for a single price (for example, $49.00 for a registration fee), or Dynamic (linked to Calculation) to let a Calculation field decide the price (for example, quantity x unit price).

Amount (when Fixed) — type the price in major currency units, like 49.99. Stripe’s minimum is 0.50.

Linked Calculation field (when Dynamic) — pick the Calculation field whose result should become the charge. The displayed amount on the form updates live as the visitor changes inputs that feed the calculation.

Currency — USD, EUR, GBP, CAD, AUD, JPY, RUB, CNY, INR, BRL, or MXN.

Mode — normally leave on “Inherit from global Stripe settings” so the form uses your global Test/Live toggle. Use Test or Live to force a specific mode for this one field (rare; useful for staging a single live form on an otherwise test site).

Description — shown on the visitor’s Stripe receipt and recorded in your Stripe dashboard. Keeps your accounting tidy (“Premium subscription monthly”, “Conference 2026 ticket”, etc.).

  1. Save the form. The payment field does not expose the generic Placeholder setting because Stripe’s Card Element does not support a normal text-input placeholder.

Dynamic payment amounts are validated twice: the browser blocks values below Stripe’s minimum before creating a PaymentIntent, and the server recomputes the amount from the submitted Calculation field before sending it to Stripe. If the calculated amount is missing, negative, below the minimum, or does not match the client-sent amount, no charge is created.

Testing with Stripe Test Cards

Always test before going live. Stripe provides test card numbers:

Card numberWhat it simulates
4242 4242 4242 4242Successful payment
4000 0000 0000 0002Declined card
4000 0025 0000 3155Requires 3D Secure authentication

Use any future expiration date (like 12/30) and any three-digit CVC (like 123) with test cards.

Going Live

Once testing is complete:

  1. In your Stripe dashboard, switch to Live mode and copy your live Publishable Key and Secret Key.
  2. In Form Forge settings, replace the test keys with live keys.
  3. Toggle the Mode to Live.
  4. Create a new webhook endpoint in Stripe for live mode (using the same URL) and update the Webhook Signing Secret.
  5. Save settings.

Troubleshooting Stripe

ProblemMost likely causeSolution
Payment field does not appearStripe keys not saved or mode mismatchVerify keys in Settings and check the Mode toggle
Payment field is locked in the builderFree planActivate Form Forge PRO; crafted saves are also downgraded server-side
Dynamic amount stays at 0.00Linked Calculation field not selected, formula has no inputs, or stale frontend JSSelect the Calculation field, test the formula in Live preview, then hard-refresh cached pages
“Payment amount must be at least…”The fixed or calculated amount is below Stripe’s minimumRaise the fixed amount or correct the Calculation formula before testing
“Card declined” on test cardUsing the wrong test card numberUse 4242 4242 4242 4242 for a successful test payment
Payment status does not update after refund/failureWebhook not configured correctlyVerify the webhook URL in Stripe and the Signing Secret in Form Forge
“Unauthorized” error in consoleSecret Key is invalid or expiredRegenerate keys in Stripe and update Form Forge settings
Payments work in Test but not LiveUsing test keys in live mode (or vice versa)Make sure you switched both keys and the Mode toggle
Optional Email field says pi_... is missing an @ after paymentOlder Stripe runtime wrote the PaymentIntent ID into the wrong visible input when field IDs collidedUpdate Form Forge and clear page/script cache

> Tip: Start in Test Mode, submit several test payments, verify they show up in your Stripe Test Dashboard, then switch to Live Mode keys only when you are confident everything works correctly.

> Good to know: Form Forge takes no commission on payments. Without PRO, the Payment field is not available. Card data is handled entirely by Stripe through their secure embedded form element and never stored on your WordPress server. Form Forge validates the submission before charging the card; reCAPTCHA, required-field, Calendar Picker, map-address, or server validation errors stop before Stripe capture. If Stripe declines the card, Form Forge shows the Stripe error only and does not save a successful submission. During payment/submission processing, conversational forms disable the visible submit button and show a loading label just like standard forms. Successful payments are stored with payment_status = succeeded, while webhooks can later update the status to failed or refunded.

[Screenshot: The Stripe settings page in Form Forge showing fields for Publishable Key, Secret Key, Webhook Signing Secret, and the Test/Live mode toggle]

Forge AI Assistant Online

Hi! I'm the Form Forge AI assistant. Ask me anything about the plugin — setup, features, troubleshooting, or development.

Just now
Powered by Forge AI · Browse docs