All Activity
- Today
-
NRC joined the community
-
Marcus1234 joined the community
-
Bruno de Lima Costa started following WHMCS Connect Stop Works
-
Hello, The cPanel control panel was updated tonight, and WHMCS Connect functionality was cut off. Has anyone found a solution to get WHMCS Connect working again? Thank you, Bruno.
-
Bruno de Lima Costa joined the community
-
WHMPress joined the community
-
TheHostingHeroes started following Plesk Module Hotfix?
-
Dear WHMCS, When will a new Plesk module be released that works with Plesk WHMCS 18.0.80? Ref: https://support.plesk.com/hc/en-us/articles/42276009318423-Unable-to-connect-to-Plesk-18-0-80-from-WHMCS-This-element-is-not-expected
-
aihealthcare joined the community
-
foneping joined the community
-
Hi everyone, We’ve recently released a small open-source WHMCS addon that we originally built to make it easier for clients to access and export their account billing information. WHMCS Account Reports The addon provides a client-area report showing invoices along with the services associated with those invoices. Clients can filter the report and export the results for their own records. Features 📄 View invoice and service information from the WHMCS client area 🔎 Filter reports by date range 🔎 Filter by service 🔎 Filter by invoice status 📊 Invoice/service reporting in one place 📥 Export reports to CSV 📄 Export reports to PDF ⚙️ Admin can enable/disable the addon globally 👤 Admin can control access on a per-customer basis 🔐 Designed with WHMCS client access controls in mind 🎨 Client-area integration with support for theme overrides The module is currently available as a free and open-source project under the MIT License. Why are we open-sourcing it? This is a contribution from Ucartz to the WHMCS community. We use WHMCS extensively ourselves, and over time we’ve built a number of internal tools and improvements around it. Instead of keeping smaller, generally useful addons private, we’d like to release some of them as open-source projects so other WHMCS users and developers can use them, modify them, and contribute improvements back to the community. We hope this can also be useful as a starting point for developers who want to build their own reporting functionality for WHMCS. Download / Source Code GitHub repository: https://github.com/ucartz/whmcs-accountreports The repository contains the installation instructions, documentation, source code and MIT license. Installation The basic installation is to copy: modules/addons/accountreports/ including the vendor/ directory into your WHMCS installation's: modules/addons/ Then activate the addon from Setup → Addon Modules. Feedback, suggestions, bug reports and contributions are welcome. If there are additional report types or WHMCS integrations that would be useful to the community, feel free to share your ideas here. Developed and open-sourced by Ucartz.
-
- OpenSource
- free
-
(and 1 more)
Tagged with:
-
This module is inspired by Razorpay's official open-source razorpay-whmcs plugin, which we found to be full of long-standing bugs affecting real installations — payments silently failing on modern PHP/WHMCS versions, incorrect amounts being credited to invoices, stale checkout sessions, and more. We rebuilt it: fixed the underlying bugs, hardened it for the latest WHMCS and PHP releases, and added functionality (refunds, dispute/chargeback handling, gateway fee tracking) the original never had. It has been tested on Ucartz's own WHMCS installation and on other WHMCS installations, across a range of payment scenarios (standard checkout, partial payments, late fees, refunds, webhooks). Features Full compatibility with WHMCS 9 and PHP 8.2–8.3. Razorpay Standard Checkout using Razorpay's current recommended integration pattern. Accurate invoice crediting — always reflects the amount actually captured by Razorpay for a transaction, never a stale or unrelated invoice value. Database-backed order tracking with safe fallback handling, so a payment attempt is never verified against a stale or incorrect order. Refunds initiated from the WHMCS admin area reach Razorpay, with configurable refund speed (normal / instant). Chargeback/dispute webhook handling — a lost dispute automatically reverses the payment in WHMCS. Actual Razorpay gateway fee recorded against each transaction for reconciliation. Duplicate-transaction protection and signature verification hardened against replay/tampering. Bugs Fixed The official module had a number of serious, long-standing bugs. Here's everything that was wrong and how it was fixed. Payments failing outright on modern PHP / WHMCS Fatal error on PHP 7+: the callback and webhook handlers called mysql_fetch_assoc() / select_query()— mysql_fetch_assoc() is a native PHP function that was removed from PHP core in PHP 7.0. WHMCS 9 requires PHP 8.2+, so this call would fatal-error on any modern install, breaking every payment. Replaced with proper database queries (Capsule ORM). TLS 1.1 forced on every API call to Razorpay: the SDK explicitly pinned the connection to TLS 1.1. TLS 1.1 is rejected by most gateways today — PCI-DSS v4.0.1 requires TLS 1.2+ — so this silently broke the underlying connection to Razorpay's API. Fixed to use TLS 1.2. Outdated vendored SDK: the bundled Razorpay SDK was version 2.8.1 with a HTTP library from 2015. Updated to the latest official release (2.9.3), keeping every other fix intact on top of it. Wrong amounts being credited to invoices The most serious bug: the payment callback credited invoices using the invoice's stored total, not the amount actually captured by Razorpay for that specific transaction. If a customer paid only a late fee, or made a partial payment, Razorpay correctly charged the smaller amount — but WHMCS then credited the invoice's full original total regardless, silently over- or under-crediting the account. Fixed to always fetch and credit the exact amount Razorpay actually captured for that payment. Stale Razorpay order reuse: if a customer opened an invoice, left, and returned after a late fee or credit was applied, the module could reuse a cached Razorpay order created for the old (wrong) amount — including silently reusing it if the API call to re-verify that order failed. Fixed to always create a fresh order whenever the current invoice balance no longer matches the existing order, or whenever that order can't be re-verified. Inconsistent amount rounding: order creation and the checkout form each rounded the same amount differently, causing floating-point "Amount Mismatch" errors. Both paths now round identically. receipt field type rejection: Razorpay's API requires the receipt field to be a string; WHMCS passes invoice IDs as integers, which Razorpay's API rejected outright with expected string but provided .... Fixed by explicitly casting receipt and currency to string. Checkout and signature verification Checkout button not working: the module used an old, auto-embedding <script data-*> checkout pattern that Razorpay's own current documentation says is unreliable — Razorpay requires checkout.open() to be triggered by a direct user click. Rebuilt using Razorpay's current recommended Standard Checkout pattern (explicit button + click handler), which is the likely root cause of long-standing "Pay Now button does nothing" reports. Missing response fields: the checkout form only captured the payment ID from Razorpay's response, never the order ID or signature, so server-side signature verification had nothing to actually verify and would always fail. Fixed by capturing and submitting all three fields. Unreliable session-based verification: signature verification originally depended on a PHP session set when the invoice page was rendered. Under AJAX-driven "Make Payment" tabs, expired sessions, or 3DS/OTP delays, that session could be lost by the time the callback ran, breaking verification for an otherwise legitimate payment. Verification now prioritizes the order ID Razorpay's own checkout handler returns directly, falling back to the database and then session only if that's missing. Null-pointer risk: the database-backed order lookup could crash when no matching row existed instead of failing safely. No duplicate-transaction protection: neither the callback nor the webhook guarded against the same transaction being processed twice. Double slashes in redirect URLs: a trailing slash on the configured system URL produced broken //viewinvoice.php redirect links. Stored-XSS-shaped gap: client name/email and other dynamic values were concatenated directly into HTML/JS without escaping. Fixed with proper JSON/HTML escaping. Missing functionality No refund support: refunds initiated from the WHMCS admin area only updated the local WHMCS record — they never actually reached Razorpay. Added real refund support via the SDK, with a configurable refund speed (normal / instant). Gateway fee never recorded: every transaction showed a hardcoded $0 fee, making it impossible to reconcile actual Razorpay settlement amounts. Now records the real fee (including tax) Razorpay deducts, matching the Razorpay Dashboard. Chargebacks/disputes silently ignored: Razorpay's dispute webhooks were never handled at all — a lost chargeback left the invoice marked Paid and the service running with no reversal and no admin notification. Added full dispute webhook handling: disputes are logged for admin review while open, and a lost dispute automatically reverses the payment in WHMCS (invoice returns to unpaid, standard WHMCS overdue handling takes over). Wrong internal gateway name recorded: the module passed its human-readable display name ("Razorpay") instead of its internal system name to WHMCS's payment-recording function, causing the "Payment Method" column to show blank on the Transactions list and breaking other internal lookups keyed on the module name. Missing company name and other PHP 8 warnings: the checkout modal never showed the merchant's company name, and several $_GET/$_POST accesses and SDK-level deprecation notices were left unguarded on PHP 8.1+. All fixed. Installation Ensure your WHMCS installation is on WHMCS 9 (or WHMCS 6–8) with PHP 8.2 or later. Download this repository. Upload the contents of the modules/ directory into your WHMCS installation's modules/ directory. Configuration Log into WHMCS as administrator (https://yourdomain.com/admin). Navigate to Setup → Payments → Payment Gateways. Choose Razorpay from the Activate dropdown and activate it. Enter your Razorpay Key Id and Key Secret. Optionally enable webhooks and set the Webhook Secret to match what you configure in the Razorpay Dashboard. Click Save Changes.
-
K n K Web Services started following My Name is Saleh!
-
Welcome aboard, Saleh! Awesome that you're diving into WHMCS and WordPress add-ons — that's a great niche to specialize in. Quick tips: get yourself a staging WHMCS install so you're not testing against live sites, dig into the hooks system early (it'll save you headaches later), and keep an eye on the module queue/admin log when things act weird. Good luck getting started — post here anytime, folks around here are pretty helpful.
- 1 reply
-
1
- Yesterday
-
Md. Arif Billah CSE joined the community
-
Photon Shaders joined the community
-
lkitching started following Error processing cards (stripe) WHMCS 8.13.5 -
-
WS Ultimate Captcha Pro V2.0.0 is now available
wsa replied to wsa's topic in Commercial Modules and Addons
Changelog Version: 2.0.1 Fixed: CAPTCHA was blocking adding a domain to produc/service -
Error processing cards (stripe) WHMCS 8.13.5 -
bear replied to slim's topic in Troubleshooting Issues
Same question. We should not have to chase a patch, it should be something easy to find. Having to go to support generally takes a while to get help, where linking to the fix would resolve that and reduce tickets. -
Damo started following Error processing cards (stripe) WHMCS 8.13.5 -
-
Error processing cards (stripe) WHMCS 8.13.5 -
Damo replied to slim's topic in Troubleshooting Issues
Why are hot fixes no longer published here? -
Hi Dam I chose the Square Payment Gateway Module from Modules Stack. It makes integrating Square payments with WHMCS simple and helps streamline the payment process.
-
Error processing cards (stripe) WHMCS 8.13.5 -
slim replied to slim's topic in Troubleshooting Issues
Ok, WHMCS have fixed the issue for me - I can now process via the admin area after they applied the hotfix. Contact them to get it. -
sol2010 started following Error processing cards (stripe) WHMCS 8.13.5 -
-
Error processing cards (stripe) WHMCS 8.13.5 -
sol2010 replied to slim's topic in Troubleshooting Issues
Also have this issue. Matter is urgent -
TSK_Panda started following Unable to add new account users (v 9.0.3)
- Last week
-
Hello everyone! My name is Saleh, and I have over 10 years of experience as a front-end developer. I've always had a passion for PHP and Laravel. Recently, I decided to pursue a career as an independent developer, focusing on creating small add-ons for WHMCS and WordPress plugins. I would love to hear any advice or tips you have for beginners, as I’m eager to learn from your experiences!
-
ClicToom changed their profile photo
-
Trying to download ImportAssist from Marketplace (https://marketplace.whmcs.com/product/46-importassist ) Using Chrome: the download process just gets stuck, without any error message Using Edge: I got the error "ImportAssist_v1.5.3.69 (2).zip can't be downloaded securely" Using Opera or Tor: the download is completed successfully
-
There's a huge difference between PROFORMA invoice and invoice. The first one is a little more than a sheet of paper: you can issue it as necessary, numbering it or not, editing it, deleting it... it does not follows fiscal laws on invoicing, but just civil laws about contracts or document archiving. After a PROFORMA invoice has been paid, you issue the "real" invoice ( which, it's true, can't be edited, and often is also electronically registered in real time by a government system).
-
Error processing cards (stripe) WHMCS 8.13.5 -
bear replied to slim's topic in Troubleshooting Issues
Be great if there was a public facing way of seeing what those case numbers are. I have at least one I'd like to be able to track, but they don't. They could limit it to license holders if it's a concern over the public or something. Shame. -
Welcome to the community, Hassan! 🙌 WordPress + Elementor Pro is a solid combo, especially for clients who want speed and design flexibility without a full custom build. If you ever branch into hosting/WHMCS-adjacent work, feel free to reach out — always good to have more WordPress folks around here.
-
Ticket attachments in staff email notifications
K n K Web Services replied to vikingo's topic in Using WHMCS
No, there's no native setting for this. WHMCS's own docs "ticket attachments are automatically included in the notification email sent to the client, but explicitly not forwarded to staff in ticket notification emails. That's by design, not a bug or misconfiguration on your end." Working fix — EmailPreSend hook: This uses the EmailPreSend hook, which lets you inject file attachments into any outgoing email by returning an attachments array. Rather than reaching into the filesystem/DB directly (which breaks if you're on S3 or another external storage backend), it pulls the files through WHMCS's own GetTicket and GetTicketAttachment API actions, so it stays storage-agnostic: <?php add_hook('EmailPreSend', 1, function ($vars) { // Only touch ticket-related notification templates if (stripos($vars['messagename'], 'Support Ticket') === false) { return []; } $ticketId = $vars['relid']; if (!$ticketId) { return []; } $ticket = localAPI('GetTicket', ['ticketid' => $ticketId]); if ($ticket['result'] !== 'success') { return []; } $attachmentsOut = []; $pullAttachment = function ($replyId, $index) use ($ticketId) { $file = localAPI('GetTicketAttachment', [ 'ticketid' => $ticketId, 'replyid' => $replyId, 'index' => $index, ]); return $file['result'] === 'success' ? $file : null; }; // Original ticket message attachments (replyid 0) if (!empty($ticket['attachments']['attachment'])) { foreach ((array) $ticket['attachments']['attachment'] as $i => $att) { if ($file = $pullAttachment(0, $i)) { $attachmentsOut[] = [ 'filename' => $file['filename'], 'data' => base64_decode($file['data']), ]; } } } // Latest reply's attachments (covers reply notifications) if (!empty($ticket['replies']['reply'])) { $lastReply = end($ticket['replies']['reply']); if (!empty($lastReply['attachments'])) { foreach ($lastReply['attachments'] as $att) { if ($file = $pullAttachment($lastReply['replyid'], $att['index'])) { $attachmentsOut[] = [ 'filename' => $file['filename'], 'data' => base64_decode($file['data']), ]; } } } } return $attachmentsOut ? ['attachments' => $attachmentsOut] : []; }); Drop that in includes/hooks/. A couple of notes: The stripos($vars['messagename'], 'Support Ticket') filter is deliberately broad since the exact unique name for your staff-facing notification template can vary (custom departments, renamed templates, etc). If you want to scope it tighter, temporarily add logActivity($vars['messagename']); inside the hook, trigger a test ticket, and check Configuration > System Logs > Activity Log to see the exact name being fired — then swap the stripos check for an exact match. This will also fire for the client-facing "Support Ticket Reply" template, but since clients already get their own attachments natively, this is redundant, not harmful — just a marginal size bump. If that bothers you, add a check against $vars['to'] matching your admin email domain, but that's fragile if staff use personal addresses. Tested logic is based on the documented GetTicket/GetTicketAttachment API responses (attachment index + base64 data) — should hold across supported WHMCS versions since it doesn't touch internal table structure directly. -
v1.2 (Jun 20, 2025) New Feature WD-2 - DNSSEC Integration WD-21 - Letsencrypt integration Improvement WD-24 - On new entry, using @ will translate the host filed to domain. Bug Fix WD-23 - (ADMIN) When updating NS record for root domain, the edit and delete button does not appear after save WD-22 - Fix bug with Clear DNS not clearing MX record
-
Error processing cards (stripe) WHMCS 8.13.5 -
slim replied to slim's topic in Troubleshooting Issues
The hotpatch supplied doesnt seem to work. They didnt tell me anything more than it was a known issue, WHMCS-27204 -
Error processing cards (stripe) WHMCS 8.13.5 -
bear replied to slim's topic in Troubleshooting Issues
When it cleared for me I assumed it was likely a connection issue, but if it's being patched, did they say what's up?
