HireZoot Application Fees
Add paid application fees to HireZoot job listings. Collect payment via Razorpay (UPI/cards) or manual UPI + QR/UTR, redirect applicants to a payment page, and send receipt, confirmation, and reminder emails. GPL-licensed WordPress plugin by Sandip Das.
by Sandip Das · github.com/sandy5rr/hirezoot-application-fees · website
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/sandy5rr/hirezoot-application-fees/archive/refs/heads/main.zipReadme
HireZoot Application Fees
Optional application fees for HireZoot (WP Job Openings).
Applicants use the normal HireZoot form. If the job has a fee, the application is saved as payment pending, the candidate is redirected to a payment page, and emails are sent (receipt, paid confirmation, abandoned-payment reminder).
Version: 1.1.1
Requires: WordPress 6.0+, PHP 7.4+, HireZoot (WP Job Openings) active
Developer
Sandip Das
Fiverr: www.fiverr.com/sandy5rr
If needed, please connect for customization, support, or further development.
Why a separate plugin (not the theme)?
- Survives theme switches
- Keeps design themes focused on layout
- Safe place for payment keys, webhooks, and fee logic
- Reusable on any HireZoot site
Features
| Area | What you get |
|---|---|
| Job edit | “Application Fee” meta box — enable, amount, label |
| Applications | Status: none / pending / paid / failed / waived |
| Admin | List column + side meta box; manual status override |
| Redirect | After apply → /job-application-pay/{id}/?token=… |
| Emails | Receipt + pay link; paid confirmation (applicant + admin); hourly reminder if still pending |
| Razorpay | Order create + Checkout.js + HMAC signature verify → paid |
| Manual UPI | UPI ID, browser-side QR (no third-party QR API), deep link, UTR form |
| Security | Pay token, rate-limited UTR, optional auto-complete off by default |
| Settings | Job Openings → Application Fees |
Installation
- Copy
hirezoot-application-feesintowp-content/plugins/ - Activate HireZoot Application Fees
- Activate HireZoot (WP Job Openings) if not already
- Job Openings → Application Fees — currency + Razorpay or Manual UPI
- Edit a job → enable fee + amount
- If payment links 404: Settings → Permalinks → Save
Payment flow
Apply (HireZoot form)
↓
awsm_job_application_submitted
↓
Fee job? ──no──► status: none (normal)
│
yes
↓
status: pending + deadline (5 min window) + pay token
↓
Redirect to payment page + receipt email (pay link)
↓
┌───────────────────┬────────────────────────────┐
│ Razorpay success │ Manual: scan QR / pay UPI │
│ (signature OK) │ then submit UTR │
└─────────┬─────────┴──────────────┬─────────────┘
↓ ↓
status: paid UTR stored; paid only if
+ confirmation “auto-complete” is enabled
emails AND within window (or HR marks paid)
│
↓
If still pending after ~1 hour → reminder email (cron)
Configuration
Razorpay (recommended for real auto-confirm)
- Create keys in the Razorpay Dashboard
- Paste Key ID and Key Secret under Application Fees
- Use test keys first
- Currency
INRfor UPI
Manual UPI
- Payment mode → Manual UPI + UTR
- Enter UPI ID (VPA) and instructions
- QR is generated in the applicant’s browser from a standard
upi://pay?…intent- Amount comes from server-side application meta
- Note (
tn) looks likeHZ{appId}{token}for bank-statement matching
- Manual UTR auto-complete (optional, off by default):
- If enabled, UTR submitted within 5 minutes marks the application paid
- Security risk: a fake UTR can be typed — prefer HR verification or Razorpay
Security notes (QR & UTR)
| Topic | Behaviour in 1.1.1 |
|---|---|
| Third-party QR image APIs | Disabled — UPI payload is not sent to external QR hosts |
| Client-side QR | Drawn in-browser (qrcodejs); data stays on the page |
| Pay URL token | Required for page access (when set) and UTR POST |
| UTR rate limit | Max 8 attempts / 15 minutes per IP + application |
| UTR format | Normalized; length bounds enforced |
| Auto-complete on UTR | Default off; explicit setting + filter hzaf_manual_utr_auto_paid |
| True “paid?” detection | Only via Razorpay signature (or future webhooks). Banks do not notify WordPress on plain UPI |
Recommendation: use Razorpay for production fees; use manual UPI + HR verify when you need a simple QR collect flow.
Emails
| Event | Recipient | Content |
|---|---|---|
| Application + fee required | Applicant | Receipt, amount, payment link |
| Marked paid | Applicant | Confirmation + txn/UTR if present |
| Marked paid | Site admin | Who paid, job, amount |
| Still pending (~1h+) | Applicant | Reminder + payment link (once) |
Uses wp_mail. For reliability, configure SMTP (e.g. FluentSMTP).
File structure
hirezoot-application-fees/
├── hirezoot-application-fees.php # Bootstrap v1.1.1
├── readme.txt # WordPress.org-style readme
├── README.md # This file
├── includes/
│ ├── class-hzaf-plugin.php # Settings helpers
│ ├── class-hzaf-job-meta.php # Job fee meta box
│ ├── class-hzaf-application.php # Status, redirect, 5-min deadline
│ ├── class-hzaf-payment.php # Rewrite, Razorpay, UPI intent, UTR
│ ├── class-hzaf-emails.php # Receipt / paid / reminder
│ ├── class-hzaf-admin.php # Settings UI, columns, meta
│ └── class-hzaf-frontend.php # Fee notice on apply form
├── templates/
│ └── payment-page.php # Checkout + QR + timer
└── assets/
├── css/frontend.css
└── js/frontend.js
Hooks (for developers)
| Hook | When |
|---|---|
hzaf_application_pending_payment |
Application marked pending fee |
hzaf_application_paid |
Fee marked paid |
hzaf_payment_url |
Filter payment page URL |
hzaf_manual_utr_auto_paid |
Filter whether UTR auto-marks paid |
hzaf_payment_window_seconds |
Default 300 (5 minutes) |
hzaf_reminder_delay_seconds |
Default HOUR_IN_SECONDS |
hzaf_email_sent |
After each plugin email attempt |
Changelog
1.1.1
- Security: stop using third-party QR image APIs; browser-side QR only
- Security: manual UTR auto-complete off by default (admin setting)
- Security: pay token on UTR POST, rate limit, UTR sanitisation
- Stronger UPI
tnreference (HZ{id}{token}) + VPA validation - README / readme.txt updated
1.1.0
- Redirect to payment page after fee applications
- Applicant receipt, paid confirmation, abandoned-payment reminder emails
- Manual UPI QR + 5-minute window
- Razorpay verify → paid + emails
1.0.0
- Initial release: job fees, Razorpay + manual UPI, application status, settings
License
GPL-2.0-or-later