PayPal Subscription Payment Sync for WHMCS
Finds PayPal subscription payments that never reached WHMCS and applies them to the right unpaid invoice, with doubtful matches held for review.
What problem does PayPal payment sync solve?
WHMCS learns about PayPal subscription payments through webhooks. If the webhook signature check fails, for example after the API credentials on the PayPal app are changed, the customer is charged in PayPal but the invoice in WHMCS stays unpaid. The service then follows your overdue rules and can be suspended over a bill that was already settled. I built this addon after watching exactly that happen.
How does it match payments to invoices?
It signs in to the PayPal REST API with your own app credentials and reads incoming transactions from PayPal's transaction search for a window you set, 48 hours by default. For each payment it identifies the customer in this order: the subscription ID stored on a WHMCS service, then the payer email against the client email or PayPal email field, then earlier payments it already matched for that payer. It then looks for that client's unpaid PayPal Checkout invoice in the same currency with an amount inside your tolerance.
A match on customer, amount and currency is recorded through WHMCS's own AddInvoicePayment call with the PayPal transaction ID, so your usual paid-invoice automation runs. When the customer is clear but no amount fits, the closest invoice is flagged for your review instead of being paid. A transaction ID is never applied twice.
What is included?
| Tool | What it does |
|---|---|
| Automatic sync | Runs after the WHMCS cron, at most once per interval you set, plus a daily run |
| Standalone cron | Token-protected endpoint for a separate schedule |
| Review queue | Approve or reject flagged matches, with a pending count in the admin menu |
| Manual sync | Run a sync over a date range you choose |
| Subscription sync | Pull one subscription's transactions by its ID |
| Transaction check | Look up one PayPal transaction ID and see why it did or did not match |
| Logs | Every run, match and failure listed, with purge by age |
Who should use it?
It is for WHMCS businesses that bill recurring services through PayPal subscriptions and have seen paid renewals left open, or that want a safety net to catch them before suspension.
What do you need, and what are the limits?
Requirements: WHMCS 8.x with the PayPal Checkout gateway, PHP 7.4 or newer with cURL, a running WHMCS cron, and a PayPal REST app client ID and secret with access to transaction search. A connection test in the settings tab confirms the credentials, and a sandbox mode lets you try it first.
Limits: only unpaid invoices assigned to PayPal Checkout are considered. PayPal's transaction search covers at most 31 days per lookup. A payment from an email that matches no client and no known subscription is listed as unmatched for you to handle by hand.
It costs $49 once for a lifetime license with twelve months of updates and support, an instant download and license key, and a seven-day refund window.
Key features
- Reads incoming payments from PayPal's transaction search API
- Customer found by subscription ID, payer email or earlier matches
- Exact amount and currency matches recorded as payments automatically
- Near matches held in a review queue to approve or reject
- Each PayPal transaction ID applied only once
- Automatic runs after the WHMCS cron with an interval you set
- Token-protected cron endpoint for a separate schedule
- Manual sync by date range and single-subscription sync
- Transaction lookup that explains why a payment did not match
- Sync logs with purge by age, plus sandbox mode for testing
Why customers buy this module
- →Customers who paid in PayPal are not suspended over an open invoice
- →Staff stop checking PayPal by hand for missing renewals
- →Uncertain matches wait for a person instead of being paid blindly
Frequently asked questions
Does this replace the PayPal gateway in WHMCS?
<p>No. Customers still subscribe and pay through the WHMCS PayPal Checkout gateway. This addon runs beside it and catches the payments its webhook did not record, using data read directly from your PayPal account.</p>
Can it mark the wrong invoice as paid?
<p>It only pays an invoice automatically when the customer is identified and one of their unpaid PayPal invoices matches the currency and the amount within your tolerance, five cents by default. Anything less certain goes to the review queue, where you approve or reject it.</p>
How quickly are missed payments picked up?
<p>After each WHMCS cron run, no more often than the interval you set, 15 minutes by default, looking back 48 hours by default. You can also run a manual sync for any date range or sync one subscription by its ID whenever you need to.</p>
Technical specifications
- WHMCS
- 8.x (confirmed at purchase)
- PHP
- 7.4+
- Gateway
- WHMCS PayPal Checkout
- PayPal API
- REST: transaction search and subscriptions
- Default schedule
- After each WHMCS cron run, at most every 15 minutes
- License
- Lifetime, 1 year of updates and support included
- Delivery
- Instant download and license key
- Refund window
- 7 days