Jump to content

All Activity

This stream auto-updates     

  1. Past hour
  2. Welcome to WHMCS.Community Charlesrip! We're glad you're here please take some time to familiarise yourself with the Community Rules & Guidelines and take a moment to introduce yourself to other WHMCS.Community members in the Introduce Yourself Board.

  3. Today
  4. I'd made a post previously here, but I've got a bit more information to add now. When a client uses Stripe to pay an invoice which was created in the admin area, the below error message is output. This does not occur if the client creates the order themselves in the shopping cart. Stripe\Error\InvalidRequest: This PaymentIntent's statement_descriptor_suffix could not be updated because it has a status of succeeded. You may only update the statement_descriptor_suffix of a PaymentIntent with one of the following statuses: requires_payment_method, requires_confirmation, requires_capture. in /var/www/html/whmcs/vendor/stripe/stripe-php/lib/ApiRequestor.php:210 from API request 'req_MbP2wl7zdEb2Ue' Stack trace: #0 /var/www/html/whmcs/vendor/stripe/stripe-php/lib/ApiRequestor.php(173): Stripe\ApiRequestor::_specificAPIError('{\n "error": {\n...', 400, Object(Stripe\Util\CaseInsensitiveArray), Array, Array) #1 /var/www/html/whmcs/vendor/stripe/stripe-php/lib/ApiRequestor.php(473): Stripe\ApiRequestor->handleErrorResponse('{\n "error": {\n...', 400, Object(Stripe\Util\CaseInsensitiveArray), Array) #2 /var/www/html/whmcs/vendor/stripe/stripe-php/lib/ApiRequestor.php(126): Stripe\ApiRequestor->_interpretResponse('{\n "error": {\n...', 400, Object(Stripe\Util\CaseInsensitiveArray)) #3 /var/www/html/whmcs/vendor/stripe/stripe-php/lib/ApiOperations/Request.php(57): Stripe\ApiRequestor->request('post', '/v1/payment_int...', Array, Array) #4 /var/www/html/whmcs/vendor/stripe/stripe-php/lib/ApiOperations/Request.php(39): Stripe\ApiResource::_staticRequest('post', '/v1/payment_int...', Array, Object(Stripe\Util\RequestOptions)) #5 /var/www/html/whmcs/vendor/stripe/stripe-php/lib/ApiOperations/Update.php(41): Stripe\ApiResource->_request('post', '/v1/payment_int...', Array, NULL) #6 /var/www/html/whmcs/modules/gateways/stripe.php(0): Stripe\PaymentIntent->save() #7 /var/www/html/whmcs/vendor/whmcs/whmcs-foundation/lib/Module/AbstractModule.php(0): stripe_post_checkout(Array) #8 /var/www/html/whmcs/vendor/whmcs/whmcs-foundation/lib/Module/Gateway.php(0): WHMCS\Module\AbstractModule->call('post_checkout', Array) #9 /var/www/html/whmcs/cart.php(0): WHMCS\Module\Gateway->call('post_checkout', Array) #10 {main} From what I can see in the Stripe API logs, in these cases an extra API call is made after the payment capture is completed. This Post which causes the error has the following body: { "description": "{Company Name} - Invoice #INV-159", "statement_descriptor_suffix": "{company} WHMCS Testing" } This post occurring doesn't seem to me to be something I have control over; am I wrong, or is it a bug with the gateway module? The payment still succeeds, and refreshing the page brings up the Order Confirmation screen. I had thought the error occurred consistently but it appears to happen about half the time in these circumstances. I'll update this post if I figure out how to replicate the error consistently, but I'd appreciate any ideas in the meantime.
  5. EvolveWebHosting

    Confused about new Paypal Checkout and Subscriptions

    Did a little bit of research and I'm seeing that these 'subscriptions' are different from 'recurring payment profiles' from the Basic Paypal gateway. Confusing but I'll get used to it.
  6. v7.9.2 Pricing for every year 1-10 is enabled on the back end. Customer has a domain expiring in less than a year and the renewal options are only up to 5 years. Years 4 and 6-9 should be showing too.
  7. Yesterday
  8. @brian! Greetings. Thank you for your helpful contribution yet again. Could you assist me to understand how best to show the info in the client email template? I would make the email template in client area and send it when I see overpayment. For example; customer makes an overpayment by using 1) credit card and 2) bank transfer So it would be pertinent to write and tell them (amazing how many people pay twice and don't realise!) Dear [carelessclientfirstname] You have paid us twice, although we could spend it in the pub, we thought we'd advise you that: Invoice #{$invoice_num} which was for a total of {$invoice_total} now has a balance of {$invoice_balance} You've paid a total of {$invoice_amount_paid}, and the most recent payment was {$invoice_last_payment_amount} on {$invoice_date_paid} ^^^^^ that's all good.... This part I need help with because I want to show a list of transactions / payments made, along with the payment gateway, the amount and date - essentially allows client to understand why this error occured and probably not do it again.... {foreach from=$invoices item=invoice} <<<<<<<< not sure about that{$invoice_pay_method_type}: {$invoice_payment_method} {$invoice_last_payment_amount} on {$invoice_date_paid}{/foreach}
  9. Just upgraded to v7.9.2 and enabled the new Paypal gateway. I thought I read that subscriptions aren't supported yet I'm seeing the option during checkout and from the admin side to cancel a subscription when cancelling an order. Did this option just become available?
  10. I notice 7.9.2 is now released and the new module supports subscriptions. I use the original PayPal Basic module and have the 'Never show the subscription payment button' checked - so customers need to pay manually each invoice via paypal. I want to continue this rather than have subscriptions. Can WHMCS confirm this new module can do this?
  11. Ultime Hosting

    RequestDelete after domain status change

    Unfortunately I'm not the registrar i'm just using their service, and I'm stuck looking for a solution to dont have many domains renewed without payment, because I'm paying for them instead. Regards,
  12. Remitur

    RequestDelete after domain status change

    This seems a very strange management of the registrar you're using... If auto-renew is enabled, it's done BEFORE expiration date; for some TLDs, it may be done during grace period. I don't know any TLD which may have auto-renew at rhe end of grace period (also because during grace period a domain is usually parked, and so no one would be happy to have a domain which every year does not work for 3 to 4 weeks ...
  13. Ultime Hosting

    RequestDelete after domain status change

    That's the main idea, but any tutorial on how i can do it ?! Or any exemple online ?!
  14. Welcome to WHMCS.Community Kudaztikfump! We're glad you're here please take some time to familiarise yourself with the Community Rules & Guidelines and take a moment to introduce yourself to other WHMCS.Community members in the Introduce Yourself Board.

  15. Hi all, First off, apologies if this is the wrong community for this; I wasn't sure where to post for template customization questions. I'm in the process of redesigning my site and updating the WHMCS template accordingly. I've got the main website design finished using Bootstrap 4. I managed to (mostly successfully) update the header.tpl with the design from my main site, but having trouble with the footer. Currently I've got my footer code in the footer.tpl but it's not working as a sticky footer the way it is on my main pages. I'm using a container for everything to keep the footer sticky (i.e on the bottom of every page regardless of content), but this is broken with the .tpl files. Does anyone know if there's a way to get the footer to behave the way I want with WHMCS, preferably with Bootstrap 4 code still there? I'm guessing the container code doesn't work because WHMCS and Smarty split the content up, but I'm no expert. Other things such as the navbar don't behave 100% correctly either, but I'm not as worried about that right now. The site in question is here: http://vertimystsolutions.com/v3/ (main site, how it's supposed to look) and http://vertimystsolutions.com/clients/ (WHMCS client page) My header.tpl code: <!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="icon" href="http://vertimystsolutions.com/v3/images/favicon-192.png"> <!-- Bootstrap CSS --> <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" href="http://vertimystsolutions.com/v3/styles/vs_aqua.css"> <script src="https://kit.fontawesome.com/9cf0b2704e.js" crossorigin="anonymous"></script> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> {include file="$template/includes/head.tpl"} {$headoutput} <title>{if $kbarticle.title}{$kbarticle.title} - {/if}{$pagetitle} - {$companyname}</title> </head> <body> {$headeroutput} <div class="d-flex flex-column sticky-footer-wrapper"> <!-- begin footer wrapper --> <nav class="navbar navbar-expand-xl navbar-light bg-light"> <a class="navbar-brand" href="#"><img src="http://vertimystsolutions.com/v3/images/v3_logo_295_56.png" alt="Vertimyst Solutions"></a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="pr-0 navbar-nav"> <li class="nav-item active"> <a class="nav-link" href="index.php">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="services.php">Services</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Register</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Support</a> </li> <li class="nav-item"> <a class="nav-link" href="contact.php">Contact</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Blog</a> </li> <li class="nav-item"> <a class="nav-link" href="about.php">About</a> </li> </ul> </div> </nav> {if $templatefile == 'homepage'} <section id="home-banner"> <div class="container text-center"> {if $registerdomainenabled || $transferdomainenabled} <h2>{$LANG.homebegin}</h2> <form method="post" action="domainchecker.php"> <div class="row"> <div class="col-md-8 col-md-offset-2 col-sm-10 col-sm-offset-1"> <div class="input-group input-group-lg"> <input type="text" class="form-control" name="domain" placeholder="{$LANG.exampledomain}" autocapitalize="none" /> <span class="input-group-btn"> {if $registerdomainenabled} <input type="submit" class="btn search" value="{$LANG.search}" /> {/if} {if $transferdomainenabled} <input type="submit" name="transfer" class="btn transfer" value="{$LANG.domainstransfer}" /> {/if} </span> </div> </div> </div> {include file="$template/includes/captcha.tpl"} </form> {else} <h2>{$LANG.doToday}</h2> {/if} </div> </section> <div class="home-shortcuts"> <div class="container"> <div class="row"> <div class="col-md-4 hidden-sm hidden-xs text-center"> <p class="lead"> {$LANG.howcanwehelp} </p> </div> <div class="col-sm-12 col-md-8"> <ul> {if $registerdomainenabled || $transferdomainenabled} <li> <a id="btnBuyADomain" href="domainchecker.php"> <i class="fas fa-globe"></i> <p> {$LANG.buyadomain} <span>&raquo;</span> </p> </a> </li> {/if} <li> <a id="btnOrderHosting" href="cart.php"> <i class="far fa-hdd"></i> <p> {$LANG.orderhosting} <span>&raquo;</span> </p> </a> </li> <li> <a id="btnMakePayment" href="clientarea.php"> <i class="fas fa-credit-card"></i> <p> {$LANG.makepayment} <span>&raquo;</span> </p> </a> </li> <li> <a id="btnGetSupport" href="submitticket.php"> <i class="far fa-envelope"></i> <p> {$LANG.getsupport} <span>&raquo;</span> </p> </a> </li> </ul> </div> </div> </div> </div> {/if} {include file="$template/includes/verifyemail.tpl"} <section id="main-body"> <div class="container{if $skipMainBodyContainer}-fluid without-padding{/if}"> <div class="row"> {if !$inShoppingCart && ($primarySidebar->hasChildren() || $secondarySidebar->hasChildren())} {if $primarySidebar->hasChildren() && !$skipMainBodyContainer} <div class="col-md-9 pull-md-right"> {include file="$template/includes/pageheader.tpl" title=$displayTitle desc=$tagline showbreadcrumb=true} </div> {/if} <div class="col-md-3 pull-md-left sidebar"> {include file="$template/includes/sidebar.tpl" sidebar=$primarySidebar} </div> {/if} <!-- Container for main page display content --> <div class="{if !$inShoppingCart && ($primarySidebar->hasChildren() || $secondarySidebar->hasChildren())}col-md-9 pull-md-right{else}col-xs-12{/if} main-content"> {if !$primarySidebar->hasChildren() && !$showingLoginPage && !$inShoppingCart && $templatefile != 'homepage' && !$skipMainBodyContainer} {include file="$template/includes/pageheader.tpl" title=$displayTitle desc=$tagline showbreadcrumb=true} {/if} My footer.tpl code: </div><!-- /.main-content --> {if !$inShoppingCart && $secondarySidebar->hasChildren()} <div class="col-md-3 pull-md-left sidebar sidebar-secondary"> {include file="$template/includes/sidebar.tpl" sidebar=$secondarySidebar} </div> {/if} <div class="clearfix"></div> </div> </div> </section> <div class="modal system-modal fade" id="modalAjax" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content panel panel-primary"> <div class="modal-header panel-heading"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true">&times;</span> <span class="sr-only">Close</span> </button> <h4 class="modal-title">Title</h4> </div> <div class="modal-body panel-body"> Loading... </div> <div class="modal-footer panel-footer"> <div class="pull-left loader"> <i class="fas fa-circle-notch fa-spin"></i> Loading... </div> <button type="button" class="btn btn-default" data-dismiss="modal"> Close </button> <button type="button" class="btn btn-primary modal-submit"> Submit </button> </div> </div> </div> </div> {$footeroutput} <footer> <div class="container-fluid pt-0 px-0"> <!-- begin footer container--> <div class="row footer mt-auto pt-5 pb-5 no-gutters"> <!-- begin footer row --> <div class="col-md-3 text-center mx-auto px-5"> <h3>Quick Links</h3> <ul class="mx-auto" style="list-style: none"> <li><a href="services.php">Services</a></li> <li><a href="contact.php">Book an Appointment</a></li> <li><a href="#">Support</a></li> <li><a href="#">Blog</a></li> </ul> </div> <div class="col-md-3 text-center mx-auto"> <h3>Latest Blog Posts</h3> <!-- blog content goes here --> </div> <div class="col-md-3 text-center mx-auto"> <h3>Contact Us</h3> <ul class="mx-auto" style="list-style: none"> <li><i class="fas fa-phone-alt"></i> 613.663.2384</li> <li><i class="fas fa-at"></i> contact@vertimystsolutions.com</li> </ul> </div> <div class="col-md-3 text-center mx-auto"> <h3>Follow Us</h3> <ul class="mx-auto" style="list-style: none"> <li><a href="http://facebook.com/vertimystsolutions"><i class="fab fa-facebook"></i> Facebook</a></li> <li><a href="http://twitter.com/vertsolutions"><i class="fab fa-twitter"></i> Twitter</a></li> </ul> </div> </div> <!-- end footer row --> <div class="row footer no-gutters"> <div class="col text-center mb-3"> &copy; {$date_year} Vertimyst Solutions. All Rights Reserved. </div> </div> </div> <!-- end footer container --> </footer> </div> <!-- end footer wrapper --> </body> </html>
  16. DennisHermannsen

    RequestDelete after domain status change

    AFAIK, WHMCS sets the status based on the expiry date. If the domain is past expiry date, the status will be set to expired. If you've defined a grace period, status will be set to Grace Period for the amount of days that you have configured. You could create a hook that would run during the daily cron. Search for domains in the database with status=grace, select the name and run the code that would delete the domain with your registrar.
  17. Ultime Hosting

    RequestDelete after domain status change

    As long as whmcs can switch status from active to expired to grace or redemption It is possible to do so, how does whmcs change domain status ?!
  18. DennisHermannsen

    Stripe "Uncaptured" Payments

    There's no point in not updating. If it's not fixed yet, you'll still have the issue. If it is fixed, you'll find out straight away.
  19. DennisHermannsen

    RequestDelete after domain status change

    Sadly, it doesn't seem like WHMCS has a hook for something like 'DomainStatusUpdate', so I don't see an easy way out of your issue. May I ask what registrar you're using?
  20. DennisHermannsen

    Send Updated Invoice (Automatically)

    Time and effort. It takes time to learn accounting laws for a single country. It takes forever to learn the laws of every country. Sadly, that's not an excuse. The more I've learned about different countries' laws about accounting, the more it feels like WHMCS is made solely by developers without much input from accountants.
  21. Ultime Hosting

    RequestDelete after domain status change

    This can't be done on registrar level as we done have access to. Does anyone have an idea about how to execute a function when domain changes status ?
  22. Bertie

    Send Updated Invoice (Automatically)

    I shall give it a go and see what happens. Regarding your last comment: Yeah I've seen that a credit note function was requested 4 years ago and it's still in "Planned" status. Really not sure what is taking so long considering many countries require such things.
  23. DennisHermannsen

    Send Updated Invoice (Automatically)

    I think you could use this hook: UpdateInvoiceTotal Try this: <?php /** * WHMCS hook that will automatically send the 'Invoice Modified' once an invoice is modified * @author DennisHermannsen */ add_hook('UpdateInvoiceTotal', 1, function($vars) { $command = 'SendEmail'; $postData = array( 'messagename' => 'Invoice Modified', 'id' => $vars['invoiceid'], ); localAPI($command, $postData); }); I've tested it on my dev installation and it seems to work just fine. I'm using this API call: https://developers.whmcs.com/api-reference/sendemail/ Edit: A thing that is worth to mention is that laws in some countries doesn't allow you to change anything (not even the address or name of receiver) about an invoice once it has been sent. Unfortunately, WHMCS doesn't care for this at all and will still modify the invoices. It's a shame.
  24. DennisHermannsen

    RequestDelete after domain status change

    That just sounds like you need to set the default action to be taken when the domain expires. This should be set with the domain registrar. With Hexonet, you will have a setting like this in their control panel.
  25. Hi, Is there a way if a client disables auto-renew on a domain name which then removes it from an active invoice. That specific invoice is then re-sent out to the client? For example an invoice on a clients account had two items. One of them was removed as they disabled auto-renew on the domain name. Is it possible to make that invoice to be sent back to the client via email with the updated version? It would only make sense if the invoice had multiple products on them though so not sure if that makes it even harder to do. Have an awkward accounts department for a client who refuses to log into the portal to see the updated invoices. So seeing if there is an easier way to make this better for everyone involved. Cheers,
  26. Ultime Hosting

    RequestDelete after domain status change

    I'm using a genericEPP registrar module, it the deleterequest isnt sent the domain is automatically renewed. I need idea about how to execute a command when domain status changes from grace to redemption that's all Thanks again
  27. Remitur

    RequestDelete after domain status change

    Are you sure that the registrar module you're using allows the domain delete command? BTW: usually, issuing a domain delete command if a domain is in redemption mode it's not only not required, but it's also impossible. What is the domain extension involved? And what's the registrar module you're using?
  28. We've just released an update that let you make use of Customer Retention strategies to increase customer loyalty and decrease turnover by managing cancellation requests involving both domains and products/services. Here's an animated gif from which you can view how it works. Of course cancellation requests can be reviewed and managed from WHMCS administration.
  1. Load more activity
×

Important Information

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