Jump to content

WHMCS.Community

  1. The Latest WHMCS Release

    1. WHMCS 8.13 Release Discussion Board

      We are pleased to announce the release of WHMCS 8.13 to General Availability.

      WHMCS V8.13 includes PHP 8.3 Support, SocialBee in MarketConnect, Manual User Password Resets, a New Getting Started Wizard, a new Admin Template preview, Scheduled Replies and Notes for Support Tickets, TROY Card support, and much more!


      For more information about all of the new features in WHMCS 8.12, visit the What's New in WHMCS 8.13 Microsite and Release Notes.

      90
      posts
  2. WHMCS.Community

    1. Community Announcements

      Our WHMCS Community Announcements with everything from our community rules to updates on making our community more awesome

      160
      posts
    2. Introduce Yourself

      Introduce yourself here and be sure to come back to welcome others.

      1.2k
      posts
    3. MarketConnect Partner Product Status Updates

      This board is used to communicate any planned or unplanned MarketConnect partner product status updates, this board is read-only and will be updated via the MarketConnect Team when issues arise.  If you are experiencing an issue that is not reported in this board please review the MarketConnect Help Centre or Open a Ticket with our team

      36
      posts
  3. Using WHMCS

    1. Pre-Sales Questions

      Considering purchasing WHMCS but have some questions? Ask them here.

      13.1k
      posts
    2. Admin & Configuration Questions

      This is your space for any questions about WHMCS configuration settings.
       

      6.4k
      posts
    3. Installation, Upgrade, and Import Support

      Get help from the community with installing, upgrading and migrating to WHMCS here

      6k
      posts
    4. Using WHMCS

      Have a question about how something works or need help configuring and using WHMCS? Here's the place to do it.

      96.2k
      posts
    5. Troubleshooting Issues

      Use this board to discuss any issues or problems you are encountering. If you think you've found a bug, please report it here

      27.8k
      posts
    6. Vendor Discussions

      Discuss Control panels, payment gateways and domain registrars here

      820
      posts
  4. WHMCS Showcase

    1. Showcase Your Site

      Customized and integrated WHMCS in some way? Show the WHMCS Community here!
       

      8k
      posts
    2. Share Your Best Practices & Tips

      Share your tips and advice to the rest of the WHMCS community.
       

      354
      posts
  5. Developing & Extending WHMCS

    1. Third Party Add-ons

      A place to discuss third party modules, add-ons and extensions for the WHMCS platform.

      marketplace_inverse_728x90.png&key=ebc9c3244aa6bb0297564b81d8e33ae4d631eaca838fc05b66038be9162910c7&resource=1

      18.5k
      posts
    2. Service Offers & Requests

      A place to post offers & requests for services related to WHMCS. Rules apply.

      22.6k
      posts
    3. Developer Corner

      Integration, customization and module development, if you have questions, ask them here.

      58.8k
      posts
    4. Building Modules

      Need help while building an extension? Ask your questions here.

      631
      posts
    5. Share Ideas for WHMCS Modules

      Looking for an extension that doesn't exist? Share your ideas and vote on others.

      180
      posts
  6. Community Competitions

    1. News, Announcements & Blogs from WHMCS

      The latest WHMCS News, Announcements & Blog Posts from WHMCS are shared here

      592
      posts
    2. Competitions

      From time to time we run community competitions this is the place you'll find them

      • No posts here yet
  7. General Discussions

    1. General Discussion

      Board for general conversation, share interests, discuss industry related news, etc...

      39.9k
      posts
  8. General Feedback & Assistance

    1. Feedback

      WHMCS Community Feedback helps us to continue improving WHMCS software.

      8.6k
      posts
    2. WHMCS.Community Tips & Tricks

      This board provides an overview of some features and functionality that WHMCS.Community provides.  We add new content from time to time.

      6
      posts
  9. Club Forums

      • No posts here yet
    1. Katamaze Free Scripts

      Perfect your WHMCS with free action hooks, reports and modules. Follow us on Github for more contents.

      49
      posts
    2. Katamaze Module Support

      This board acts as a place where you can get support by us (no guarantee) or by fellow users using your same module.

      139
      posts
    3. 16
      posts
    4. 523
      posts
    5. 493
      posts
    6. 107
      posts
    7. RactStudio Club Topics

      RactStudio is a software development company that offers a range of WHMCS and WordPress products and services that are designed to enhance the functionality and user experience of these platforms. With a focus on quality, affordability, and customer support, RactStudio is the perfect partner for any web hosting company, blogger, and other online businesses who want to take their online presence to the next level.

      • No posts here yet
    8. 69
      posts
    9. 79
      posts
    10. 6
      posts
    11. 7
      posts
    12. 5
      posts
      • No posts here yet
    13. 9
      posts
      • No posts here yet
    14. 29
      posts
    15. 290
      posts
    16. 20
      posts
    17. 22
      posts
  • Popular Contributors

  • Our picks

  • Topics

  • Posts

    • Thanks,  have used Carbon but still get the same result.  I have a workaround to do a sql date update as below which is far from ideal.   <?php   if (!defined("WHMCS")) { die("This file cannot be accessed directly"); }   require_once __DIR__ . '/../../../init.php'; require_once __DIR__ . '/security.php'; require_once __DIR__ . '/../../../vendor/autoload.php'; use WHMCS\Database\Capsule; use Carbon\Carbon;   $moduleName = 'csvpaymentimport'; $moduleConfiguration = Capsule::table('tbladdonmodules')->where('module', $moduleName)->pluck('value', 'setting'); $moduleVersion = $moduleConfiguration['version'] ?? 'Unknown';   echo '<h2>Upload Payment  Register CSV File</h2>'; echo '<h3>This must be correct - a mistake in CSV will do weird things!</h3>'; echo '<h4>Module Version: ' . htmlspecialchars($moduleVersion) . '</h4>'; echo '<p>Current system date/time: ' . date(DATE_RFC2822) . '<br />'; echo 'timezone: ' . date_default_timezone_get() . '</p>'; echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '?module=mcitpayment&action=upload" enctype="multipart/form-data">'; echo '<input type="file" name="fileToUpload" id="fileToUpload"><br />'; echo '<input type="submit" class="btn btn-primary" value="Upload File and process" name="submit">'; echo '<br />This may take a while to process<br />'; echo '</form>';   if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['fileToUpload'])) { $fileTmpPath = $_FILES['fileToUpload']['tmp_name']; $fileName = $_FILES['fileToUpload']['name']; $fileType = $_FILES['fileToUpload']['type']; $fileNameCmps = explode(".", $fileName); $fileExtension = strtolower(end($fileNameCmps));   $allowedfileExtensions = ['csv']; if (in_array($fileExtension, $allowedfileExtensions)) { if ($_FILES['fileToUpload']['error'] === UPLOAD_ERR_OK) { $file = fopen($fileTmpPath, 'r'); if ($file === false) { echo "Failed to open uploaded file."; return; } fgetcsv($file);   if ($moduleConfiguration['debug']) {   echo '<pre>Module Config: '; var_dump($moduleConfiguration); echo '</pre>'; }   while (($row = fgetcsv($file)) !== FALSE) { $clientId = $row[0]; $csvdate = str_replace('/', '-', $row[1]); try { $carbonRef = Carbon::now('Africa/Johannesburg'); $carbonized = $carbonRef->carbonize($csvdate); $csvdateFormatted = $carbonized->format('Y-m-d H:i:s.u'); } catch (Exception $e) { $csvdateFormatted = $csvdate; } $csvDescription = $row[2]; $amount = $row[3]; $status = $row[4]; $guid = $row[5];     if ($status !== 'a') { continue; }   // Clean the amount by removing spaces and unwanted characters $amount = trim($amount); $amount = str_replace(' ', '', $amount); $amount = str_replace(',', '', $amount); $amount = preg_replace('/[^\d\.]/', '', $amount);   $postData = [ 'identifier' => $moduleConfiguration['identifier'], 'secret' => $moduleConfiguration['secret'], 'action' => 'AddTransaction', 'responsetype' => 'json', 'userid' => $clientId, 'amountin' => $amount, 'date' => $csvdateFormatted, 'credit' => 'true', 'description' => 'ImportST: ' . $csvDescription, 'transid' => $guid, 'paymentmethod' => 'banktransfer', ];   if ($moduleConfiguration['debug']) { echo '<pre>Post Data: '; var_dump($postData); echo ", LogDir: "; $logDirectory = dirname(__DIR__, 4) . '/logs/'; $dateToday = date("Y-m-d"); $logFile = $logDirectory . "api_transaction_log_{$dateToday}.txt"; echo $logFile; echo '</pre>'; }   $response = callApi($postData, $moduleConfiguration); if ($moduleConfiguration['debug']) { echo '<pre>API Response Dump:'; var_dump($response); echo '</pre>'; } if (isset($response['result']) && $response['result'] == 'success') { echo "Transaction added successfully for client ID $clientId <br>";   // Only update SQL date if enabled in module configuration if (!empty($moduleConfiguration['sql_date_update'])) { try { $dateForDb = date('Y-m-d', strtotime($csvdateFormatted)); Capsule::table('tblaccounts') ->where('transid', $guid) ->update(['date' => $dateForDb]); if ($moduleConfiguration['debug']) { echo "Updated transaction date for transid $guid to $dateForDb<br>"; } } catch (\Exception $e) { echo "Failed to update transaction date for client ID $clientId: " . $e->getMessage() . "<br>"; } }   } else { echo "Failed to add transaction for client ID $clientId: " . json_encode($response) . "<br>"; }   writeToLog($clientId, $csvdate, $amount, isset($response['transactionid']) ? $response['transactionid'] : '', $postData); } fclose($file); } else { echo "Error uploading file: " . $_FILES['fileToUpload']['error']; } } else { echo "Upload failed, unsupported file type."; } } else { echo "<br />No file uploaded yet or an error occurred."; }   function callApi($postData, $moduleConfiguration) { $ch = curl_init(); $customHost = $moduleConfiguration['customhost']; $customIP = $moduleConfiguration['api_ip']; $resolveString = "{$customHost}:443:{$customIP}";   curl_setopt($ch, CURLOPT_URL, $moduleConfiguration['api_url']); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Host: $customHost"]); curl_setopt($ch, CURLOPT_RESOLVE, [$resolveString]);   if ($moduleConfiguration['debug']) { curl_setopt($ch, CURLOPT_VERBOSE, true); $verbose = fopen('php://temp', 'w+'); curl_setopt($ch, CURLOPT_STDERR, $verbose); }   $response = curl_exec($ch); $info = curl_getinfo($ch);   if ($moduleConfiguration['debug']) { if ($response === false) { echo "cURL error: " . curl_error($ch) . "\n"; } rewind($verbose); echo "cURL verbose information:\n" . stream_get_contents($verbose) . "\n"; }   if (curl_error($ch)) { echo 'cURL connection error: ' . curl_error($ch) . "\n"; }   curl_close($ch);   if ($moduleConfiguration['debug']) { echo "cURL info: \n"; print_r($info); echo "API Response: \n"; print_r($response); }   $jsonData = json_decode($response, true); if ($moduleConfiguration['debug']) { echo "Decoded JSON Response:\n"; var_dump($jsonData); } return $jsonData; }   function writeToLog($clientId, $date, $amount, $transactionId, $postData) {   if (isset($_GET['debuglog']) || (isset($postData['debug']) && $postData['debug'])) { $logDirectory = dirname(__DIR__, 4) . '/logs/'; $dateToday = date("Y-m-d"); $logFile = $logDirectory . "api_transaction_log_{$dateToday}.txt"; echo "<pre>writeToLog called. LogDir: $logDirectory, LogFile: $logFile</pre>"; } $logDirectory = dirname(__DIR__, 4) . '/logs/'; $dateToday = date("Y-m-d"); $logFile = $logDirectory . "api_transaction_log_{$dateToday}.txt";   if (!file_exists($logDirectory)) { mkdir($logDirectory, 0750, true); }   $timeStamp = date("Y-m-d H:i:s"); $postDataString = json_encode($postData, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); $logEntry = "{$timeStamp} - Success: Client ID {$clientId}, Date: {$date}, Amount: {$amount}, Transaction ID: {$transactionId}\nPOST DATA: {$postDataString}\n";   file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX); } ?>
    • Protect Your WHMCS Business from Fraud & Bad Clients with FraudClient.com! Are you tired of dealing with fraudulent sign-ups, spammers, or abusive clients on your WHMCS hosting platform? Introducing the **FraudClient WHMCS Addon**, your essential tool to identify, report, and mitigate risks from problematic users! What is FraudClient.com? FraudClient.com is a community-driven platform designed to help hosting providers share and access information about fraudulent and high-risk clients. Our WHMCS addon seamlessly integrates this powerful service directly into your admin area, empowering you to make informed decisions and protect your business. Key Features & Benefits: Comprehensive Client Reporting: Easily report clients for various reasons such as Fraud, Spamming, Staff Abuse, Chargebacks, Phishing, Copyright Violations, and more. Contribute to a safer hosting community! Instant Fraud Point & Reliability Checks: Get immediate insights into a client's risk level directly from your WHMCS client list. Our system calculates a "Fraud Points" score and a "Reliability" rating (e.g., Low Risk, High Risk, Very High Risk) based on community reports. Seamless WHMCS Integration:     * View fraud data directly within your existing WHMCS client list.     * Quickly access a dedicated "Report Client" page pre-filled with client details.     * Improved client list pagination with a **dropdown page selector** for easier navigation, especially with large client databases. No more endless scrolling through page numbers! Secure API Key Authentication: Connect your WHMCS module to FraudClient.com using a secure API key generated directly from your FraudClient dashboard. This ensures robust and stateless authentication for all your module's API interactions. Pending Removal Requests Management: Directly manage and respond to client requests for report removal from within your dashboard. Notifications System: Stay informed with real-time notifications for important events related to your reports and account. Community-Driven Protection: Benefit from the collective intelligence of other hosting providers. By contributing, you help protect yourself and the entire community. Why You Need FraudClient.com: Get Started Today! The FraudClient WHMCS Addon is designed for simplicity and effectiveness. Protect your business and contribute to a safer online environment! https://marketplace.whmcs.com/product/7898-fraudclient Download the FraudClient WHMCS Addon Here! (WHMCS MarketPlace) https://fraudclient.com/download/fraudclient_whmcs/fraudclient_v1.2.3.zip Download the FraudClient WHMCS Addon Here! (Direct) FraudClient.com - Empowering Businesses Against Fraud. © 2025 FraudClient.com.  
    • Hello,  Has anyone here tried the Product Page Module for WHMCS? I'm thinking about using it to make my product pages look more organized and detailed. I’ve heard it helps you add images, proper formatting, and a clean layout. Would love to know if it makes a difference. I'm planning to try it soon — looks like a great way to improve product visibility. Thanks in advance.
    • Hello, Dear, We need the jwhmcs file module please to share. I will send give. But you need to help me   Thanks
    • Thank you for your comment. You can also participate in the Caasify project by using AutoVM.
    • I recently completed the setup of my WHMCS reseller hosting business. To be honest, I’m still quite new to all of this and learning every day, but I’m currently trying to figure out why I can’t see the payment methods I selected in my Stripe settings. Through Apps & Integrations, I activated Stripe as my payment processor and manually created an order for a customer, since my website is still under development. The customer received an invoice with a payment link, but that link only shows credit card as a payment method. It also uses the default WHMCS theme for the payment page. I expected to be redirected to the Stripe checkout page, where the customer would see the total price along with all available payment methods. For example, I enabled iDEAL and other options in my Stripe settings, but they are not showing up in WHMCS. Has anyone experienced this before? I’d like my customers to be forwarded to the Stripe checkout where they can choose from the payment methods I’ve enabled.
    • In the application, you can open a paid invoice and issue a Refund and set the Refund Type as 'Add to Client's Credit Balance'.  What is the correct API request for this? Would the following work (sample is using localAPI from a hook? I don't see a description available when issuing from invoice refund, so not sure it applies. Also, is amountout correct? //Add create credit from refund transaction $command = 'AddTransaction'; $values = array( 'invoiceid' => $invoiceid, // this would be passed in as declared var 'transid' => 'Test', 'userid' => $clientid, // this would be passed in as declared var 'description' => 'Credit added to client...', // not sure this would be used without testing 'amountout' => $creditamt, // not sure if amountin or amountout is used. This would be passed in as delcared var 'fees' => '0.00', 'credit' => '1', ); $addInvoiceCredit = localAPI($command, $values, $adminuser);  
    • Use Carbon for setting the formatting, in your code (https://carbon.nesbot.com/docs/#api-formatting) Provide example to assist you any further.
×
×
  • 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