Support Log in

Recipe: Accepting Payments with Stripe

User Guide
Prefer video? Watch the Fillin Forge tutorials 9 short guides covering every feature Watch

This recipe walks you through the complete Stripe integration from initial account setup through test mode, live mode, webhook configuration, and common troubleshooting.

Step 1: Create Your Stripe Account

  1. Go to stripe.com and click Start now
  2. Enter your email, full name, and create a password
  3. Verify your email address
  4. Complete the onboarding to activate your account (business details, bank account for payouts, etc.)

If you want to test first before completing onboarding, Stripe lets you use Test mode immediately.

Step 2: Get Your Test Mode API Keys

  1. In the Stripe Dashboard, make sure the Test mode toggle is on (top right)
  2. Go to Developers > API Keys
  3. You will see two keys:
– Publishable key: starts with pk_test_

– Secret key: starts with sk_test_ (click to reveal)

  1. Copy both keys

Step 3: Connect Stripe to Fillin Forge

  1. In WordPress, go to Fillin Forge > Settings (the Stripe Payments card)
  2. Paste the Publishable Key and Secret Key
  3. Make sure the mode is set to Test
  4. Save settings

Step 4: Set Up the Stripe Webhook

Webhooks let Stripe notify Fillin Forge about payment events (successful charges, refunds, failures).

  1. In the Stripe Dashboard, go to Developers > Webhooks
  2. Click Add endpoint
  3. Enter the webhook URL shown in your Fillin Forge Stripe settings page (it looks like https://yoursite.com/wp-json/formforge/v1/stripe/webhook)
  4. Under Events to send, select payment_intent.succeeded, payment_intent.payment_failed, and charge.refunded
  5. Click Add endpoint
  6. On the next screen, click to reveal the Signing Secret (starts with whsec_)
  7. Copy this Signing Secret
  8. Back in Fillin Forge, paste it into the Webhook Signing Secret field
  9. Save settings

Step 5: Create a Payment Form

  1. Go to Fillin Forge > New Form
  2. Add your regular fields (Name, Email, etc.)
  3. If you need dynamic pricing, add a Calculation field with a formula (e.g., {quantity} * 25)
  4. Drag the Payment (Stripe) field into the form
  5. Configure the payment:
– Amount: Enter a fixed amount (e.g., 99.00) or select a Calculation field for dynamic pricing

– Currency: Select your currency (USD, EUR, GBP, etc.)

  1. Save the form

Step 6: Test in Test Mode

  1. Embed the form on a test page
  2. Fill out the form and use Stripe’s test card: 4242 4242 4242 4242
  3. Enter any future expiration date (e.g., 12/30) and any 3-digit CVC (e.g., 123)
  4. Click Submit
  5. Verify:
– The form submission appears in Fillin Forge > Submissions with payment status “succeeded”

– The payment appears in your Stripe Test Dashboard under Payments

Test other scenarios:
Test Card NumberResult
4242 4242 4242 4242Successful payment
4000 0000 0000 0002Card declined
4000 0000 0000 9995Insufficient funds
4000 0025 0000 3155Requires 3D Secure authentication

Step 7: Switch to Live Mode

Once you are confident everything works:

  1. In Stripe Dashboard, turn off the Test mode toggle
  2. Go to Developers > API Keys and copy the Live keys (pk_live_ and sk_live_)
  3. In Fillin Forge Settings, replace the test keys with live keys
  4. Change the mode to Live
  5. Create a new webhook endpoint for live mode (repeat Step 4 with live keys)
  6. Update the Webhook Signing Secret
  7. Save settings

Troubleshooting Common Payment Issues

ProblemCauseSolution
“Your card was declined”Using a test card in live mode, or a real card in test modeVerify you are in the correct mode
Payment field not appearingStripe keys are missing or invalidCheck Fillin Forge > Settings (Stripe Payments card)
Visitor reads “Payment could not be verified. If you were charged, please contact us before trying again.”Stripe does not confirm the payment for this form: it is not paid, it was made for another form or field, in another currency, or in test mode on a live site, or it already belongs to another submissionThe submission is not saved. Find the payment in your Stripe Dashboard, in the mode the form uses, and check it there
Submission shows “Payment not confirmed”Stripe could not be asked when the form was sentWait: Fillin Forge asks again by itself through WP-Cron, for roughly the first three days after the submission. Or open the submission and press Check payment in Stripe
Submission shows “Not paid”A later check found no completed payment in Stripe for this submissionLook for the payment in Stripe; press Check payment in Stripe in the submission to ask again
Submission shows “Paid amount differs”The payment is for another amount than the values of the submission come toCompare the two amounts in Stripe before you fulfil the order. The Check payment in Stripe button is not offered for this status
“Invalid API key” errorKeys are from the wrong mode or accountRe-copy keys from the correct mode
3D Secure not completingPopup blocked or network issueEnsure popups are not blocked; test on another browser
Refund neededCustomer requested refundProcess refunds directly in the Stripe Dashboard; the charge.refunded webhook updates the saved submission status to refunded

Payment submissions hide internal metadata keys such as _payment and __payment from emails, Slack, Discord, Telegram, the submission modal, CSV, and PDF. User-facing surfaces show readable payment rows instead: Payment status, Payment amount, and Payment date (and, beside the status, a Payment note when the payment is not confirmed, not paid, or paid for another amount). The normal Payment (Stripe) field can still show the PaymentIntent ID when it is useful for reconciliation.

—

Forge AI Assistant Online

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

Just now
Powered by Forge AI · Browse docs