WP PayU Donations
WordPress plugin for collecting one-time & recurring donations via PayU. Elementor widget, 6 theme presets, visual admin configurator, email receipts. Built for foundations and NGOs.
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
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.