With payments you sell services directly through your form, for example a deposit for a quote or a subscription. Visitors pay after the contact step on the page of your payment provider. The money goes to your own account at Stripe, PayPal or Mollie.
Requirements
- Funnelforms Pro. This feature is not included in Funnelforms Free.
- An account at Stripe, PayPal or Mollie.
- The right to change settings, to create or edit a connection.
- Changes to the payment need the right to see entries. Without it you can prepare them; someone with the right publishes them.
- A contact step in the form. For a calculated amount a calculation, for coupons a text field.
- For webhooks, your website must be reachable for the provider.
In Funnelforms Free, the Settings workspace shows More settings with "These come with Funnelforms Pro:" and Payment in the list. If a form already has a payment, for example after switching from Pro to Free, Free also shows the Payment card so you can switch it off; the form can be published only without it.
Where to find it
Funnelforms → Forms → open a form → workspace Settings → section Payment.
You see the payment status of an entry under Funnelforms → Entries → open an entry → section Payment.
Features at a glance
- Three providers: Stripe, PayPal and Mollie. Which payment methods the payment page offers is set in your account at the provider.
- A fixed amount or one from a calculation, always computed on the server.
- The whole amount, A deposit or A subscription (Stripe only).
- Eleven currencies: EUR, USD, GBP, CHF, SEK, NOK, DKK, PLN, CZK, CAD and AUD.
- Coupons with a percent or amount discount and, with Stripe, Also take promotion codes of the Stripe account.
- Test mode: with test keys nobody is charged, and entries carry Test payment.
- After the payment: a payment confirmation mail in one click.
- Open payments are checked with the provider every hour.
- The entry shows status, amount, coupon, subscription status and the reference with a link to the provider.
Step by step
Create a connection
- Open the Settings workspace → section Payment and turn on Take a payment after the contact step.
- Next to Connection, click Add connection.
- Choose the provider under Service and enter a Name.
- Enter the credentials: - Stripe: Secret key (sk_… or rk_…), optionally Webhook signing secret (whsec_…). - PayPal: Client ID and Client secret of a REST app. For tests, turn on App of the PayPal sandbox (test payments). - Mollie: API key (live_… or test_…).
- Click Save connection. Access keys are stored encrypted and never shown again.
With Edit you later change the name or keys of a connection. Fill in only what changes; empty fields keep the stored values. Delete removes a connection.
Set the amount and charging
- Under Connection, choose the account that receives the payments. If it uses test keys, the note Test mode appears.
- Under Amount, choose Fixed amount and enter it under Amount in …, or choose "Result of "…"".
- Choose the Currency.
- Under Charge, choose The whole amount, A deposit (then Deposit in percent, 1 to 99) or A subscription (then Month or Year under Every).
- Under What the visitor pays for, enter the text for the payment page. Placeholders of mails work here too.
- Under Receipt to the address in, choose the e-mail field of the contact step.
- With several contact steps, set under For entries from where payment is taken, or choose Every contact step.
- Click Publish.
Create coupons
- Add a text field such as "Coupon code" to a step or the contact step.
- In the Payment section, under Coupons → Coupon code from the field, choose this field.
- Click Add coupon, enter the code and choose a percent or an amount in the currency.
- Repeat this for more codes and publish the form.
With Stripe you can also turn on Also take promotion codes of the Stripe account. Stripe's payment page then has a field for codes you created in Stripe.
Set up the Stripe webhook (recommended)
- Under Connection, choose your Stripe connection. An address appears below it.
- In Stripe, add this address as a webhook endpoint for the events
checkout.session.*,customer.subscription.*,charge.refundedandcharge.dispute.created. - Copy the endpoint's signing secret (
whsec_…). In Stripe it is under Developers → Webhooks at the endpoint. - In Funnelforms, click Enter signing secret, paste it and save.
Payment confirmation for visitors
- In the Payment section, under After the payment, click Add payment confirmation mail. This works once the contact step has an e-mail field.
- Funnelforms adds a mail to visitors under After sending with the subject "Your payment" that runs Once the payment went through. It holds amount, reference and the answers.
- Adjust subject and text under After sending. The Payment section then shows Payment confirmation and "Actions waiting for the payment: …".
Set any other action under When to Once the payment went through so it runs only after the payment.
How it works
What happens after submitting?
- Funnelforms stores the entry with Not paid yet.
- The form shows "Taking you to the payment page…" and sends the visitor to the provider.
- After paying, the provider returns the visitor to the page of the form. Funnelforms then asks the provider for the status itself.
- If the payment is paid or on its way (for example SEPA), the end of the form follows.
- When the payment comes in for the first time, actions with Once the payment went through run.
If the visitor cancels, the answers stay saved. The visitor sees "The payment was not completed. Your answers are saved; you can pay now." and Pay now.
How do coupons work?
- Codes consist of letters, digits, hyphen and underscore, at most 40 characters. Upper and lower case and spaces at the edges do not matter.
- A discount is a percentage (at most 100) or an amount in the currency. Up to 100 coupons per form.
- The discount comes off the total before a deposit is computed.
- An unknown code changes nothing; the visitor pays the full amount.
- If the result is 0, nothing is charged and the form ends as without a payment.
- The entry shows the code and the discount under Coupon.
If a code or discount is missing, Funnelforms warns "Every coupon needs a code and a discount above 0.", for duplicate codes "Two coupons have the same code."
How do I test?
The mode depends on the key: Stripe test keys (sk_test_…, rk_test_…), Mollie keys with test_ or a PayPal connection with App of the PayPal sandbox (test payments). The Payment section then shows the note Test mode: "This account uses test keys: nobody is charged, and entries mark the payments as test payments." Such entries carry Test payment. For live operation, enter the live keys with Edit or create a live connection.
When does Funnelforms learn the result?
- When the visitor returns and when you click Check status in the entry.
- Stripe: also through the webhook. It reports payments (
checkout.session.*), changes to subscriptions (customer.subscription.*), refunds (charge.refunded) and disputes (charge.dispute.created). Funnelforms then asks for the current state itself each time. - Mollie: Funnelforms passes the notification address with every payment itself, except on local test sites.
- Check: one hour after a payment starts and then every hour, Funnelforms asks all providers about payments of the last 7 days that are still open or pending. This way lost webhooks do not go unnoticed.
Which statuses are there?
| Status in the entry | Meaning |
|---|---|
| Not paid yet | Started but not completed |
| Payment pending | Paid, waiting for the bank (for example SEPA) |
| Paid | The provider has confirmed the payment |
| Payment failed | The payment did not go through |
| Payment canceled | Given up or expired |
| Refunded | Refunded in full |
| Payment disputed | Stripe only: the visitor disputed the payment with their bank (chargeback). The money is held until the dispute is decided. |
For subscriptions, the entry also shows Active, Payment overdue, Canceled, Not started or Paused under Subscription, with "monthly" or "yearly". With Stripe and Mollie, the Reference leads directly to the payment in the provider's dashboard (opens in a new tab).
What about subscriptions and deposits?
Subscriptions work with Stripe only; with another connection Funnelforms warns "Subscriptions work with Stripe only." For a deposit, Funnelforms charges the set percentage; the entry shows "charged / total". Funnelforms does not collect the rest.
Which placeholders are there?
{{payment:status}}, {{payment:amount}} and {{payment:reference}} work in mails and texts.
What does Funnelforms Free do with a form with a payment?
Free has no payments. Free cannot publish a form with a payment or with actions that wait for the payment. A form already published, for example after switching from Pro to Free, is not shown on the website by Free, so nobody can send it without paying. The settings stay saved. Free shows the Payment card for such a form. If you turn off Take a payment after the contact step there or in Pro, Funnelforms sets waiting actions back to When the entry is sent.
Best practices
- Test every connection in Test mode before you go live.
- With Stripe, set up the webhook with all four event groups so subscriptions and refunds are right in the entry.
- Use the Payment confirmation so only paid entries get a confirmation.
- State exactly what is paid for under What the visitor pays for.
- Choose coupon codes that are hard to guess.
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| When publishing: "The payment is incomplete …" | No connection or amount 0. | Choose a connection and an amount above 0 or a calculation. |
| A subscription is missing or "Subscriptions work with Stripe only." | The connection is not from Stripe. | Use a Stripe connection for subscriptions. |
| "… does not have the expected format." when saving the connection | The key is incomplete or wrong. | Copy the whole key from the provider's account. |
| A coupon has no effect. | No field or another field is chosen under Coupon code from the field, or the code is not created. | Check field and code. |
| Add payment confirmation mail is missing. | The contact step has no e-mail field. | Add an e-mail field to the contact step. |
| Entries carry Test payment. | The connection uses test keys. | Enter the live keys with Edit. |
Tips
- Visitors enter card details on the provider's page; they do not pass through your website.
- Every click on Pay now is a new attempt at the provider.
- With Mollie, Funnelforms passes the language of the form if Mollie knows it.
FAQ
Which payment providers are supported? Stripe, PayPal and Mollie, each with your own account.
Can I offer discount codes? Yes, under Coupons in the form. With Stripe you can also allow promotion codes from your Stripe account.
How do I recognise test payments? By the note Test mode in the Payment section and the badge Test payment in the entry.
Can I change the keys of a connection? Yes, with Edit at the connection. Empty fields keep the stored values.