Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 11/20/25 in all areas

  1. While I understand that bugs are part of any Release Candidate cycle, it's concerning that we are still discussing basic optimization issues like proper OPcache support. And let's not even get started on the fact that we still don't have 100% native Nginx support. This becomes particularly ironic with the introduction of the new WHMCS Cloud Solution. With cloud hosting, the resource costs are on their side, so you'd think they'd be rushing to support Nginx to reduce their own infrastructure expenses. It's like being sold a high-performance engine but being told you have to power it with hamster wheels. Maybe once their bills start rolling in, Nginx support will suddenly become a priority. This all points to the bigger issue: the development velocity. Core development feels like it's just about "keeping the lights on" (PHP/ionCube updates) rather than actual innovation. This stagnation has allowed third-party developers like ModulesGarden to build entire businesses by selling us functionality that should have been in the core a decade ago. When you look at the "Total Cost of Ownership" license fees + necessary third-party modules, the value proposition is slipping. Newer platforms like Upmind are entering the market with an API-first architecture and modern features built-in from day one. If WHMCS continues to outsource innovation to the community while raising prices for maintenance updates, that competitive threat is going to become an exodus very quickly. We need core features that match the modern hosting landscape, not just compatibility patches.
    3 points
  2. Okay, maybe I was too quick about credit notes. It seems a lot of the features are "coming soon™️". This is not a Release Candidate lol. This is not even alpha. This is internal development. Nothing can convince me that this release didn't just happen because WHMCS promised us a release in December.
    2 points
  3. @BENELUX, Today's the day!! https://blog.whmcs.com/133775/whmcs-90-release-candidate-out-now
    2 points
  4. This week or next! It sure would be nice to double the size of the engineering team temporarily for one release every few years!
    2 points
  5. Hi WHMCS ecosystem developers! I am excited to share an early heads-up about the upcoming WHMCS 9.0 release by the end of 2025 - a major update that brings important changes to the platform’s technical requirements. As part of this release, several core dependencies will be updated, and minimum system requirements will be increased. These changes are designed to improve performance, security, and compatibility with modern PHP standards. Key Updates in WHMCS 9.0: Minimum PHP version: 8.2 Recommended PHP version: 8.3 Minimum ionCube Loader version: 13.0.2 or higher Recommended ionCube Loader version: 14.4.0 or higher Updated dependencies: A number of underlying libraries and components have been upgraded. Some notable changes include: Smarty v3.1.48 —> v4.3.4 Legacy Smarty Tags are being deprecated and will no longer function in 9.0. Smarty Template Objects (including their use in plugins) will no longer be supported. guzzlehttp v7.4 —> v7.4.5 illuminate v7.x —> v9.0 I have attached a provisional list of dependency changes to this post. Please also use this thread to provide your feedback and ask questions of the Development Team regarding these requirement and dependency changes. These changes will require action from module developers to ensure continued compatibility. We recommend reviewing your module code and preparing for updates ahead of the release. We’ll be sharing more details, including a release window, definitive changelog and developer guidance, between now and the end of 2025 to help you get ready. Thank you for being a valued part of the WHMCS ecosystem. We appreciate your continued support and look forward to working together to make WHMCS 9.0 a successful release. whmcsv90_composerlock_provisional.txt
    1 point
  6. How WHMCS have set this as a RC instead of a Beta is insane. It's a huge upgrade in terms of it's impact on themes/modules. No beta, no reply from WHMCS, no forums specific to v9.
    1 point
  7. It's at https://whmcs.test/admin/index.php?rp=/admin/billing/billingnote/credit/1 Also, the view invoice page in the client area is completely broken. Trying to load stuff that doesn't exist. (This is a fresh install btw)
    1 point
  8. So your point is, whmcs should prioritize modern, clear and consistent development instead of just raising prices all the time?
    1 point
  9. It's quite bold to release an RC without any beta for a major new version. Sure not lacking confidence.
    1 point
  10. Yeah, except for adding AI to domain search, this release doesn't really provide on any of the other promises. Credit notes doesn't work either. When you cancel an invoice, WHMCS just adds a transaction to the invoice. If the invoice has a total of $100, WHMCS just adds a transaction of $100 and cancels the invoice. There's no credit note or anything.
    1 point
  11. Nexus is gonna disappoint you. It's just a reskinned Twenty One template (for the system template) and a reskinned Standard Cart template (for the cart template). It's only during checkout that it's different.
    1 point
  12. @WHMCS John Good news. Thanks. Are there any screenshots of the new client UI/Nexus/Search/Ordering etc.
    1 point
  13. Announcing WHMCS 9.0 Release CandidateWe're excited to announce the availability of the WHMCS 9.0 Release Candidate. This release marks the completion of feature development for WHMCS 9.0 and the final step before it becomes generally available. WHMCS 9.0 is a compliance-focused release, introducing a range of updates and enhancements designed to help businesses stay aligned with evolving regulatory requirements while continuing to deliver a seamless experience. WHMCS 9.0 includes the...View the full blog post
    1 point
  14. ETA: Estimated Time of Arrival. By definition, not exact. 😉
    1 point
  15. Please don't. We cannot afford yet another price increase.
    1 point
  16. Hello WHMCS Community! I'm thrilled to announce the release of Update 3 for the Stripe Checkout module for WHMCS, developed under RackNode! This update brings even more powerful features, making it easier than ever for businesses to cater to a global audience with a seamless and secure payment process. What’s New in Update 3? Expanded Payment Gateway Support The Stripe Checkout module already supports widely-used payment methods, including: PayPal Alipay Cash App Google Pay Apple Pay Link Card In addition to these trusted options, Update 3 introduces support for a wide range of new payment gateways to help you reach customers around the globe: WeChat Pay iDEAL Bancontact Giropay Sofort SEPA Debit EPS Przelewy24 (P24) OXXO Boleto FPX GrabPay Multibanco MobilePay Revolut Pay Amazon Pay (Beta) US Bank Account (ACH) TWINT Enhance checkout conversion rates by offering localized and regional payment methods your customers trust. Selectable Payment Gateways Now, you can choose a single payment gateway to display at checkout, offering a streamlined payment experience tailored to your business needs. Key Features (As Always): Multiple Payment Method Support: Accept payments via cards, Alipay, Cash App, and more. Adaptive Pricing: Automatically convert prices into local currencies, increasing global accessibility and conversion rates. Error Handling & Secure Webhook Integration: Ensuring secure, real-time payment confirmations with robust logging and signature verification. Seamless WHMCS Integration: Easy setup with just your Stripe credentials, making it a perfect solution for hosting providers and online businesses. Why Choose Stripe Checkout Module? Global-Ready: Accessibility for customers worldwide with local currencies and payment methods. Secure & Reliable: Built with security at its core, ensuring peace of mind for you and your customers. Pricing: $49 Per Year WHMCS Marketplace Documentation: For detailed setup instructions, visit our documentation: Documentation Questions or Customization Requests? Feel free to reply here or reach out directly to info@racknode.net for any inquiries or custom development needs.
    1 point
  17. your API call isn’t using the filter array you think it is, and you’re reading the wrong field from the response. 1103 = totalresults for all unpaid invoices (because filters weren’t applied). 25 = numreturned default page size, with no limitnum specified. $clientid = (int) $vars['params']['userid']; $command = 'GetInvoices'; $postData = array( 'userid' => $clientid, 'status' => 'Unpaid', 'limitstart' => 0, 'limitnum' => 3000, ); $getClientInvoices = localAPI($command, $postData); // , $adminuser if needed $invoicecount = 0; if ($getClientInvoices['result'] === 'success') { $invoicecount = (int) $getClientInvoices['totalresults']; } if ($invoicecount >= 1) { logActivity( 'Service renewal will be aborted for client ' . $clientid . '. It is not qualified because it has ' . $invoicecount . ' unpaid invoices - by hook_send_renewal_notice_toadmin...' ); }
    1 point
  18. Hello, It's very easy to resolve with Hook, just do Create a hook file at: whmcs/includes/hooks/invoice-lineitem-date.php <?php use Illuminate\Database\Capsule\Manager as Capsule; use Carbon\Carbon; add_hook('InvoiceCreationPreEmail', 1, function ($vars) { $invoiceId = (int) $vars['invoiceid']; $inv = Capsule::table('tblinvoices')->where('id', $invoiceId)->first(); if (!$inv) { return; } $dateText = Carbon::parse($inv->date)->format('d-m-Y'); $items = Capsule::table('tblinvoiceitems') ->where('invoiceid', $invoiceId) ->get(); foreach ($items as $item) { $isBillableItem = ($item->type === 'Item'); if (!$isBillableItem) { continue; } $newDescription = $item->description; if (strpos($newDescription, '{DAY}') !== false || strpos($newDescription, '{MONTH}') !== false || strpos($newDescription, '{YEAR}') !== false) { $newDescription = preg_replace( '/\{DAY\}\s*-\s*\{MONTH\}\s*-\s*\{YEAR\}/i', $dateText, $newDescription ); } else { $newDescription .= " ({$dateText})"; } Capsule::table('tblinvoiceitems') ->where('id', $item->id) ->update(['description' => $newDescription]); } });
    1 point
  19. Hello, It’s clear that there is an issue with your database configuration. First, try connecting to the MySQL database using the credentials provided in your configuration.php file and check whether the connection is successful.
    1 point
  20. I'd suggest that your average user that grabs a script like this will not change anything in it, especially since they're not (apparently) being told to. I've seen users not change a "CHANGE_THIS" in scripts, then ask why it's not working. I've also seen them ignore the "remove this file after use", so relying on that might not be advisable either. Best practice is not to spoon feed, keep this outside the publicly accessible directories, and instead of that simple URL parameter you reveal, make it a "secret key" that is defined within the script, with a note to change it (or better still they make their own that must be x long and have this or that in it; if empty, fail with "key needed"). Safety first.
    1 point
  21. As you might know, whmcs has a problem with stripe: when the payment is not immediately confirmed by stripe (but requires to clic "capture" on stripe dashboard), whmcs does not record the order and the customer details and does not even send any notification to whmcs admin or to the customer. We solved with a hook that sends us an email with the order details, so that: - we know that there was a order attempt - we know that there might be a payment in stripe that requires manual "capture" - if necessary, we have all the client and order details in order to recreate the both client account and order. Here is the hook. <?php if (!defined("WHMCS")) { die("This file cannot be accessed directly"); } /** * Save all checkout data to a TXT file * AND email it to admin * Runs BEFORE order/invoice creation, and before redirect to Stripe. */ add_hook('ShoppingCartValidateCheckout', 1, function ($vars) { // --- 1. Clone and sanitise incoming data ------------------------------- $data = $vars; // Mask any possible card data (good practice even if Stripe never posts it) $sensitiveFields = [ 'ccnumber', 'cccvv', 'ccexpirymonth', 'ccexpiryyear', 'password', 'password2', ]; foreach ($sensitiveFields as $field) { if (!empty($data[$field])) { $data[$field] = '***masked***'; } } // --- 2. Attach cart contents from session (products, domains, etc.) --- $cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : []; $payload = [ 'timestamp' => date('Y-m-d H:i:s'), 'ip' => $_SERVER['REMOTE_ADDR'] ?? null, 'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? null, 'checkoutFields' => $data, 'cart' => $cart, ]; // --- 3. Build a text representation (for file & email) ---------------- $entry = "==============================\n"; $entry .= "Checkout submitted: " . $payload['timestamp'] . "\n"; $entry .= "IP: " . ($payload['ip'] ?? 'N/A') . "\n"; $entry .= "User-Agent: " . ($payload['user_agent'] ?? 'N/A') . "\n\n"; $entry .= "DATA:\n" . print_r($payload, true) . "\n\n"; // --- 4. Save to TXT file ---------------------------------------------- $logDir = __DIR__ . '/../../logs'; $logFile = $logDir . '/pre_stripe_checkout.txt'; if (!is_dir($logDir)) { @mkdir($logDir, 0700, true); } @file_put_contents($logFile, $entry, FILE_APPEND); // --- 5. Send email to admin ------------------------------------------- // This uses WHMCS' built-in admin notification helper. // The "system" type means it goes to the system email / admin notifications. if (function_exists('sendAdminNotification')) { $subject = 'Pre-Stripe Checkout Captured'; // Use <pre> so the print_r formatting is readable in HTML email $message = nl2br(htmlspecialchars($entry)); sendAdminNotification('system', $subject, '<pre>' . $message . '</pre>'); } // IMPORTANT: Do NOT return an error. Just let checkout continue. return; }); I suggest to implement it. It would be great if it would offer some sort of customization in the admin area.
    1 point
  22. sure it's just there's still some work going on in the background, I still have to print domain info properly in WHMCS whois lookup and so on, well there might be some unreturned information in upcoming days cuz as I said above there's still work going on for method that whois calls, but here's the working whois that you can write in your whois.json file if you need .ge domain registration { "extensions": ".ge,.com.ge,.net.ge,.org.ge,.edu.ge,.pvt.ge", "uri": "https://whois.ns.ge:443/index.php?domain=", "available": "NO OBJECT FOUND!" }
    1 point
  23. which is the definition of a lookup provider. all i'm saying is that WHMCS 7 is designed to either use whois, or a lookup provider, for ALL TLDs - you can't mix and match, e.g this module for .ge, but whois for .com - you have to put all your eggs in one basket.
    1 point
  24. I don't know, I gave up. WHMCS shipped the v9.0 RC with hardcoded links to /var/www/html/whmcs in the Nexus cart assets. It attempts to load Node modules but these were not part of the version they shipped. The cart doesn't work. The Nexus template's all.css file has this, so I assume it's Bootstrap 4. /** * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches. * * @version v4.0.0-alpha.1 * @homepage http://www.bootstrap-switch.org * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu) * @license Apache-2.0 */ I think WHMCS just rushed this release because they promised a release in December. This release is so botched. They've technically delivered on their promise, but yeah...
    0 points
  25. The Nexus theme have this bootstrap file: /whmcs/templates/nexus/sass stat ../../../node_modules/bootstrap-four/scss/bootstrap stat: ../../../node_modules/bootstrap-four/scss/bootstrap: stat: No such file or directory /*! * WHMCS Twenty-One Theme * Global Stylesheet * Copyright (c) 2020 WHMCS Limited * https://www.whmcs.com/license/ */ @import "../../../node_modules/bootstrap-four/scss/bootstrap"; @import "global"; @import "forms";
    -1 points
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated