{"id":323417,"date":"2026-06-13T23:02:17","date_gmt":"2026-06-13T23:02:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/handypay-payments\/"},"modified":"2026-06-13T23:01:40","modified_gmt":"2026-06-13T23:01:40","slug":"handypay-payments","status":"publish","type":"plugin","link":"https:\/\/en-za.wordpress.org\/plugins\/handypay-payments\/","author":23512862,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"HandyPay Payments","header_author":"HandyPay","header_description":"Accept card payments on your WordPress site and get paid to a local bank account \u2014 built for the Caribbean: Jamaica, Trinidad &amp; Tobago, St. Lucia, Antigua, Guyana and the Bahamas (plus major markets). Add pay buttons, payment links and a branded checkout via [handypay_pay] or the Gutenberg \/ Elementor \/ Bricks widgets.","assets_banners_color":"3fb45a","last_updated":"2026-06-13 23:01:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/handypay.me","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":30,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"kylekonstnar","date":"2026-06-13 23:01:40"}},"upgrade_notice":{"1.0.0":"<p>First stable release with refunds, disputes, and a redesigned admin. Re-activate once to apply database upgrades.<\/p>","0.4.0":"<p>Adds custom font uploads, the Plan &amp; Branding screen, and renames Payment Links to Payment Buttons. Re-activate the plugin once to flush rewrite rules and create the new options.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3571429,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3571429,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3571429,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3571429,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3571429,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"handypay\/pay-button":{"name":"handypay\/pay-button","title":"HandyPay Button"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The dashboard \u2014 KPI cards (today \/ 7 \/ 30 days \/ all-time), revenue chart, recent payments.","2":"Payment Buttons list \u2014 every button you've created, with status, usage, and copy URL\/shortcode actions.","3":"Create button form \u2014 amount, description, reusable toggle, expiration, appearance.","4":"The public payment landing page \u2014 clean Stripe-style checkout with your branding.","5":"Settings \u2192 Appearance \u2014 live preview with color\/font\/size\/padding controls.","6":"Plan &amp; Branding \u2014 upgrade to Pro for reduced fees + custom branding."}},"plugin_section":[],"plugin_tags":[3148,282,209782,1887,5349],"plugin_category":[45],"plugin_contributors":[267010],"plugin_business_model":[],"class_list":["post-323417","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-ecommerce","plugin_tags-payment-links","plugin_tags-payments","plugin_tags-stripe","plugin_category-ecommerce","plugin_contributors-kylekonstnar","plugin_committers-kylekonstnar"],"banners":{"banner":"https:\/\/ps.w.org\/handypay-payments\/assets\/banner-772x250.png?rev=3571429","banner_2x":"https:\/\/ps.w.org\/handypay-payments\/assets\/banner-1544x500.png?rev=3571429","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/handypay-payments\/assets\/icon.svg?rev=3571429","icon":"https:\/\/ps.w.org\/handypay-payments\/assets\/icon.svg?rev=3571429","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>HandyPay<\/strong> lets you accept card payments on your WordPress site without WooCommerce or a complicated checkout setup. Create a payment button, then drop it on a page, share it as a URL, or paste it in an email.<\/p>\n\n<h4>Why HandyPay?<\/h4>\n\n<ul>\n<li><strong>One button, three ways to use it<\/strong> \u2014 embed on a page, share a URL, paste raw HTML on any site.<\/li>\n<li><strong>Unlimited buttons<\/strong> \u2014 one for every service, product, or tier. Manage them all from one screen.<\/li>\n<li><strong>Sharable payment links<\/strong> \u2014 <code>\/handypay\/pay\/your-slug<\/code> URLs you can drop in DMs, emails, social bios.<\/li>\n<li><strong>Reusable or one-time<\/strong> \u2014 pay-me-anytime tip jar, or single-use ticket link that expires after one purchase.<\/li>\n<li><strong>Custom design<\/strong> \u2014 colors, padding, corner radius, font (built-in Matter, Google Fonts, or upload your own).<\/li>\n<li><strong>Live preview<\/strong> \u2014 see the button update as you configure it.<\/li>\n<li><strong>Built-in dashboard<\/strong> \u2014 revenue stats, recent payments, status breakdown, sparkline chart.<\/li>\n<li><strong>Powered by HandyPay<\/strong> \u2014 a complete merchant platform, including a mobile app, payouts, and dispute management.<\/li>\n<\/ul>\n\n<h4>HandyPay Pro<\/h4>\n\n<p>HandyPay Pro is an optional paid upgrade ($20\/month):<\/p>\n\n<ul>\n<li><strong>Reduced transaction fees<\/strong> on every payment.<\/li>\n<li><strong>Custom payment-page branding<\/strong> \u2014 your logo, colors, and a footer message \u2014 added by the separate HandyPay Pro add-on, installed from <a href=\"https:\/\/handypay.me\">handypay.me<\/a>.<\/li>\n<\/ul>\n\n<p>The \"Secure checkout powered by HandyPay\" credit on the payment page is off by default and only appears if you turn it on under HandyPay \u2192 Settings.<\/p>\n\n<h4>What you need<\/h4>\n\n<ol>\n<li>A HandyPay merchant account \u2014 sign up at <a href=\"https:\/\/merchant.handypay.me\/onboarding\">merchant.handypay.me<\/a> (free).<\/li>\n<li>An API key from the HandyPay portal.<\/li>\n<li>Two minutes for setup.<\/li>\n<\/ol>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Drop-in <code>[handypay_pay]<\/code> shortcode with attributes for amount, currency, description, button text, colors, font, padding, and size.<\/li>\n<li>Payment Buttons admin: create unlimited buttons, each with its own price and styling.<\/li>\n<li>Sharable payment links at clean URLs.<\/li>\n<li>Webhook reconciliation with HMAC-SHA256 signature verification.<\/li>\n<li>Built-in dashboard mirroring the HandyPay merchant portal.<\/li>\n<li>Custom font uploads (.woff2, .woff, .ttf, .otf).<\/li>\n<li>Curated Google Fonts: Inter, Roboto, Poppins, Manrope, DM Sans, Plus Jakarta, Work Sans, Space Grotesk.<\/li>\n<li>Onboarding wizard for first-time merchants.<\/li>\n<li>Test mode toggle.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the <strong>HandyPay payments API<\/strong> (<code>https:\/\/api.handypay.me<\/code>) to create payment sessions, render signed buttons, and reconcile payments through HandyPay's payment processor (<strong>Stripe<\/strong>). This connection is required for the plugin to accept payments.<\/p>\n\n<ul>\n<li><strong>When:<\/strong> when a button or payment link is rendered, when a customer starts a payment, when HandyPay sends a webhook to your site, and when the store owner views the dashboard or manages payments.<\/li>\n<li><strong>Data sent:<\/strong> payment amount and currency, button\/link descriptions, the customer's email (if provided at checkout), and your HandyPay API key for authentication. Raw card details are collected by HandyPay\/Stripe directly and are never sent to or stored on your site.<\/li>\n<li><strong>HandyPay:<\/strong> Terms \u2014 https:\/\/handypay.me\/terms \u00b7 Privacy \u2014 https:\/\/handypay.me\/privacy<\/li>\n<li><strong>Stripe (payment processor):<\/strong> Terms \u2014 https:\/\/stripe.com\/legal \u00b7 Privacy \u2014 https:\/\/stripe.com\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>handypay-payments<\/code> folder to <code>\/wp-content\/plugins\/<\/code> or install via the Plugins screen.<\/li>\n<li>Activate <strong>HandyPay Payments<\/strong> under Plugins.<\/li>\n<li>Go to <strong>HandyPay \u2192 Settings<\/strong>, paste your API key and webhook signing secret.<\/li>\n<li>Add the displayed webhook URL to your HandyPay merchant portal.<\/li>\n<li>Go to <strong>HandyPay \u2192 Payment Buttons<\/strong> and create your first button.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20woocommerce%3F\"><h3>Do I need WooCommerce?<\/h3><\/dt>\n<dd><p>No. HandyPay is standalone and works on any WordPress site, including page-builder themes like Elementor, Divi, Bricks, Beaver Builder, and the default block editor.<\/p><\/dd>\n<dt id=\"where%20does%20the%20payment%20actually%20happen%3F\"><h3>Where does the payment actually happen?<\/h3><\/dt>\n<dd><p>On a HandyPay-hosted Stripe Checkout page. Customers leave your site, complete payment, and return to your configured success page. PCI compliance is handled by HandyPay + Stripe \u2014 your WordPress site never touches card data.<\/p><\/dd>\n<dt id=\"can%20prices%20be%20tampered%20with%3F\"><h3>Can prices be tampered with?<\/h3><\/dt>\n<dd><p>No. Amounts are signed server-side when the button renders, and re-verified on the way to checkout. Customers can't modify prices via DevTools.<\/p><\/dd>\n<dt id=\"how%20are%20webhooks%20verified%3F\"><h3>How are webhooks verified?<\/h3><\/dt>\n<dd><p>HandyPay signs every webhook with HMAC-SHA256. The plugin verifies in constant time using PHP's <code>hash_equals<\/code> before processing.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20fonts%3F\"><h3>Can I use my own fonts?<\/h3><\/dt>\n<dd><p>Yes. Upload <code>.woff2<\/code>, <code>.woff<\/code>, <code>.ttf<\/code>, or <code>.otf<\/code> files via <strong>HandyPay \u2192 Fonts<\/strong>, then pick them in Settings \u2192 Appearance \u2192 Font. Each button can also override the font via the <code>font=\"...\"<\/code> shortcode attribute.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Activate per-site; each site has its own API key and settings.<\/p><\/dd>\n<dt id=\"what%20countries%20are%20supported%3F\"><h3>What countries are supported?<\/h3><\/dt>\n<dd><p>Wherever HandyPay supports onboarding merchants. See <a href=\"https:\/\/handypay.me\">handypay.me<\/a> for the current list.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First stable release.<\/li>\n<li>Refund management from the Payments screen.<\/li>\n<li>Dispute management with evidence submission.<\/li>\n<li>Redesigned create-button form and admin tables (shadcn-style), toast and confirm dialogs, and a full-screen admin app shell.<\/li>\n<li>External-services disclosure added (HandyPay API + Stripe).<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Custom font uploads (.woff2\/.woff\/.ttf\/.otf) + curated Google Fonts.<\/li>\n<li>Payment Buttons (renamed from Payment Links) with per-row Copy URL and Copy Shortcode.<\/li>\n<li>Plan &amp; Branding admin: free vs Pro, upgrade flow, branded payment page (logo, colors, footer text, hide HP branding).<\/li>\n<li>Subscription webhook handlers update the cached plan automatically.<\/li>\n<li>Dashboard nudge for free merchants to upgrade.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Payment Links (now \"Payment Buttons\"): create reusable \/ one-time \/ capped \/ expiring buttons with their own URLs.<\/li>\n<li>Public landing page at <code>\/handypay\/pay\/&lt;slug&gt;<\/code>.<\/li>\n<li><code>[handypay_pay link=\"slug\"]<\/code> shortcode mode.<\/li>\n<li>Webhooks increment use count for one-time and capped links.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Live preview on the settings page.<\/li>\n<li>Button color, hover color, padding, font size, font weight, corner radius controls.<\/li>\n<li>Size presets (Small \/ Medium \/ Large).<\/li>\n<li>Matter typeface (same as the HandyPay merchant portal).<\/li>\n<li>Built-in dashboard mirroring the HandyPay merchant portal.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Accept payments anywhere on your WordPress site with HandyPay. Drop a button, share a payment link, manage everything from one dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/323417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=323417"}],"author":[{"embeddable":true,"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kylekonstnar"}],"wp:attachment":[{"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=323417"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=323417"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=323417"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=323417"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=323417"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-za.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=323417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}