Domain Renewal Filter for WHMCS Afdrukken

  • 0

The Problem

Some TLDs have registrar-enforced renewal windows. You can't renew .be domains until 28 days before expiry. Same for .nl, .it, .de, and 200+ others.

WHMCS doesn't know this. It shows all domains as renewable regardless of registrar restrictions.

What Happens Without Filtering

Client visits renewals page. Sees 50 domains. Clicks "renew all" and pays €800.

You process the renewals:

  • 30 succeed
  • 20 fail at registrar: "Too early to renew"

But WHMCS already:

  • Extended expiry dates in database
  • Generated next year's invoices
  • Updated due dates

Result:

  • Billing cycle permanently out of sync
  • Domains expire at registrar while WHMCS shows them active
  • Invoice chaos requiring manual cleanup
  • Refund requests and angry customers

The Gap

WHMCS assumes all domains are renewable anytime. Registrars disagree.

Common restricted TLDs:

  • .be, .nl — 28 days
  • .de, .at, .ch — 28 days
  • .it, .es, .pt — 28 days
  • .jp, .hk, .my — Various windows
  • 200+ others with similar restrictions

No WHMCS solution exists. You either:

  • Let clients pay for renewals that fail
  • Manually track which domains can renew today
  • Deal with billing desync constantly

The Solution

Domain Renewal Filter hides domains from the renewals page until they're actually renewable at the registrar.

How It Works

Before:

Renewals Page shows:
- example.com (expires in 90 days) ✓
- example.be (expires in 90 days) ← Will fail at registrar
- example.nl (expires in 45 days) ← Will fail at registrar
- example.de (expires in 28 days) ✓

After:

Renewals Page shows:
- example.com (expires in 90 days) ✓
- example.de (expires in 28 days) ✓

Hidden (not renewable yet):
- example.be (renewable in 62 days)
- example.nl (renewable in 17 days)

Result: Clients only see domains they can actually renew. No failed renewals. No billing desync. No manual tracking.

Filtering Logic

  1. Client loads renewals page
  2. Module checks each domain's TLD and expiry date
  3. Compares against renewal window rules
  4. Hides domains outside their renewal window
  5. Only renewable domains displayed

Rule matching:

  • Longer TLDs matched first (.com.au before .au)
  • Custom rules override defaults
  • TLDs not in restricted list: always shown

Installation

  1. Upload modules/addons/domain_renewal_filter/ to your WHMCS installation
  2. Go to Setup → Addon Modules
  3. Activate "Domain Renewal Filter"
  4. Done

Module creates database table and loads hooks automatically.

Usage

Configuration

Admin Area → Addons → Domain Renewal Filter

Enable Module: Toggle filtering on/off without losing settings.

Default Renewal Window: Days before expiry when restricted TLDs become renewable. Default: 28 (matches OpenProvider and most registrars).

Restricted TLDs: Pre-populated list of 200+ TLDs with renewal restrictions. Edit as needed for your registrar.

Custom Rules: Define per-TLD windows that override the default:

.uk:30
.eu:60
.com.au:90

Hide Expired: Optionally hide already-expired domains from the renewals page.

Pre-configured TLDs

Ships with 200+ TLDs that have renewal restrictions, primarily from OpenProvider:

.be, .nl, .de, .it, .at, .ch, .hu, .ro, .hr, .ba, .rs, .ua, .ee, .jp, .hk, .my, and many more.

Edit the list to match your registrar's restrictions.

Custom Rules

Some TLDs have different windows than the default 28 days. Define exceptions:

.uk:30      → Renewable 30 days before expiry
.eu:60      → Renewable 60 days before expiry
.com.au:90  → Renewable 90 days before expiry

Custom rules take priority over both the default window and the restricted TLDs list.

Client Experience

What clients see:

  • Renewals page shows only domains that can actually be renewed
  • No error messages, no failed payments
  • Domains appear automatically when they enter the renewal window

What clients don't see:

  • Domains outside their TLD's renewal window
  • No indication that filtering is happening (clean UX)

Technical Details

Hook: ClientAreaPage for the domain-renewals template

Database: Settings stored in mod_domain_renewal_filter table

TLD Matching: Longer TLDs matched first (.com.au before .au)

Performance: Zero impact on other pages. Only runs on renewals page.

File Structure:

modules/addons/domain_renewal_filter/
├── domain_renewal_filter.php    Main module
├── hooks.php                    Hook handlers
└── lang/                        Translations

Troubleshooting

Domains not being filtered:

  • Check module is enabled in settings
  • Verify TLD is in restricted list or has custom rule
  • Check domain's expiry date is outside renewal window
  • Clear WHMCS template cache

All domains hidden:

  • Check renewal window isn't set too high
  • Verify restricted TLDs list doesn't include unrestricted TLDs
  • Check custom rules for typos

Filtering not working for specific TLD:

  • Add TLD to restricted list, or
  • Add custom rule with appropriate window
  • Check TLD format (include the dot: .be not be)

Use Cases

OpenProvider Users:

  • Enable module
  • Use default 28-day window
  • Pre-configured TLD list already matches OpenProvider restrictions
  • Done

Multi-Registrar Setup:

  • Enable module
  • Set default window for most restrictive registrar
  • Add custom rules for TLDs with different windows
  • Edit restricted TLDs list to cover all registrars

Single Restrictive TLD:

  • Only sell .be domains?
  • Enable module
  • Add only .be to restricted list
  • Set window to 28 days

Comparison: Without vs With

Without Domain Renewal Filter:

Client sees 50 domains
→ Renews all, pays €800
→ 20 fail at registrar
→ WHMCS already updated expiry dates
→ Billing desync
→ Manual cleanup
→ Refunds
→ Angry customers

With Domain Renewal Filter:

Client sees 30 domains (actually renewable)
→ Renews all, pays €480
→ All succeed at registrar
→ No desync
→ No cleanup
→ No refunds
→ Happy customers

When You Need This

Required if:

  • Using OpenProvider or similar registrars with renewal windows
  • Selling restricted TLDs (.be, .nl, .de, .it, etc.)
  • Clients use bulk renewal features
  • Tired of billing desync from failed renewals
  • Want to prevent support tickets about failed renewals

Not required if:

  • Only selling unrestricted TLDs (.com, .net, .org)
  • Registrar allows renewal anytime
  • Manual renewal processing only

Why This Exists

ArkHost uses OpenProvider. Clients kept bulk-renewing domains that couldn't be renewed yet. Failed renewals caused billing desync that took hours to fix manually.

WHMCS has no concept of TLD-specific renewal windows. Built this module to filter the renewals page automatically.

In production at ArkHost. Eliminates failed renewals completely. Made available to other hosting companies with the same problem.

Technical Specifications

Requirements:

  • WHMCS 8.0+
  • PHP 7.4+

Theme Support:

  • Twenty-One (default WHMCS theme)
  • Lagom2 support planned

Roadmap

  • Lagom2 theme support
  • Client area notification showing hidden domain count
  • Admin report of domains approaching renewal window

Licensing

Licensing will be implemented in a future version. Currently free to use.

Support

Before contacting support:

  1. Check module is enabled
  2. Verify TLD configuration
  3. Clear template cache
  4. Test with single domain
  5. Check Troubleshooting section

When reporting issues:

  • WHMCS version
  • PHP version
  • Module version
  • Theme in use
  • Steps to reproduce
  • Example domain and TLD

Was dit antwoord nuttig?

« Terug

WHOIS Information

×
Loading WHOIS information...