{"id":348903,"date":"2026-08-07T13:40:49","date_gmt":"2026-08-07T13:40:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/custom-donations-for-stripe\/"},"modified":"2026-08-07T13:40:22","modified_gmt":"2026-08-07T13:40:22","slug":"flexible-donations-for-stripe","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/flexible-donations-for-stripe\/","author":21005333,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.3.0","stable_tag":"3.3.0","tested":"7.0.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Flexible Donations for Stripe","header_author":"Mohd Akram","header_description":"Accept one-time and recurring donations via Stripe Checkout with custom amounts, sandbox testing, and webhook-based confirmation.","assets_banners_color":"8986f0","last_updated":"2026-08-07 13:40:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/iamakram22\/flexible-donations-for-stripe","header_author_uri":"https:\/\/github.com\/iamakram22","rating":0,"author_block_rating":0,"active_installs":0,"downloads":24,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.3.0":{"tag":"3.3.0","author":"iamakram","date":"2026-08-07 13:40:22"}},"upgrade_notice":{"3.3.0":"<p>Upgrading from an earlier version? Settings, donation records, shortcode, and webhook endpoint are migrated automatically. After upgrading, update your Stripe Dashboard webhook URL to <code>\/wp-json\/fdfs\/v1\/webhook<\/code>.<\/p>","3.1.0":"<p>New installs default to AJAX submission. If your host blocks <code>admin-ajax.php<\/code> for visitors, switch <strong>Submission Method<\/strong> to REST API in settings.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3637930,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3637930,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3637930,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3637930,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3637930,"resolution":"1","location":"assets","locale":"","width":1536,"height":1024},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3637930,"resolution":"2","location":"assets","locale":"","width":864,"height":1821}},"screenshots":{"1":"Donation form with predefined amount buttons, custom amount input, and one-time \/ recurring options","2":"Settings page with Stripe API configuration, sandbox test mode, donation and email settings"}},"plugin_section":[],"plugin_tags":[25120,5800,6593,126532,15439],"plugin_category":[45],"plugin_contributors":[274802],"plugin_business_model":[],"class_list":["post-348903","plugin","type-plugin","status-publish","hentry","plugin_tags-donation-form","plugin_tags-donations","plugin_tags-payment-gateway","plugin_tags-recurring-donations","plugin_tags-webhook","plugin_category-ecommerce","plugin_contributors-iamakram","plugin_committers-iamakram"],"banners":{"banner":"https:\/\/ps.w.org\/flexible-donations-for-stripe\/assets\/banner-772x250.png?rev=3637930","banner_2x":"https:\/\/ps.w.org\/flexible-donations-for-stripe\/assets\/banner-1544x500.png?rev=3637930","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/flexible-donations-for-stripe\/assets\/icon-128x128.png?rev=3637930","icon_2x":"https:\/\/ps.w.org\/flexible-donations-for-stripe\/assets\/icon-256x256.png?rev=3637930","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/flexible-donations-for-stripe\/assets\/screenshot-1.png?rev=3637930","caption":"Donation form with predefined amount buttons, custom amount input, and one-time \/ recurring options"},{"src":"https:\/\/ps.w.org\/flexible-donations-for-stripe\/assets\/screenshot-2.png?rev=3637930","caption":"Settings page with Stripe API configuration, sandbox test mode, donation and email settings"}],"raw_content":"<!--section=description-->\n<p>Flexible Donations for Stripe lets you accept donations directly through <a href=\"https:\/\/stripe.com\/checkout\">Stripe Checkout<\/a>, the PCI-compliant hosted payment page. Donations go straight to your Stripe account - no transaction fees beyond Stripe's own.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>One-time &amp; recurring donations<\/strong> - donors choose either payment type<\/li>\n<li><strong>Custom amount input<\/strong> - donors enter any amount they want<\/li>\n<li><strong>Predefined amount buttons<\/strong> - quick-select popular donation amounts<\/li>\n<li><strong>Flexible billing intervals<\/strong> - daily, weekly, monthly, quarterly, or yearly<\/li>\n<li><strong>Sandbox \/ Test mode<\/strong> - store separate test keys and switch live\/test anytime without touching your live keys<\/li>\n<li><strong>Email confirmations<\/strong> - automatic thank-you emails with dynamic placeholders<\/li>\n<li><strong>Donation tracking<\/strong> - every session logged in the database<\/li>\n<li><strong>Webhook support<\/strong> - real-time payment confirmation via Stripe webhooks<\/li>\n<li><strong>AJAX or REST API submission<\/strong> - choose between <code>admin-ajax.php<\/code> and the WordPress REST API if your host blocks AJAX for visitors<\/li>\n<li><strong>Multi-currency<\/strong> - works with any Stripe-supported currency<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<p>The plugin renders a shortcode form. When a donor submits it, a Stripe Checkout Session is created and the donor is redirected to Stripe's hosted payment page. Stripe sends a webhook back to your site to confirm the payment, mark the donation completed, and send the thank-you email.<\/p>\n\n<p>This plugin is an interface to the <a href=\"https:\/\/stripe.com\">Stripe<\/a> payment service. By configuring it with your Stripe API keys you consent to sending donation data (donor email and amount) to Stripe for processing. Review Stripe's <a href=\"https:\/\/stripe.com\/legal\/ssa\">Terms of Service<\/a> and <a href=\"https:\/\/stripe.com\/privacy\">Privacy Policy<\/a> before use.<\/p>\n\n<h4>Live vs Test mode<\/h4>\n\n<ul>\n<li><strong>Live mode<\/strong> - processes real payments with your <code>sk_live_<\/code> keys<\/li>\n<li><strong>Test mode<\/strong> - processes test payments with <code>sk_test_<\/code> keys (use test card <code>4242 4242 4242 4242<\/code>)<\/li>\n<\/ul>\n\n<p>Your live keys are stored separately and are never touched when you switch modes. A warning banner is shown in settings while test mode is active.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin does not collect, store, or transmit any personal data on its own. Donation information (donor email address and amount) is sent to Stripe, the payment processor, when creating a checkout session. Data is stored in your site's database (<code>fdfs_donations<\/code> table) for donation tracking purposes.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>flexible-donations-for-stripe<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Go to <strong>Settings \u2192 Stripe Integration<\/strong> and enter your Stripe Secret Key, Publishable Key, and Webhook Secret (from <a href=\"https:\/\/dashboard.stripe.com\/developers\">Stripe Dashboard \u2192 Developers<\/a>)<\/li>\n<li>Add the <code>[fdfs_donation_form]<\/code> shortcode to any page<\/li>\n<\/ol>\n\n<h4>Webhook setup<\/h4>\n\n<ol>\n<li>In Stripe Dashboard, go to <strong>Developers \u2192 Webhooks<\/strong> and click <strong>Add endpoint<\/strong><\/li>\n<li>Enter your webhook URL: <code>https:\/\/yoursite.com\/wp-json\/fdfs\/v1\/webhook<\/code><\/li>\n<li>Subscribe to these events:\n\n<ul>\n<li><code>checkout.session.completed<\/code><\/li>\n<li><code>invoice.payment_succeeded<\/code><\/li>\n<li><code>customer.subscription.deleted<\/code><\/li>\n<\/ul><\/li>\n<li>Copy the signing secret (<code>whsec_...<\/code>) and paste it in the plugin settings<\/li>\n<li>If using test mode, create a second webhook endpoint in Stripe's test mode and paste its secret in the test webhook field<\/li>\n<\/ol>\n\n<h4>Composer note<\/h4>\n\n<p>The Stripe PHP SDK is bundled with the plugin, so no Composer installation is required.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20a%20stripe%20account%20required%3F\"><h3>Is a Stripe account required?<\/h3><\/dt>\n<dd><p>Yes. The plugin works with any Stripe account. Free plan is sufficient for donations.<\/p><\/dd>\n<dt id=\"are%20there%20any%20transaction%20fees%3F\"><h3>Are there any transaction fees?<\/h3><\/dt>\n<dd><p>The plugin itself is free. Payments go directly to your Stripe account and are subject only to Stripe's standard processing fees.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20without%20https%3F\"><h3>Can I use it without HTTPS?<\/h3><\/dt>\n<dd><p>Stripe Checkout works on HTTP, but a valid SSL certificate is strongly recommended and required for many Stripe features.<\/p><\/dd>\n<dt id=\"how%20do%20i%20change%20where%20donors%20return%20after%20payment%3F\"><h3>How do I change where donors return after payment?<\/h3><\/dt>\n<dd><p>Set the <strong>Donation Page Path<\/strong> in Settings \u2192 Stripe Integration. This is the path of the page containing the donation form (default: <code>\/support-us<\/code>).<\/p><\/dd>\n<dt id=\"which%20payment%20methods%20are%20supported%3F\"><h3>Which payment methods are supported?<\/h3><\/dt>\n<dd><p>Cards through Stripe Checkout. Stripe handles the full payment experience.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>Rebranded as Flexible Donations for Stripe with the flexible-donations-for-stripe slug<\/li>\n<li>Upgraded Stripe PHP SDK to v21.1.1<\/li>\n<li>Fixed settings page slug to use the plugin prefix instead of a generic word<\/li>\n<li>Added automatic migration of legacy settings, donations table, shortcode, and webhook endpoint from the pre-3.3.0 version<\/li>\n<li>Added cache-proof nonce refresh so donations work on pages served from cache<\/li>\n<li>Added optional donation note field (configurable in settings) stored in Stripe metadata and the donations table<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>Renamed to Custom Donations for Stripe<\/li>\n<li>Fixed escaping and input sanitization issues flagged by the Plugin Check tool<\/li>\n<li>Fixed direct database query warnings flagged by the Plugin Check tool<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>Added Sandbox \/ Test mode with separate test keys and a live\/test toggle<\/li>\n<li>Added warning banner when test mode is active<\/li>\n<li>Added donation page path setting for Stripe redirect URLs<\/li>\n<li>Added configurable statement descriptor shown on donor bank statements<\/li>\n<li>General cleanup for WordPress.org compliance<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Added REST API submission method to work around <code>admin-ajax.php<\/code> 403 errors for non-logged-in users<\/li>\n<li>Added email template support with dynamic placeholders<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added email template support with dynamic placeholders<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>One-time and recurring donation support<\/li>\n<li>Custom amount input<\/li>\n<li>Predefined amount buttons<\/li>\n<li>Multi-interval recurring options (daily, weekly, monthly, quarterly, yearly)<\/li>\n<li>Stripe webhook integration<\/li>\n<li>Email confirmations<\/li>\n<li>Database donation tracking<\/li>\n<li>Admin settings page with secure key storage<\/li>\n<\/ul>","raw_excerpt":"Accept one-time and recurring donations via Stripe Checkout with custom amounts, sandbox testing, and webhook-based confirmation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/348903","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=348903"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/iamakram"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=348903"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=348903"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=348903"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=348903"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=348903"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=348903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}