{"id":129399,"date":"2020-10-14T23:54:31","date_gmt":"2020-10-14T23:54:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/payment-page-premium\/"},"modified":"2026-05-28T00:50:42","modified_gmt":"2026-05-28T00:50:42","slug":"payment-page","status":"publish","type":"plugin","link":"https:\/\/es-mx.wordpress.org\/plugins\/payment-page\/","author":16742394,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.0","stable_tag":"1.5.0","tested":"7.0","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Payment Page | Payment Form for Stripe","header_author":"Gaucho Plugins","header_description":"description real.","assets_banners_color":"d2d3d5","last_updated":"2026-05-28 00:50:42","external_support_url":"https:\/\/paymentpageplugin.com\/support\/","external_repository_url":"","donate_link":"https:\/\/paymentpageplugin.com\/pricing\/","header_plugin_uri":"https:\/\/paymentpageplugin.com","header_author_uri":"https:\/\/gauchoplugins.com\/","rating":5,"author_block_rating":0,"active_installs":200,"downloads":19542,"num_ratings":23,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.vscode":{"tag":".vscode","author":"brandonfire","date":"2022-04-16 00:53:02"},"1.0":{"tag":"1.0","author":"brandonfire","date":"2020-10-15 02:52:41"},"1.0.1":{"tag":"1.0.1","author":"brandonfire","date":"2023-09-20 12:27:04"},"1.0.2":{"tag":"1.0.2","author":"juanobrach","date":"2021-05-04 03:41:38"},"1.0.3":{"tag":"1.0.3","author":"juanobrach","date":"2021-05-07 02:33:11"},"1.0.4":{"tag":"1.0.4","author":"brandonfire","date":"2021-08-05 20:33:42"},"1.0.5":{"tag":"1.0.5","author":"brandonfire","date":"2021-11-09 19:39:33"},"1.0.5.1":{"tag":"1.0.5.1","author":"brandonfire","date":"2021-11-20 18:32:27"},"1.0.6":{"tag":"1.0.6","author":"brandonfire","date":"2022-01-15 02:41:56"},"1.0.7":{"tag":"1.0.7","author":"brandonfire","date":"2022-01-21 01:55:50"},"1.0.8":{"tag":"1.0.8","author":"brandonfire","date":"2022-02-04 21:33:58"},"1.1":{"tag":"1.1","author":"brandonfire","date":"2022-02-21 08:37:58"},"1.1.1":{"tag":"1.1.1","author":"brandonfire","date":"2022-03-05 01:19:22"},"1.1.1.1":{"tag":"1.1.1.1","author":"brandonfire","date":"2022-03-19 02:11:03"},"1.1.2":{"tag":"1.1.2","author":"brandonfire","date":"2022-04-01 18:03:21"},"1.1.3":{"tag":"1.1.3","author":"brandonfire","date":"2022-04-19 02:00:39"},"1.2.0":{"tag":"1.2.0","author":"brandonfire","date":"2022-05-18 01:38:49"},"1.2.1":{"tag":"1.2.1","author":"brandonfire","date":"2022-06-01 22:01:40"},"1.2.2":{"tag":"1.2.2","author":"brandonfire","date":"2022-06-16 21:40:26"},"1.2.3":{"tag":"1.2.3","author":"brandonfire","date":"2022-07-02 01:00:12"},"1.2.4":{"tag":"1.2.4","author":"brandonfire","date":"2022-07-16 00:47:45"},"1.2.5":{"tag":"1.2.5","author":"brandonfire","date":"2022-07-29 19:25:44"},"1.2.6":{"tag":"1.2.6","author":"brandonfire","date":"2022-08-13 03:13:46"},"1.2.7":{"tag":"1.2.7","author":"brandonfire","date":"2022-08-27 00:53:46"},"1.2.8":{"tag":"1.2.8","author":"brandonfire","date":"2022-09-17 00:58:38"},"1.2.9":{"tag":"1.2.9","author":"brandonfire","date":"2023-07-12 17:52:51"},"1.3":{"tag":"1.3","author":"brandonfire","date":"2023-10-26 15:26:15"},"1.3.1":{"tag":"1.3.1","author":"brandonfire","date":"2024-04-23 10:10:55"},"1.3.2":{"tag":"1.3.2","author":"brandonfire","date":"2024-08-13 11:17:59"},"1.3.3":{"tag":"1.3.3","author":"brandonfire","date":"2024-08-26 07:13:45"},"1.3.4":{"tag":"1.3.4","author":"brandonfire","date":"2024-08-29 06:52:38"},"1.3.5":{"tag":"1.3.5","author":"brandonfire","date":"2024-09-02 12:41:45"},"1.3.6":{"tag":"1.3.6","author":"brandonfire","date":"2024-09-10 19:36:35"},"1.3.7":{"tag":"1.3.7","author":"brandonfire","date":"2024-09-19 17:37:27"},"1.3.8":{"tag":"1.3.8","author":"brandonfire","date":"2024-09-25 17:02:34"},"1.3.9":{"tag":"1.3.9","author":"brandonfire","date":"2024-10-08 19:22:07"},"1.4.0":{"tag":"1.4.0","author":"brandonfire","date":"2024-10-23 13:59:09"},"1.4.1":{"tag":"1.4.1","author":"brandonfire","date":"2024-12-11 12:30:15"},"1.4.10":{"tag":"1.4.10","author":"brandonfire","date":"2026-05-24 11:35:23"},"1.4.2":{"tag":"1.4.2","author":"brandonfire","date":"2024-12-30 06:37:28"},"1.4.3":{"tag":"1.4.3","author":"brandonfire","date":"2025-01-27 11:26:46"},"1.4.4":{"tag":"1.4.4","author":"brandonfire","date":"2025-07-28 01:48:34"},"1.4.5":{"tag":"1.4.5","author":"brandonfire","date":"2025-08-21 15:48:01"},"1.4.6":{"tag":"1.4.6","author":"brandonfire","date":"2025-12-16 15:52:39"},"1.4.7":{"tag":"1.4.7","author":"brandonfire","date":"2026-02-18 09:43:00"},"1.4.8":{"tag":"1.4.8","author":"brandonfire","date":"2026-02-19 06:50:49"},"1.4.9":{"tag":"1.4.9","author":"brandonfire","date":"2026-05-15 22:45:57"},"1.5.0":{"tag":"1.5.0","author":"brandonfire","date":"2026-05-28 00:50:42"}},"upgrade_notice":{"1.5.0":"<p>ACH migrated to Stripe Financial Connections (legacy Plaid path was failing live since 2026-05-15 \u2014 recommended for all ACH merchants). Plus 10 new bundled templates, webhook idempotency, money-math hardening, security bundle, and performance improvements. Recommended for all merchants.<\/p>","1.4.8":"<p>Bug fixes and payment form layout improvements. Recommended for all users.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":23},"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":2448165,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":2448165,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":2703022,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":2703022,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3551416,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Payment Page \\u2014 Live Preview\",\"description\":\"Try Payment Page in your browser. Accept Stripe & PayPal payments with beautiful, fully-customizable payment forms.\",\"author\":\"Gaucho Plugins\",\"categories\":[\"Plugin\"]},\"landingPage\":\"\\\/wp-admin\\\/plugins.php\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"options\":{\"activate\":true},\"progress\":{\"weight\":3},\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"payment-page\"}}]}"}},"all_blocks":[],"tagged_versions":["0.vscode","1.0","1.0.1","1.0.2","1.0.3","1.0.4","1.0.5","1.0.5.1","1.0.6","1.0.7","1.0.8","1.1","1.1.1","1.1.1.1","1.1.2","1.1.3","1.2.0","1.2.1","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.2.7","1.2.8","1.2.9","1.3","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.8","1.3.9","1.4.0","1.4.1","1.4.10","1.4.2","1.4.3","1.4.4","1.4.5","1.4.6","1.4.7","1.4.8","1.4.9","1.5.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":2673126,"resolution":"1","location":"assets","locale":"","width":1200,"height":630},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":2673126,"resolution":"2","location":"assets","locale":"","width":1200,"height":630},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":2673126,"resolution":"3","location":"assets","locale":"","width":1200,"height":630},"screenshot-4.png":{"filename":"screenshot-4.png","revision":2673126,"resolution":"4","location":"assets","locale":"","width":2652,"height":1758},"screenshot-5.png":{"filename":"screenshot-5.png","revision":2673126,"resolution":"5","location":"assets","locale":"","width":2616,"height":1800}},"screenshots":{"1":"Template gallery \u2014 pick from 22 designs in seconds (10 bundled in-plugin + 12 remote).","2":"Form builder admin UI \u2014 design every detail of your payment form.","3":"Apple Pay and Google Pay live on a published payment page.","4":"Stripe Connect onboarding flow \u2014 one-click via Stripe OAuth.","5":"Live-rendered confirmation page across desktop, tablet, and mobile viewports.","6":"ACH via Stripe Financial Connections \u2014 bank-linking flow in-browser."}},"plugin_section":[],"plugin_tags":[25120,155927,12482,5349,4079],"plugin_category":[41,45],"plugin_contributors":[168740,78154,183974],"plugin_business_model":[216238],"class_list":["post-129399","plugin","type-plugin","status-publish","hentry","plugin_tags-donation-form","plugin_tags-payment-form","plugin_tags-recurring","plugin_tags-stripe","plugin_tags-subscriptions","plugin_category-communication","plugin_category-ecommerce","plugin_contributors-brandonfire","plugin_contributors-freemius","plugin_contributors-gauchoplugins","plugin_business_model-commercial","plugin_committers-brandonfire","plugin_support_reps-brandonfire","plugin_support_reps-gauchoplugins"],"banners":{"banner":"https:\/\/ps.w.org\/payment-page\/assets\/banner-772x250.jpg?rev=2703022","banner_2x":"https:\/\/ps.w.org\/payment-page\/assets\/banner-1544x500.jpg?rev=2703022","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/payment-page\/assets\/icon-128x128.gif?rev=2448165","icon_2x":"https:\/\/ps.w.org\/payment-page\/assets\/icon-256x256.gif?rev=2448165","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/payment-page\/assets\/screenshot-1.jpg?rev=2673126","caption":"Template gallery \u2014 pick from 22 designs in seconds (10 bundled in-plugin + 12 remote)."},{"src":"https:\/\/ps.w.org\/payment-page\/assets\/screenshot-2.jpg?rev=2673126","caption":"Form builder admin UI \u2014 design every detail of your payment form."},{"src":"https:\/\/ps.w.org\/payment-page\/assets\/screenshot-3.jpg?rev=2673126","caption":"Apple Pay and Google Pay live on a published payment page."},{"src":"https:\/\/ps.w.org\/payment-page\/assets\/screenshot-4.png?rev=2673126","caption":"Stripe Connect onboarding flow \u2014 one-click via Stripe OAuth."},{"src":"https:\/\/ps.w.org\/payment-page\/assets\/screenshot-5.png?rev=2673126","caption":"Live-rendered confirmation page across desktop, tablet, and mobile viewports."}],"raw_content":"<!--section=description-->\n<p><strong><a href=\"https:\/\/paymentpageplugin.com\" title=\"Visit the Payment Page website\">Payment Page<\/a><\/strong> is the easiest way to accept Stripe payments on WordPress. Pick a template, connect Stripe, start collecting payments in 60 seconds. <strong>Free to start \u2014 only pay when you earn.<\/strong><\/p>\n\n<p>[youtube https:\/\/www.youtube.com\/watch?v=Nl4axLj5Hp8]<\/p>\n\n<h3>\ud83c\udfaf BUILT FOR<\/h3>\n\n<ul>\n<li><strong>Freelancers<\/strong> invoicing clients and collecting retainer deposits<\/li>\n<li><strong>Coaches &amp; Consultants<\/strong> taking deposits and selling session packages<\/li>\n<li><strong>Yoga, Fitness &amp; Wellness<\/strong> studios selling memberships and class packs<\/li>\n<li><strong>Nonprofits<\/strong> accepting one-time and recurring donations<\/li>\n<li><strong>Agencies<\/strong> invoicing monthly maintenance and managing client billing<\/li>\n<li><strong>Creators &amp; Educators<\/strong> selling courses, gated content, and subscriptions<\/li>\n<\/ul>\n\n<h3>\u26a1 KEY FEATURES<\/h3>\n\n<ul>\n<li><strong>One-page Stripe checkout<\/strong> \u2014 Apple Pay, Google Pay, SEPA, ACH (Stripe Financial Connections), recurring, one-time<\/li>\n<li><strong>22 fully-styled starter templates<\/strong> \u2014 10 bundled in-plugin (work offline) + 12 remote from paymentpageplugin.com; all fully customizable, mobile-first<\/li>\n<li><strong>Connect Stripe in 60 seconds<\/strong> \u2014 Stripe Connect onboarding handled for you<\/li>\n<li><strong>Recurring subscriptions<\/strong> \u2014 any frequency, any currency Stripe supports<\/li>\n<li><strong>Custom payment amounts<\/strong> \u2014 let customers choose donation or invoice amounts<\/li>\n<li><strong>Custom form fields<\/strong> \u2014 capture any data, stored in Stripe metadata<\/li>\n<li><strong>Prefill form fields<\/strong> \u2014 via query strings or for logged-in WordPress users<\/li>\n<li><strong>Elementor compatible<\/strong> \u2014 native widget for placing forms anywhere<\/li>\n<li><strong>HTTP webhooks<\/strong> \u2014 automate with Zapier, FluentForms, custom endpoints<\/li>\n<li><strong>PayPal Standard Checkout<\/strong> \u2014 alternative gateway, no platform fee<\/li>\n<\/ul>\n\n<h3>\ud83d\udcb0 PRICING \u2014 FREE TO START, ONLY PAY WHEN YOU EARN<\/h3>\n\n<p>The free version includes the full feature set. We charge a small <strong>2% platform fee<\/strong> on Stripe transactions to keep the plugin sustainable and improving \u2014 only when you actually collect money. No subscriptions to pay, no hidden costs, no surprises.<\/p>\n\n<p>Upgrade to <strong>Pro at $99\/year (was $149)<\/strong> to:<\/p>\n\n<ul>\n<li><strong>Remove the 2% platform fee<\/strong> \u2014 keep 100% of your Stripe revenue<\/li>\n<li><strong>Priority support<\/strong> with a 24-hour first response<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/paymentpageplugin.com\/pricing\/\">See pricing \u2192<\/a><\/p>\n\n<p><strong>14-day money-back guarantee<\/strong> on Pro. Cancel anytime.<\/p>\n\n<h3>\ud83d\udd0c INTEGRATES WITH<\/h3>\n\n<ul>\n<li><strong>Stripe<\/strong> \u2014 Stripe Connect platform integration (cards, SEPA, Apple Pay, Google Pay, ACH via Stripe Financial Connections)<\/li>\n<li><strong>PayPal<\/strong> \u2014 Standard Checkout<\/li>\n<li><strong>Elementor<\/strong> \u2014 native widget for placing forms anywhere<\/li>\n<li><strong>WooCommerce<\/strong> \u2014 HPOS-compatible (complements WooCommerce for deposits, donations, retainers, single-product checkout)<\/li>\n<li><strong>Zapier<\/strong> \u2014 webhook integration via HTTP Requests<\/li>\n<\/ul>\n\n<h3>\ud83d\udd12 SECURITY POSTURE<\/h3>\n\n<p>Payment Page takes security seriously. Our ongoing posture:<\/p>\n\n<ul>\n<li><strong>Plugin Check runs on every release<\/strong> in our CI pipeline<\/li>\n<li><strong>PHPUnit coverage<\/strong> across PHP 7.4, 8.0, 8.1, 8.2, 8.3<\/li>\n<li><strong>In-house security audit every 6 months<\/strong> (OWASP Top 10 + WP hardening + Stripe Connect best practices)<\/li>\n<li><strong>Wordfence Threat Intelligence verified<\/strong> (Feb 2026)<\/li>\n<li>All payment data flows through Stripe Elements \u2014 <strong>card numbers never touch your WordPress site<\/strong><\/li>\n<\/ul>\n\n<p>Read about our transparent security posture and CVE history at <a href=\"https:\/\/paymentpageplugin.com\/security\">paymentpageplugin.com\/security<\/a>.<\/p>\n\n<h3>\ud83c\udd9a WHY CHOOSE PAYMENT PAGE<\/h3>\n\n<p>Other Stripe form plugins focus on one-off payments. Payment Page is built on <strong>Stripe Connect<\/strong> from the ground up \u2014 the same architecture that powers Substack, Lyft, and Shopify. That means:<\/p>\n\n<ul>\n<li><strong>One-click onboarding<\/strong> via Stripe's official OAuth flow (no API keys to copy-paste)<\/li>\n<li><strong>No PCI burden<\/strong> \u2014 Stripe handles everything sensitive<\/li>\n<li><strong>Idempotent webhook processing<\/strong> \u2014 duplicate Stripe deliveries never re-charge or re-email<\/li>\n<li><strong>ACH async settlement<\/strong> properly tracked (processing \u2192 succeeded over 2-4 business days)<\/li>\n<\/ul>\n\n<p>100+ businesses processed 7,103+ payments through Payment Page. 5.0\u2605 on WordPress.org (23 reviews). 6 years in business.<\/p>\n\n<p><a href=\"https:\/\/docs.paymentpageplugin.com\/\">Read the documentation \u2192<\/a>\n<a href=\"https:\/\/paymentpageplugin.com\/pricing\/\">See pricing \u2192<\/a>\n<a href=\"https:\/\/paymentpageplugin.com\/become-an-affiliate\/\">Become an affiliate \u2192<\/a><\/p>\n\n<!--section=installation-->\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.4 or greater<\/li>\n<li>PHP version 7.4 or greater<\/li>\n<li>MySQL 5.6+ or MariaDB 10+<\/li>\n<li>cURL (required for Stripe API)<\/li>\n<li>SSL certificate (required for payments)<\/li>\n<\/ul>\n\n<h4>5-Step Setup<\/h4>\n\n<ol>\n<li><strong>Install<\/strong> the plugin from the WordPress.org plugin directory or upload the .zip via Plugins \u2192 Add New.<\/li>\n<li><strong>Activate<\/strong> the plugin.<\/li>\n<li><strong>Connect Stripe<\/strong> \u2014 click the \"Connect Stripe\" button on the welcome screen; complete Stripe's onboarding flow. (Takes ~60 seconds for existing Stripe customers.)<\/li>\n<li><strong>Choose a template<\/strong> \u2014 pick from 22 designs in the gallery (10 bundled + 12 remote) and customize.<\/li>\n<li><strong>Add the form<\/strong> to any page via shortcode <code>[payment-page-payment-form id=N]<\/code> or via the Elementor widget.<\/li>\n<\/ol>\n\n<p>You're now accepting payments. The Stripe payments dashboard reflects all transactions in real time.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20payment%20page%20free%3F\"><h3>Is Payment Page free?<\/h3><\/dt>\n<dd><p>Yes. The full feature set is free. We charge a 2% platform fee on Stripe transactions only \u2014 when you actually collect money. No subscriptions, no hidden costs. Upgrade to Pro at $99\/year to remove the fee.<\/p><\/dd>\n<dt id=\"how%20does%20the%202%25%20platform%20fee%20work%3F\"><h3>How does the 2% platform fee work?<\/h3><\/dt>\n<dd><p>When a customer pays through your Stripe Connect account, Stripe routes 2% to Payment Page automatically as the platform application fee. You receive 98% of the transaction (minus standard Stripe processing). The fee is visible in your Stripe dashboard. It applies to Stripe payments only \u2014 PayPal payments have no platform fee.<\/p><\/dd>\n<dt id=\"how%20do%20i%20remove%20the%202%25%20fee%3F\"><h3>How do I remove the 2% fee?<\/h3><\/dt>\n<dd><p>Upgrade to Pro at $99\/year. The fee is removed instantly for all future transactions. Pro also includes priority support with a 24-hour first response.<\/p><\/dd>\n<dt id=\"what%20payment%20gateways%20and%20methods%20are%20supported%3F\"><h3>What payment gateways and methods are supported?<\/h3><\/dt>\n<dd><p><strong>Stripe<\/strong> (free + Pro): Credit &amp; Debit Cards, SEPA Direct Debit, Apple Pay, Google Pay, ACH (via Stripe Financial Connections), Alipay, WeChat Pay, recurring subscriptions.<\/p>\n\n<p><strong>PayPal<\/strong> (free + Pro): PayPal Standard Checkout.<\/p><\/dd>\n<dt id=\"does%20payment%20page%20work%20with%20elementor%3F\"><h3>Does Payment Page work with Elementor?<\/h3><\/dt>\n<dd><p>Yes. Payment Page includes a native Elementor widget. Drop the widget into any Elementor section, point it at a form, and the form renders inline.<\/p><\/dd>\n<dt id=\"does%20payment%20page%20work%20with%20woocommerce%3F\"><h3>Does Payment Page work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Payment Page is HPOS-compatible (High-Performance Order Storage). It does not replace WooCommerce \u2014 it complements it for use cases where a full storefront is overkill (deposits, donations, retainers, single-product checkout).<\/p><\/dd>\n<dt id=\"are%20recurring%20subscriptions%20supported%3F\"><h3>Are recurring subscriptions supported?<\/h3><\/dt>\n<dd><p>Yes, on both free and Pro tiers. Choose any frequency (daily, weekly, monthly, annual, custom) and any currency Stripe supports.<\/p><\/dd>\n<dt id=\"can%20i%20accept%20custom%20donation%20or%20invoice%20amounts%3F\"><h3>Can I accept custom donation or invoice amounts?<\/h3><\/dt>\n<dd><p>Yes. Leave the price field empty on any plan and a \"custom amount\" input appears for the customer. Works for one-time payments and recurring donations.<\/p><\/dd>\n<dt id=\"does%20payment%20page%20support%20apple%20pay%20and%20google%20pay%3F\"><h3>Does Payment Page support Apple Pay and Google Pay?<\/h3><\/dt>\n<dd><p>Yes \u2014 both are free-tier features. Apple Pay requires a one-time domain verification step in Stripe (the plugin walks you through it). Google Pay works automatically on Chrome and Android.<\/p><\/dd>\n<dt id=\"how%20does%20ach%20work%20in%201.5.0%3F\"><h3>How does ACH work in 1.5.0?<\/h3><\/dt>\n<dd><p>Payment Page 1.5.0 uses <strong>Stripe Financial Connections<\/strong> for ACH Direct Debit (Stripe deprecated the legacy Plaid + Charges API path on 2026-05-15). Customers link their bank in-browser through Stripe's hosted UI; PaymentIntents settle asynchronously over 2-4 business days, and Payment Page records the <code>processing<\/code> \u2192 <code>succeeded<\/code> lifecycle correctly. No Plaid configuration required \u2014 the plugin handles everything via Stripe Connect.<\/p>\n\n<p>If you had ACH active before 1.5.0, see the <a href=\"https:\/\/docs.paymentpageplugin.com\">ACH migration runbook<\/a> for Stripe's Dashboard mandate-backfill instructions.<\/p><\/dd>\n<dt id=\"is%20payment%20page%20stripe%20connect%20or%20single-account%20stripe%3F\"><h3>Is Payment Page Stripe Connect or single-account Stripe?<\/h3><\/dt>\n<dd><p>Stripe Connect. You connect your own Stripe account via Stripe's official OAuth flow \u2014 Payment Page never sees your Stripe API keys. This means: one-click onboarding, no PCI burden, and full ownership of your customer data.<\/p><\/dd>\n<dt id=\"what%20about%20security%3F\"><h3>What about security?<\/h3><\/dt>\n<dd><p>Card data never touches your WordPress site \u2014 Stripe Elements collects payment details directly. Plugin Check runs on every release in our CI pipeline. We run an in-house security audit every 6 months covering OWASP Top 10 + WordPress hardening + Stripe Connect best practices. Read more at <a href=\"https:\/\/paymentpageplugin.com\/security\">paymentpageplugin.com\/security<\/a>.<\/p><\/dd>\n<dt id=\"where%20can%20i%20see%20your%20roadmap%3F\"><h3>Where can I see your roadmap?<\/h3><\/dt>\n<dd><p>Public roadmap at <a href=\"https:\/\/roadmap.paymentpageplugin.com\">roadmap.paymentpageplugin.com<\/a>. Vote for features you want next.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Docs: <a href=\"https:\/\/docs.paymentpageplugin.com\/\">docs.paymentpageplugin.com<\/a>. Free-tier support via the WordPress.org plugin forum. Pro-tier priority support with 24-hour first response via <a href=\"https:\/\/paymentpageplugin.com\/support\/\">paymentpageplugin.com\/support<\/a>.<\/p><\/dd>\n<dt id=\"where%20can%20i%20see%20your%20privacy%20policy%20and%20terms%3F\"><h3>Where can I see your Privacy Policy and Terms?<\/h3><\/dt>\n<dd><p><a href=\"https:\/\/paymentpageplugin.com\/privacy\/\">Privacy Policy<\/a> \u00b7 <a href=\"https:\/\/paymentpageplugin.com\/terms\/\">Terms of Service<\/a><\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.0<\/h4>\n\n<ul>\n<li><strong>ACH Direct Debit migration to Stripe Financial Connections<\/strong> (Shortcut #7177). Stripe deprecated the legacy ACH stack (Charges API + Tokens API + Plaid Link) on 2026-05-15; ACH attempts on the prior path were failing live for every merchant. Payment Page 1.5.0 replaces it end-to-end with the supported Financial Connections + PaymentIntent + <code>us_bank_account<\/code> flow. Existing ACH merchants should run Stripe's Dashboard mandate-backfill tool \u2014 see <a href=\"https:\/\/docs.paymentpageplugin.com\">docs.paymentpageplugin.com<\/a> for the migration runbook. Plaid settings panel removed; no merchant configuration needed.<\/li>\n<li><strong>Stripe PHP SDK bumped 15.7.0 \u2192 20.1.0<\/strong>, API version pinned to <code>2026-04-22.dahlia<\/code>. Required for Financial Connections + new ACH flow; brings ~2 years of upstream bug fixes.<\/li>\n<li><strong>10 new bundled form templates<\/strong> \u2014 Personal Trainer, Restaurant Catering, Online Course, Membership Site, Photography Booking, Event Tickets, Crowdfunding, Subscription Box, Therapy \/ Coaching, Digital Product \/ Ebook. Each ships with full category-themed styling (colors, fonts, button styling, container, payment-method theming) so the form looks polished from the first import \u2014 no manual styling required. Templates work offline; the gallery shows them alongside the 12 remote templates from paymentpageplugin.com.<\/li>\n<li><strong>Reliability: webhook signature catch + idempotency.<\/strong> Stripe webhook now catches <code>SignatureVerificationException<\/code> explicitly (returns 400, not 500 \u2014 Stripe stops retrying instead of filling debug.log with retried events). Duplicate webhook deliveries no longer re-send customer\/admin emails or re-fire submit-action HTTP webhooks; 7-day transient dedupe by event id plus belt-and-suspenders <code>is_paid<\/code> short-circuit. (Audit S1 + S2)<\/li>\n<li><strong>Reliability: failed-payment + processing events recorded.<\/strong> <code>payment_intent.payment_failed<\/code> now logged via <code>PP_Model_Log<\/code>; <code>payment_intent.processing<\/code> marks payments as pending. Critical for ACH which settles asynchronously over 2-4 business days. (Audit S5)<\/li>\n<li><strong>Reliability: subscription setup-fee race fixed.<\/strong> Replaced the legacy <code>subscriptions.create \u2192 sleep(1) \u2192 subscriptions.update<\/code> dance with Stripe's canonical <code>add_invoice_items<\/code> shape \u2014 single atomic call, no PHP-FPM worker blocked for 1 second, no race window against Stripe eventual consistency. (Shortcut #7141 \/ Audit S10 \/ Perf P7)<\/li>\n<li><strong>Reliability: PayPal webhook errors now logged instead of silently swallowed.<\/strong> Failed signature verifications, malformed payloads, unrecognized order descriptions, and capture errors all land in <code>PP_Model_Log<\/code> with explanatory context. Guards undefined array index on malformed PayPal payloads (PHP 8 warning \u2192 fatal under <code>failOnWarning<\/code> PHPUnit). (Audit S14)<\/li>\n<li><strong>Reliability: money-math hardening.<\/strong> <code>payment_page_format_price_as_non_decimal_int()<\/code> now trims + uppercases the currency code (whitespace input no longer 100x overcharges zero-decimal currencies like JPY) and uses <code>round(half-up)<\/code> instead of <code>intval()<\/code> (IEEE-754 float drift on prices like $0.99 no longer truncates a cent). Locked by Tier-A property-based tests. (Audit M-1, M-2)<\/li>\n<li><strong>Reliability: rewrite-rules auto-flush on upgrade.<\/strong> Version-gated <code>flush_rewrite_rules()<\/code> on <code>init<\/code> ensures the <code>payment-form\/{slug}\/<\/code> permalink works immediately after upgrade \u2014 fixes a 404 on freshly-imported forms when the activation hook's flush was hijacked by Freemius opt-in redirect.<\/li>\n<li><strong>Security: Stripe Connect callback now requires admin capability and a single-use state token.<\/strong> The previous endpoint was <code>permission_callback = __return_true<\/code> \u2014 an attacker who obtained an encrypted credentials blob could trick an admin into silently overwriting the site's Stripe account credentials via a drive-by <code>&lt;img src=\"...\"&gt;<\/code>. 1.5.0: callback requires <code>current_user_can( payment_page_settings )<\/code> AND a server-stored, single-use, 10-minute state token bound to the admin who started the connect flow. (Shortcut #7142 \/ Audit F001)<\/li>\n<li><strong>Security: template import no longer runs PHP <code>unserialize()<\/code> on remote data.<\/strong> The previous path called <code>maybe_unserialize()<\/code> on metadata fetched from the company API server \u2014 a textbook PHP Object Injection \/ RCE-class vector if the API server were compromised. 1.5.0: pattern-rejects PHP-serialized strings; scalars and arrays pass through; <code>add_post_meta()<\/code> handles serialization safely. (Shortcut #7144 \/ Audit F003)<\/li>\n<li><strong>Security: hardening bundle.<\/strong> Settings::update() now recursively sanitizes nested arrays via wp_kses_post (was top-level only \u2014 admin nested-XSS surface). Payment::sync_details now uses HMAC-SHA-256 + <code>wp_salt('auth')<\/code> instead of <code>md5(NONCE_SALT.$id)<\/code>; the literal-salt fallback for misconfigured sites is removed (fail-closed). Migration AJAX handler nonce-protected. force-db-table-integrity action nonce-protected (Site Health link emits the matching nonce). <code>data:<\/code> protocol dropped from admin-notice wp_kses() allow-list. <code>$_GET['page']<\/code> reads now sanitize_text_field( wp_unslash() ). Skeleton ORM <code>listWhere<\/code>\/<code>listByIds<\/code> now use column allow-lists derived from each model's <code>$fields<\/code> map. Per-IP rate limit on the unauthenticated <code>\/payment\/sync-details<\/code> endpoint (12 req\/min). Identity fields (name, email) sanitize-on-write. (Audit F004 + F005 + F006 + F008 + F010 + F011 + F012 + S11 + S12 + S13)<\/li>\n<li><strong>Performance: conditional frontend enqueue<\/strong> \u2014 Payment Page's CSS+JS+inline localized blob no longer loads on every page of your site. Detection runs at <code>template_redirect<\/code>; assets enqueue only when a <code>[payment-page-payment-form]<\/code> shortcode, an Elementor payment-form widget, or a <code>pp_payment_form<\/code> singular is present. Single biggest LCP\/TBT improvement in this release. Use <code>add_filter('payment_page_force_universal_interface', '__return_true')<\/code> for popup-form mounts that detection can't reach. (Audit P1)<\/li>\n<li><strong>Performance: option no longer autoloaded.<\/strong> <code>payment_page_settings<\/code> is now <code>autoload=no<\/code> \u2014 removes per-request memory cost on every WP request. One-time idempotent migration flips the autoload flag on upgrade. (Audit P3)<\/li>\n<li><strong>Performance: admin + Elementor function files lazy-loaded.<\/strong> Frontend requests no longer parse admin or Elementor function files unless Elementor is actually active. (Audit P4)<\/li>\n<li><strong>Performance: jQuery UI base theme bundled locally<\/strong> instead of loaded from <code>code.jquery.com<\/code>. Removes a render-blocking third-party request from the Elementor editor. (Audit P8)<\/li>\n<li><strong>Performance: distributed plugin zip slimmed.<\/strong> New <code>.distignore<\/code> strips dev artifacts (tests\/, composer.json\/lock, CodeKit project files, source maps, .git, .github, README.md, changelog.txt) from the wp.org and Freemius release zips. (Audit P11)<\/li>\n<li><strong>Admin UX: WP notices now position above the Payment Page admin chrome.<\/strong> Plugin notices from other plugins (Wordfence, WooCommerce, etc.) no longer sandwich between Payment Page's nav and form content. Fixes a long-standing layout bug on PP admin pages running alongside multi-plugin stacks.<\/li>\n<li><strong>Confirmation Email Builder GA v2<\/strong> (Shortcut #6932). Strategy A read-time fallback ships the GA email builder out of BETA; backcompat for legacy <code>email_from<\/code> \/ <code>email_to<\/code> schema; per-recipient subject editing; HTML body with auto-generated plaintext AltBody; merge tags (<code>{name}<\/code>, <code>{email}<\/code>, <code>{amount}<\/code>, etc.); \"Send test emails\" button in the form editor.<\/li>\n<li><strong>Stripe Connect webhook auto-provision v2<\/strong> (Shortcut #5904). Idempotent webhook endpoint creation on the connected account during Connect OAuth; reconnect dedupe; signing secret persisted automatically. Merchants no longer have to paste webhook secrets manually.<\/li>\n<li><strong>WP-CLI <code>wp payment-page<\/code> namespace<\/strong> \u2014 <code>verify-integrity<\/code> (cross-table DB invariant check), <code>retry-stuck-pi --id=N<\/code> (recover ACH PaymentIntents stuck in <code>processing<\/code> state), <code>dump-payments<\/code> (operational JSON dump for support triage). Loaded only under WP-CLI; zero overhead on regular requests. Full output contract documented at <code>docs\/wp-cli-contract.md<\/code> so third-party tooling can depend on stable JSON shapes.<\/li>\n<li><strong>Hygiene: strict-mode-blocking uninstall.<\/strong> New <code>uninstall.php<\/code> + 4-guard <code>Uninstaller<\/code> cleanly drops all 5 PP tables + ~40 wp_options + every CPT post + transients when a merchant deletes the plugin \u2014 BUT only if they opt in via <code>Settings \u2192 Advanced \u2192 Uninstall behavior: destroy<\/code>. Default is <code>preserve<\/code> so existing merchants are unaffected. Plus a guard against accidental deletion when payment activity exists in the last 90 days. Fixes the wp.org Plugin Check \"Plugin should cleanly uninstall\" finding.<\/li>\n<li><strong>Observability hooks<\/strong> at 5 critical paths via <code>do_action('pts_increment_counter', ...)<\/code> \u2014 webhook idempotency (hit\/miss), webhook payment success, ACH FC session creation, money conversion, rate-limit drops. Production: zero listeners \u2192 zero overhead. Test environments + monitoring scripts can attach counters without changing source semantics.<\/li>\n<li><strong>Quality gate: PHPStan level 5<\/strong> with the szepeviktor\/phpstan-wordpress preset now runs in CI on every PR. Baseline freezes existing warnings; gate-fails on any NEW warning matching the 7 known-bug patterns (see <code>docs\/wp-cli-contract.md<\/code> for triage notes).<\/li>\n<li><strong>Test suite expansion:<\/strong> 230 PHPUnit Tier-A\/B\/C unit tests (685 assertions, 0.6s runtime) covering money correctness, webhook idempotency, AJAX security matrix, cron lifecycle, DB integrity, uninstall strict-mode, observability emission, WP-CLI contract, conditional-enqueue regression-lock, subscription-lifecycle gap (fixture-driven). Plus payments-grade Playwright suite at <code>qa-harness\/playwright\/specs\/payments-grade\/<\/code> (mastermind) covering webhook replay, concurrent webhook race, dispute lifecycle, ACH stuck-PI, migration chain, refund semantics, PayPal sig timestamp, rate-limit, performance budgets, visual regression, license-tier gating.<\/li>\n<li><strong>Compat:<\/strong> Stripe SDK bump (above) requires PHP 7.4+ (already our minimum); WP 7.0 tested.<\/li>\n<li><strong>Docs:<\/strong> new ACH migration runbook + admin notice pointing merchants to Stripe's Dashboard mandate-backfill tool. Removes the previous Plaid configuration walkthrough.<\/li>\n<\/ul>\n\n<h4>1.4.10<\/h4>\n\n<ul>\n<li>Compat: WP 7.0 readiness \u2014 bump <code>Requires PHP<\/code> to 7.4 (matches WP 7.0's runtime floor) and <code>Tested up to<\/code> to 7.0. No functional changes.<\/li>\n<\/ul>\n\n<h4>1.4.9<\/h4>\n\n<ul>\n<li>Fix: admin \"Connect Stripe\" button spun forever for fresh installs; the dashboard JS was reading the payment-gateway map from <code>configuration.payment_gateway<\/code> (always undefined) instead of <code>data.payment_gateway<\/code>. Shortcut #6953.<\/li>\n<li>Fix: \"Cookie check failed\" no longer blocks the payment form on desktop browsers that restrict third-party cookies (Safari ITP, Firefox Enhanced Tracking Protection, ad-blockers). Stripe.js is now initialized with <code>advancedFraudSignals: false<\/code> by default; sites that want the full Radar advanced-signals fingerprinting back can opt in via the new <code>payment_page_stripe_advanced_fraud_signals<\/code> filter. Shortcut #6937.<\/li>\n<li>Fix: Elementor's widget editor (including the built-in Form widget) no longer breaks when Payment Page is active. Our Elementor control scripts called the deprecated <code>jQuery(window).load(fn)<\/code>, removed in jQuery 3.0; switched to <code>jQuery(window).on('load', fn)<\/code> across all six bundled control scripts. Shortcut #3807.<\/li>\n<li>Fix: \"Show Payment Details\" toggle now hides the post-payment details template on forms built with the Elementor widget. The previous check only matched <code>'no'<\/code> (our custom builder's off-value) and missed <code>''<\/code> (Elementor's SWITCHER off-value). Shortcut #3993.<\/li>\n<li>Fix: WP Rocket (and other page-cache plugins) no longer cache pages containing a payment form. The form HTML carries per-request data (uniqid, browser-detected wallet flag, Stripe publishable_key) that was being served stale to subsequent visitors and showing as \"This wallet is not compatible in your browser\". The form now sets <code>DONOTCACHEPAGE<\/code> on render and excludes its inline localized config from WP Rocket's JS combine \/ minify \/ delay passes. Shortcut #3731.<\/li>\n<\/ul>\n\n<h4>1.4.8<\/h4>\n\n<ul>\n<li>Bug fixes.<\/li>\n<li>Payment form layout fixes.<\/li>\n<\/ul>\n\n<p>See our full changelog at <a href=\"https:\/\/docs.paymentpageplugin.com\/changelog\/changelog\">docs.paymentpageplugin.com\/changelog<\/a>.<\/p>","raw_excerpt":"The easiest way to accept Stripe payments on WordPress. 22 starter templates, Apple Pay + Google Pay, ACH via Stripe Financial Connections.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/129399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=129399"}],"author":[{"embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brandonfire"}],"wp:attachment":[{"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=129399"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=129399"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=129399"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=129399"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=129399"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-mx.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=129399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}