DOCS

Payment Providers

Fundations supports four payment providers. PayPal is included in the free plugin. Mollie, Stripe, and the WooCommerce integration require Fundations Pro with an active license.

Payment providers settings tabs

Overview

ProviderPluginPayment methodsBest for
PayPalFreePayPal wallet, Pay Later, card via PayPalQuick setup, global reach
MollieProiDEAL, Credit card, Bancontact, SEPA Direct Debit, Apple Pay, Google Pay, SOFORT, Giropay, EPS, Przelewy24, Belfius, KBC, PayPal via MollieEurope, especially NL/BE/DE
StripeProCard (Visa, Mastercard, Amex), iDEAL, BancontactInternational card payments
WooCommerceProAny WooCommerce payment gatewaySites already running WooCommerce

How provider selection works

Donors only see providers that are both enabled in Fundations settings and have valid API credentials. The donation form reads the get_fund_allowed_payment_providers filter to determine which provider slugs are accepted. Submitting a donation with a provider that is disabled results in an error and no charge.

You can activate more than one provider at the same time. When multiple providers are enabled, each appears as a selectable option on the donation form.

Choosing a provider

Netherlands, Belgium, or broader Europe: Mollie covers the widest range of local European payment methods and is the recommended choice for European campaigns.

International or primarily card-based: Stripe is a reliable option for campaigns where donors mostly pay by card and are located outside Europe.

Simplest possible setup: PayPal requires only a Business account and client ID/secret. It is available without a Pro license.

Already using WooCommerce: The WooCommerce integration lets campaigns attach physical or digital products to a donation and routes order fulfilment through your existing WooCommerce setup.

Test mode

Every provider supports a sandbox or test mode. Always verify your complete payment flow in test mode before accepting real donations. Each provider’s page explains how to switch between test and live.

Thank-you page

After a payment completes, donors are sent to a thank-you page. The URL is resolved in this order:

  1. A per-block thank-you page set in the donation form block settings
  2. The global get_fund_donation_thank_you_page option (set in Fundations settings)
  3. The fundraiser’s own page as a fallback

Webhook URLs

All three providers use asynchronous webhooks to confirm payments. The webhook URLs are:

ProviderWebhook URL
PayPalhttps://yoursite.com/wp-json/get-fund/v1/paypal-webhook
Molliehttps://yoursite.com/wp-json/get-fund/v1/mollie-webhook
Stripehttps://yoursite.com/wp-json/get-fund/v1/stripe-webhook

These URLs must be publicly reachable. Local development environments (localhost, ngrok without HTTPS, sites behind a firewall) will not receive webhooks.

Developer reference

Filters

FilterSignaturePurpose
get_fund_allowed_payment_providers( string[] $providers )Whitelist of accepted provider slugs. Default: ['mollie', 'stripe', 'paypal', 'test', '']. Add or remove slugs to control which providers the form accepts.
get_fund_create_payment( WP_Error $default, string $provider, int $donation_id, float $amount, string $description, string $donor_email )Primary payment dispatch. Return ['payment_id' => string, 'payment_url' => string] to redirect the donor, or a WP_Error to abort. PRO hooks in at priority 10 for mollie and stripe.
get_fund_mollie_payment_methods( array $methods )Returns the list of available Mollie methods with icons. PRO hooks in and returns cached Mollie API data. Structure per entry: ['id', 'name', 'image_1x', 'image_2x', 'image_svg'].
get_fund_donation_redirect_url( string $return_url, int $donation_id )Filters the donor redirect URL after payment. Applied in the Mollie path only.

Actions

ActionSignatureFired by
get_fund_donation_paid( int $donation_id )Mollie and Stripe webhooks and return handlers on confirmed payment. NOT fired by PayPal (PayPal fires get_fund_donation_completed directly).
get_fund_donation_completed( int $donation_id, array $data )All three providers on confirmed payment. $data contains amount, action_id, donor_name, donor_email.
get_fund_donation_status_transition( int $donation_id, string $new_status, string $old_status )Mollie on every status change (paid, cancelled, failed).

Adding a custom payment provider

// 1. Allow the provider slug
add_filter( 'get_fund_allowed_payment_providers', function( $providers ) {
    $providers[] = 'my_provider';
    return $providers;
} );

// 2. Handle payment creation
add_filter( 'get_fund_create_payment', function( $default, $provider, $donation_id, $amount, $description, $email ) {
    if ( $provider !== 'my_provider' ) {
        return $default;
    }
    // Create payment with your API
    $result = my_provider_create_payment( $amount, $email, $description );
    if ( is_wp_error( $result ) ) {
        return $result;
    }
    return [
        'payment_id'  => $result['id'],
        'payment_url' => $result['checkout_url'],
    ];
}, 10, 6 );