All Activity
- Past hour
-
aihealthcare joined the community
- Today
-
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.
- Yesterday
-
wilderleaforganiccost joined the community
-
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 -
eatforestgreenfarms joined the community
-
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. -
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. -
jodogoairportassist joined the community
-
Error processing cards (stripe) WHMCS 8.13.5 -
sol2010 replied to slim's topic in Troubleshooting Issues
Also have this issue. Matter is urgent - Last week
-
mdrohanmunsi21 joined the community
-
Saleh Shojaei joined the community
-
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? -
Error processing cards (stripe) WHMCS 8.13.5 -
slim replied to slim's topic in Troubleshooting Issues
WHMC replied to my ticket with a hotpatch and a note that it was a known problem - However, it doesn't appear to have worked. I am waiting for a response now. -
Hostina – Professional WHMCS Template with Custom Dashboard, Client Area & Orderform (RTL + LTR) If you're running a hosting company, VPS business, dedicated server brand, reseller hosting business, or domain registrar, your website is often the first impression customers have of your company. In today's hosting market, customers don't just compare pricing. They compare: • Professionalism • User Experience • Trust • Brand Quality • Ordering Experience A modern customer experience can significantly improve customer confidence and increase conversions. That's exactly why Hostina was created. Introducing Hostina Hostina is a premium WHMCS template designed to completely modernize both your hosting website and WHMCS client area. Unlike traditional WHMCS themes that focus only on appearance, Hostina was built to improve the entire customer journey, from the homepage and product pages to checkout, client management, invoices, domains, and support tickets. The result is a cleaner, faster, and more professional hosting experience for both you and your customers. Why Choose Hostina? Modern Professional Frontend Hostina includes a complete hosting website design featuring: • Professional Homepage • Domain Search & Transfer Pages • Hosting Plans Pages • VPS & Dedicated Hosting Pages • Blog & Article Pages • Contact Us Page • Responsive Navigation • Modern Hosting Components Every section is designed to provide a clean and premium hosting experience. Custom WHMCS Dashboard One of Hostina's biggest advantages is its completely redesigned client area dashboard. Features include: • Professional Sidebar Navigation • Service Overview Widgets • Domain Management Panels • Invoice Tracking • Support Ticket Management • Quick Access Navigation • Modern User Interface The dashboard helps customers manage their services more efficiently while giving your brand a more professional appearance. Professional Order Form & Checkout The checkout process is one of the most important areas of any hosting business. Hostina includes a fully styled order experience designed to improve usability and reduce friction during ordering. Benefits include: • Clean Product Presentation • Better User Flow • Modern Cart Layout • Improved Checkout Experience • Mobile-Friendly Ordering Process • Faster Customer Navigation A smoother checkout experience often leads to better conversion rates and improved customer satisfaction. Fully Responsive Design Modern customers browse from every device imaginable. Hostina is fully responsive and optimized for: • Desktop Computers • Tablets • Mobile Devices Every page adapts seamlessly across all screen sizes. RTL & LTR Support Hostina was built with international businesses in mind. Supported layouts include: • English (LTR) • Arabic (RTL) Perfect for companies serving customers worldwide or targeting Middle Eastern markets. SEO & Performance Optimized Performance and search visibility are essential for modern hosting companies. Hostina is built with: • Clean Semantic Structure • Fast Loading Pages • Modern Responsive Layouts • SEO-Friendly Design Principles • Better User Experience • Core Web Vitals Friendly Structure This helps improve engagement, user retention, and overall website quality. Client Area Features Hostina transforms the standard WHMCS client area into a modern customer portal. Customers can easily manage: • Hosting Services • Domains • Invoices • Support Tickets • Account Details • Product Information • Service Renewals Everything is organized to provide a cleaner and more intuitive experience. Included Pages Frontend Pages • Homepage • Domain Search • Domain Transfer • Hosting Plans • VPS Hosting • Dedicated Servers • Blog Listing • Blog Details • Contact Us • Cart & Checkout Client Area Pages • Login & Registration • Custom Dashboard • My Services • Service Details • My Domains • Domain Details • Invoices & Billing • Support Tickets • Account Management Compatibility Hostina is compatible with: • WHMCS v8+ & v9+ • cPanel • Plesk • DirectAdmin • LiteSpeed • Apache • Nginx • CloudLinux Who Is Hostina For? Hostina is ideal for: • Shared Hosting Providers • VPS Providers • Dedicated Server Companies • Cloud Hosting Providers • Domain Registrars • Reseller Hosting Businesses • SaaS Companies • Digital Service Providers • Web Agencies Whether you're launching a new hosting brand or upgrading an existing WHMCS installation, Hostina provides a professional foundation for long-term growth. Why Design Matters in Hosting Many providers focus entirely on pricing. However, modern customers evaluate much more than cost. They evaluate: • Trustworthiness • Ease of Use • Professional Appearance • Ordering Experience • Customer Portal Quality A professional interface increases perceived value instantly. A poor user experience can cost sales before customers even compare plans. Your WHMCS installation is not just a billing platform. It is part of your sales process. Live Demo Client Area Demo: https://hostk.com/hostina-demo English Version: https://hostk.com/hostina-demo/frontend-english Arabic Version: https://hostk.com/hostina-demo/frontend-arabic WHMCS Client Area Demo https://hostk.com/hostina-demo Demo Login: Email: test@hostk.com Password: test Purchase Hostina Order Now: https://hostk.com/hostina-template/ We'd Love Your Feedback We are continuously improving Hostina and would love to hear feedback from the WHMCS community regarding: • User Experience • Dashboard Design • Checkout Flow • RTL Support • Additional Features • Future Improvements Thank you for taking the time to review Hostina. We look forward to hearing your thoughts.
