yggdrasil Posted September 25, 2018 Share Posted September 25, 2018 I'm surprised nobody discussed this before. One of the things that I really but really dislike about WHMCS is how it allows for abusive spamming of orders. A user can keep creating the same renewal order for the same domain/product leaving you 100+ invoices and orders open. This seems to be a recurring problem on my end. A user creates an order for something, for some reason can't pay or won't pay and then generates a new order for exactly the same amount and product, ends up paying order number 5. But on my side I have to cancel the old orders and invoices and its also increasing the invoice numbers with fake or invalid orders. I dislike this, its not clean at all. I would really love WHMCS to implement a fix for this. The user should be notified and stopped from creating a new order for the same thing and just pay the current invoice. 0 Quote Link to comment Share on other sites More sharing options...
Kian Posted September 25, 2018 Share Posted September 25, 2018 Multiple unpaid orders should increase just proforma numbering unless you are not using proforma invoicing. Anyway as far as I know after placing an huge amount of consecutive orders (I can't say the exact number) WHMCS blocks the client and stops issuing proformas. Frankly I don't know if this feature is part of MaxMind and if it's still present. Last year I get used to trigger this protection frequently. I was adding a massive amount of orders to test some scripts and at some point WHMCS was blocking me. Anyway back on topic yeah, it would be great. I can think multiple ways to put some limitations with custom hooks but that's not the point here. It should be a standard feature. 0 Quote Link to comment Share on other sites More sharing options...
yggdrasil Posted September 25, 2018 Author Share Posted September 25, 2018 (edited) Actually, everything increases the ID on WHMCS because that is how its coded in the SQL database. I have no problem with that. But this is just trash data and every annoying for me and the customer. The customer now has to browse trough multiple cancelled invoices and I have to do the same on my accounting side. Imagine the following scenario, a customer with 50 invoices, but only 3 are paid and others are cancelled because that customer is dumb enough to generate an order each time his CC is not approved thinking he needs to create a new order. Even worse, a malicious sign up spamming orders. I'm not sure what protection you are talking about but that is not something WHMCS has. I'm also not exactly talking about a flood protection but making the customer experience nicer. Its very confusing for a customer to have multiple orders for the same domain renewal or product. The reason this is confusing for most people is that most companies don't generate an invoice unless you paid for something. WHMCS generates one every time you order something new. This is fine and I want this, but it's the same billed item, like a domain renewal for 1 year which a customer keeps doing over and over again it costs me more time to have to cancel the orders and invoices or plain it. Of course you can use hooks but this should never be part of external ad-dons. This should be something out of the box. There is no reason WHMCS should do this. John Doe goes to his WHMCS account, hits the renew button on example.com, invoice 9999 is generated for a renewal of example.com for 1 year for lets say $50 dollars. John Doe for some reasons forgets this and goes back an hour later once he has his the credit card at hand and does exactly the same thing. Now he creates a second order for exactly the same thing. John Doe pays that second order, now invoice 10000 is paid and the domain is renewed for 1 year. But invoice 9999 is not and John Doe has to contact you to cancel that order. If he does not, a late fee is added and he gets multiple reminders of emails. Even worse John Doe now is pissed and replies back saying he already paid the domain and why you are trying to charge him again. Does this sound unrealistic? Its not. People don't know how WHMCS works and generates orders and invoices. All they understand is that they paid for something and now you are trying to bill them again. You know need to explain users how the system works even if he does not care about how it works at all. Wait until you have more customers and you understand how this is a problem. You are now deleting orders and cancelling invoices every day. Edited September 25, 2018 by yggdrasil 0 Quote Link to comment Share on other sites More sharing options...
Eduardo G. Posted September 26, 2018 Share Posted September 26, 2018 First, enable proforma invoicing:https://docs.whmcs.com/Invoicing_Setup#Proforma_Invoicing Next, disable Continuous Invoice Generation:https://docs.whmcs.com/Invoicing_Setup#Continuous_Invoice_Generation 0 Quote Link to comment Share on other sites More sharing options...
yggdrasil Posted September 26, 2018 Author Share Posted September 26, 2018 9 hours ago, egrueda said: First, enable proforma invoicing:https://docs.whmcs.com/Invoicing_Setup#Proforma_Invoicing Next, disable Continuous Invoice Generation:https://docs.whmcs.com/Invoicing_Setup#Continuous_Invoice_Generation That is not really a solution to my problem. I'm not in the EU so proforma does not apply to me but even if I enable those options, I do need the continuous invoice generation. If you disable this, WHMCS will not bill the next month unless the first invoice is paid for existing subscriptions. I don't work like this and most companies don't want that either. Even if you don't pay the first month, the service is still active, I need to keep billing recurring customers each months, even if one invoice is not paid. This would stop new invoices from being generating for recurring customers as well and all I want is to avoid this on new orders. I don't have the problem with recurring invoices, that works fine. Its users that generate new orders, mostly domain renewals or registrations attempts. Another solution would be the following. Don't let a customer generate a new order if an existing one is already open and unpaid. At least this would avoid a person from generating new orders and he/she would need to contact us in order to cancel the first order if it was by mistake. This would also avoid a user generating an order for exactly the same product (duplicate orders). I think I will try to do this with a hook. If an existing order is unpaid, block the user from creating a new order. Not a perfect solution but at least it would train people not to keep generating orders they don't want to pay. In my case, some people just generate orders because they are trying to see if a product works without payment, or the payment fails on renewal, instead of going to the invoice and changing the payment option, they just create a new order because they think to switch payment providers they have to generate a new one. In other cases they just test something. I think this can work. Don't let new orders if an existing one is already pending. 0 Quote Link to comment Share on other sites More sharing options...
Kian Posted September 26, 2018 Share Posted September 26, 2018 At some point (I'm talking about hook points) before the invoice is issued you should run a simple query that checks for relid of currently selected domains/products in tblinvoiceitems for all open invoices (issued during the last X days). When this check returns true simply redirect the user to the existing invoice. Basically it's just a query (a boring one) and an header() location. 0 Quote Link to comment Share on other sites More sharing options...
yggdrasil Posted September 26, 2018 Author Share Posted September 26, 2018 10 minutes ago, Kian said: At some point (I'm talking about hook points) before the invoice is issued you should run a simple query that checks for relid of currently selected domains/products in tblinvoiceitems for all open invoices (issued during the last X days). When this check returns true simply redirect the user to the existing invoice. Basically it's just a query (a boring one) and an header() location. Yes, I will try that or the existing pending order idea. Seems like something very simple so its interesting why this is not already a setting inside WHMCS to prevent order spam. 0 Quote Link to comment Share on other sites More sharing options...
Eduardo G. Posted September 27, 2018 Share Posted September 27, 2018 14 hours ago, yggdrasil said: Another solution would be the following. Don't let a customer generate a new order if an existing one is already open and unpaid. At least this would avoid a person from generating new orders and he/she would need to contact us in order to cancel the first order if it was by mistake. This would also avoid a user generating an order for exactly the same product (duplicate orders). I think this can work. Don't let new orders if an existing one is already pending. I honestly think that's not a great idea. First, a potential customer can't make two orders at a time (yes, it happens) Second, the customer needs to make an action (contact you) Third, you need to make an action (like cancel previous order) And forth, customer needs to place an order again It's not an scalable solution, cause it requieres an extra amount of work, but only IMHO P.S. So maybe WHMCS doesn't suck, just is not adapted to your company or business, but it does work for the rest. Can't blame orange juice just because you prefer lemon juice 😉 0 Quote Link to comment Share on other sites More sharing options...
Kian Posted September 27, 2018 Share Posted September 27, 2018 We are talking about people that place new orders for pointless reasons like changing payment method or because they are too lazy to check existing proformas. I see people that systematically create new orders when they receive renewal notices even though there's the direct link to the proforma in the same message. The most cryptic create 2 or 3 orders for no reason, maybe insecurity. Frankly I don't see how redirecting people to existing proformas would require extra work. When a customer wants to renew example.com and is creating a duplicate order, we bring him to the existing proforma. From his point of view he has successfully created a new order. 0 Quote Link to comment Share on other sites More sharing options...
Eduardo G. Posted September 27, 2018 Share Posted September 27, 2018 2 minutes ago, Kian said: Frankly I don't see how redirecting people to existing proformas would require extra work. When a customer wants to renew example.com and is creating a duplicate order, we bring him to the existing proforma. From his point of view he has successfully created a new order. Let's put client makes an order or Product A, and leves order unpaid (Pending) Tomorrow he decides what he really needs is Product B, so he makes a new order for Product B What does he see? He cannot make a new order even if it's a legal order He will be shown an invoice for product A, when he was trying to order product B! Second point is important, as client could make payment for an old invoice, instead of generating a new invoice for a different product. And surprise! The client has paid the wrong invoice for the unwanted order! You cannot redirect a client to an invoice of a previous order when he's trying to make a new differente order, that's dangerous! (BTW: you could just advise the customer he already has a pending order/invoice using an alert div or similar, but never fool him) Abandoned orders are normal, you should handle them instead of reinventing the wheel and creating a forced innatural workflow. Why don't you just cancel or delete automatically those orders (and associated invoices) which are unpaid after X days? 0 Quote Link to comment Share on other sites More sharing options...
Kian Posted September 27, 2018 Share Posted September 27, 2018 (edited) I think you misunderstood me. We are not talking about redirecting clients to random proformas when they try to place a new order. This would make no sense. Product A is expiring. WHMCS has already issued the proforma for renewal. The customer instead of paying the existing document places a new renewal order causing the generation of a duplicate document. Here is where we redirect him to the existing proforma that is an exact copy of what he is trying to do. Another example. Client orders product A and leaves without paying. Few minutes or hours later he places the same exact order and leaves it unpaid. Next day he places a third order and finally pays it. What's the point of having 3 copies of the same order? Here is where we would use the redirect. If the product, configuration and price is the same, everytime he tries to create a duplicate order/proforma we redirect him to the original order/proforma fixing dates if necessary. Edited September 27, 2018 by Kian 1 Quote Link to comment Share on other sites More sharing options...
yggdrasil Posted September 27, 2018 Author Share Posted September 27, 2018 9 hours ago, egrueda said: I honestly think that's not a great idea. First, a potential customer can't make two orders at a time (yes, it happens) Second, the customer needs to make an action (contact you) Third, you need to make an action (like cancel previous order) And forth, customer needs to place an order again It's not an scalable solution, cause it requieres an extra amount of work, but only IMHO P.S. So maybe WHMCS doesn't suck, just is not adapted to your company or business, but it does work for the rest. Can't blame orange juice just because you prefer lemon juice 😉 Yes and I completely understand it might not be what most people want. This is why I said it would be great if WHMCS had a way to just detected and prevent duplicate orders and only block those. For now what I mentioned before can work for me. You need to balance out the cons and pros of both solutions. For me, not letting users place a second order until the previous one is paid has more pros than cons. Its not a perfect solution but its better than nothing. To reply to your points: In my case, most good customers do not make multiple orders but just a single one, then pay that. They way it usually works, people that order several things, add all of that into their shopping cart and then pay. So its one order and they can still buy multiple things without troubles. The people that order things, then just order a second one without paying the first order are not the majority, but the ones that do this mess up and create more work for everyone else with multiple orders. And those people never actually pay the other orders anyway, they could had just created one order instead of multiple ones which is what I want to avoid. And I don't want this either because it means higher transactions fees. I want them to order multiple things in one order, not keep generating different orders with different invoices. People that make duplicate or fake orders still contact me anyway because they want me to cancel the duplicated orders that are still pending payment. Remember, the invoice is still open and they want that gone in their accounts as they already paid one order. The others they don't want anymore, are duplicated or they just did a mistake. Regardless if it's a duplicated order or a valid customer placing orders. If its the last one, at least he will understand that next time, he should pay the first order and will not be allowed to do a second one until the first one is paid. He will think twice now before hitting the order button. The only reason he would contact me is I block the second order because he didn't pay the first one. So that will train them for next time. As opposed to how it works now where they can just add orders and leave them without payment. Customers still contact you in both cases. Also, spammers or fraudsters never contact you either, they just create orders. Again, I need to do this anyway. And more than if I block the second orders. The reason is that people that do this, do it all the time. People that will really be interested in paying an order and made a real mistake are the minority. So I will have to cancel less orders than before. No, not at all. I will not cancel the first order. There is no need to place a second or duplicated order. If someone places an order for something, its normal to expect him to pay that first order first before ordering new stuff. I want them to follow the proper steps. Order, pay. Order, pay. Not create several different orders with different invoices and then just decide they want to pay 1, and leave the others. And there is one pro to the solution above. Malicious people can't spam your system with orders except one. Usually people doing fraud, try to order over and over again thinking they can bypass the fraud checks. 0 Quote Link to comment Share on other sites More sharing options...
yggdrasil Posted September 27, 2018 Author Share Posted September 27, 2018 8 hours ago, Kian said: We are talking about people that place new orders for pointless reasons like changing payment method or because they are too lazy to check existing proformas. I see people that systematically create new orders when they receive renewal notices even though there's the direct link to the proforma in the same message. The most cryptic create 2 or 3 orders for no reason, maybe insecurity. Frankly I don't see how redirecting people to existing proformas would require extra work. When a customer wants to renew example.com and is creating a duplicate order, we bring him to the existing proforma. From his point of view he has successfully created a new order. I also have that problem, not using proformas but its just how WHMCS works. Customers sets auto renewal on a domain. The invoice is generate before expiration date, payment fails, customers goes to WHMCS and generates a new renewal order instead of just paying the existing invoice. Sometimes the payment fails again and he creates a second renewal order. I sometimes I end up with 5 renewal orders for 1 domain. In a perfect world I would tell the customer "You created 5 renewal orders for 1 year each, now need to pay all of them" but then I will lose the customer since he only wants to renew for 1 year, not 5. He will blame the system for how it works and tell me I have to cancel the other 4 orders. 0 Quote Link to comment Share on other sites More sharing options...
yggdrasil Posted September 27, 2018 Author Share Posted September 27, 2018 8 hours ago, Kian said: I think you misunderstood me. We are not talking about redirecting clients to random proformas when they try to place a new order. This would make no sense. Product A is expiring. WHMCS has already issued the proforma for renewal. The customer instead of paying the existing document places a new renewal order causing the generation of a duplicate document. Here is where we redirect him to the existing proforma that is an exact copy of what he is trying to do. Another example. Client orders product A and leaves without paying. Few minutes or hours later he places the same exact order and leaves it unpaid. Next day he places a third order and finally pays it. What's the point of having 3 copies of the same order? Here is where we would use the redirect. If the product, configuration and price is the same, everytime he tries to create a duplicate order/proforma we redirect him to the original order/proforma fixing dates if necessary. Exactly! My problem is also about duplicated orders. What you mentioned is something that happens with new customers that are new to the system all the time. They order one thing, don't pay or finish the order. Come a few hours later and create a second order for the same thing because they forgot the first order. Sometimes a few days later they order the same thing again. You end up with 3 orders for the same thing. 0 Quote Link to comment Share on other sites More sharing options...
yggdrasil Posted September 27, 2018 Author Share Posted September 27, 2018 (edited) 9 hours ago, egrueda said: Let's put client makes an order or Product A, and leves order unpaid (Pending) Tomorrow he decides what he really needs is Product B, so he makes a new order for Product B What does he see? He cannot make a new order even if it's a legal order He will be shown an invoice for product A, when he was trying to order product B! Second point is important, as client could make payment for an old invoice, instead of generating a new invoice for a different product. And surprise! The client has paid the wrong invoice for the unwanted order! You cannot redirect a client to an invoice of a previous order when he's trying to make a new differente order, that's dangerous! (BTW: you could just advise the customer he already has a pending order/invoice using an alert div or similar, but never fool him) Abandoned orders are normal, you should handle them instead of reinventing the wheel and creating a forced innatural workflow. Why don't you just cancel or delete automatically those orders (and associated invoices) which are unpaid after X days? The solution I proposed is not perfect and yes, it would affect someone that wants to order a different thing in a different time period (later, tomorrow). It does not affect someone that wants to order multiple things in one order. In your example, he created an order for product A but now wants product B. So if I block the second order, he will need to contact me. First, it was the customers mistake. So yes, he should contact me. Then I will just update his first order with the correct product and the customer will not even need to create a second order. I will just update the first order/invoice with the proper product. It's the minority that make those mistakes. Usually in my experience the ones that order Product A, then order product B, and then order product C, and then just pay product A and leave the others without payment or just don't pay anything at all leaving all open. The good customers that understand the system will not order the incorrect product in the first place as WHMCS has multiple steps and its really hard to make a mistake with multiple confirmations in the ordering process. We are not talking here about redirecting customers from one order to another invoice. That would be clearly be a mistake and totally incorrect. If you mean he will go to the account and pay the incorrect invoice, with multiple order the chances of that is even higher. If the person has multiple invoices for multiple orders, he will most likely pay the incorrect one as opposed to just having one and taking a look at the description. Limit to one order, means only 1 invoice. Letting him create multiple orders by mistakes, means multiple invoices, now he can click the incorrect one and actually pay the incorrect product. In a perfect world, I would not block someone from creating multiple orders. WHMCS would be able to detect if the second order is equal to the first one (by checking the product) and block the duplicated order. This would fix the duplicated orders and still allow regular multiple orders for those that want them. But since that is a bit more complex to code, for me its easier just to make a simple check if an existing order is open and block any second order. This is a dumb solution but will work until it can be better integrated for only detecting duplicated orders with the product ID or invoice amount or both. Detecting a duplicate order is easy for a domain renewal but its a bit more complex for multiple products in one order that have multiple configurations and billing options. Simple solution? Check if the account has an existing pending order. Then show a message that he needs to pay the first order to generate a second one or contact us to cancel the pending one. For those that create duplicate orders, they will most likely now check the first order and just pay that one. No need to contact us. It would also stop bad actors from spamming the system and it would also train people not to place multiple duplicated orders. The only reason they would contact us is if it was a real mistake and I have no problem with that. Customer service is acceptable as long as they are real people doing a real mistake and not just someone wasting your time. If someone contacts you, its very likely he already has intentions to pay the second order. It can absolutely scale because I don't have to waste resources into the ones that don't pay and still create multiple orders. Having to check and cancel multiple orders takes more time than someone that made a mistake on his initial order which is the minority. Less fake, spam and duplicate orders = saved staff time. Edited September 27, 2018 by yggdrasil 0 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.