Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/uszekkk/wp-payu-donations/archive/refs/heads/master.zipA WordPress plugin for collecting one-time and recurring donations via PayU (Europe). Full UI customization, Elementor widget, theme presets, configurable email receipts — everything you need for a donation page.
Built for foundations, NGOs, and nonprofits in Poland and CEE.
Features
- One-time donations — preset amounts + custom amount, redirect to PayU (BLIK, bank transfer, cards)
- Monthly subscriptions — PayU Secure Form for card capture, automatic monthly charges via WP-Cron
- Elementor widget — drag-and-drop with live preview, all options in the panel
- Visual admin configurator — colors, amounts, texts, extra fields — no code needed
- 6 theme presets — Default (Orange), Dark, Minimal, Ocean, Forest, Rose — or set custom colors
- Email receipts — configurable confirmation email to donors with placeholders
- Extra form fields — optional phone, message/dedication, marketing consent
- Custom CSS — textarea in admin for advanced styling
- Admin dashboard — donations list with filters/search, subscriptions management
- Security — AES-256-GCM encrypted tokens, webhook signature verification, rate limiting
- i18n ready — all strings translatable, auto-detects WordPress locale
- Multi-currency — PLN, EUR, USD, CZK, GBP, HUF, RON, BGN, HRK
- Sandbox mode — built-in test credentials, zero config to start
Requirements
- WordPress 5.8+
- PHP 7.4+ with
opensslextension - PayU account (Europe) — register here
- HTTPS required for card payments
Installation
- Download the latest release or clone this repo
- Upload
fs-payu-donations/towp-content/plugins/ - Activate in WordPress Admin > Plugins
- Configure in PayU Donations > Settings
- Go to Settings > Permalinks and click "Save Changes"
- Add the donation form to any page:
Option A — Shortcode:
[fs_payu_donate]
Option B — Elementor: Search "PayU Donation Form" in the Elementor widget panel.
Admin Panel
PayU Donations > Appearance
Visual configurator with:
- Theme presets — select from 6 built-in themes or set custom colors
- Color pickers — primary, text, background, toggle colors (WordPress native color picker)
- Amounts — preset values, default selection, min/max
- Texts — title, description, button text
- Form options — monthly tab on/off, default tab, legal page URLs
- Extra fields — phone, message, marketing consent (toggle each on/off)
- Custom CSS — textarea for advanced styling
- Live preview — see the form right on the settings page
PayU Donations > Settings
- Organization name and currency
- PayU credentials (POS ID, MD5 Key, Client Secret — encrypted at rest)
- Sandbox / Production toggle
- Thank you / error page URLs
- Donor email receipt — enable/disable, custom subject and body with placeholders:
{donor_name},{amount},{org_name},{date},{payment_type}
- Subscription failure settings and admin notification email
PayU Donations > Donations
List table with search, filters (status, type), sortable columns.
PayU Donations > Subscriptions
Active/cancelled/failed subscriptions with cancel action.
Shortcode Options
All options have admin defaults — the shortcode works with zero attributes:
[fs_payu_donate
amounts="10,20,50,100"
default_amount="50"
theme="default" // default, dark, minimal, ocean, forest, rose, custom
color_primary="#FD9800" // only with theme="custom"
color_dark="#0F172A"
color_bg="#FFFFFF"
color_cream="#FEF9E1"
button_text="Donate"
title="Support our mission"
description="Your help matters"
show_monthly="true"
default_tab="one_time"
min_amount="1"
max_amount="50000"
privacy_url="/privacy-policy"
regulations_url="/terms"
class="my-custom-class"
]
Elementor Widget
The widget provides all shortcode options as Elementor controls:
- Content tab — title, description, amounts, button text, monthly toggle, default tab
- Style tab — theme preset dropdown, custom color pickers (show when theme = Custom)
How It Works
One-time donations
User picks amount → enters email → clicks "Donate" → redirected to PayU → pays via BLIK/transfer/card → returns to thank-you page → webhook updates status → receipt email sent
Monthly subscriptions
User picks amount → enters email + card (PayU Secure Form iframe) → first payment with 3DS → PayU returns reusable token (TOKC_) → encrypted in DB → WP-Cron charges monthly → receipt email each month
Testing (Sandbox)
Leave credentials empty with Sandbox mode on — plugin auto-uses PayU test POS.
Test card: 4444 3333 2222 1111 / CVV 123 / Expiry 12/29
Security
- Card data handled entirely by PayU's iframe — never touches your server
- Tokens encrypted with AES-256-GCM (authenticated encryption)
- Webhook signatures verified via MD5/SHA-256 (timing-safe)
- All inputs sanitized, outputs escaped, queries parameterized
- Rate limiting: 5 attempts per IP per 10 minutes
- API secrets encrypted at rest
WP-Cron Note
For reliable monthly charges, set up a real server cron:
*/15 * * * * wget -q -O /dev/null https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
License
GPL-2.0-or-later. See LICENSE.
Contributing
Issues and PRs welcome. Built by uszekkk and open-sourced for the nonprofit community.