Gone are the days where you have to wait in long registration queues to sign-up for an event or any type of registration. An increasing number of businesses are embracing online registration, as it has the added-value to both the parties involved. It eliminates unnecessary paperwork, improves efficiency, and allows users to sign-up anywhere at their convenience.
Recently, at Wisevu, we did a project for a daycare centre. It was an online membership website where parents who need supervision and care for their children during the daytime can enrol in the programs offered by the daycare centre. To enrol and pay for the program, the parent has to create an account.
Due to some complications in the payment scenarios, the project was a failure.
Project failures are not a total waste of time. These experiences are required to teach how to make your next project a success.
Now, let’s dive in.
1. Project details
Name of the company: Daycare Inc.
Requirement: Recurring payment options along with amount calculations.
Payment gateway used: Authorize.net
Plugin used: Paid Membership Pro plugin.
2. Payment requirement
The daycare centre offered three programs based on the child’s age.
- Program 1 (16 weeks to 12 months)- $1500/month
- Program 2 (12 months to 18 months) – $1000/month
- Program 3 (18 months to 3–4 years)- $500/month
3. Payment policy
The daycare centre has a policy where irrespective of the date the child has joined the program, the fee has to be paid at the start of every month. They also follow a recurring payment method where the amount will be automatically deducted from the parent’s credit card on the 1st of every month.
For example, say a parent visits the website on March 15th, 2019 with the intent to enroll their child for Program 1 on April 25th, 2019; he/she has to fill the fields in the registration form (start date, account creation, child name, credit card details, email id etc).
After the parent fills out the registration form and clicks ‘submit’, the daycare centre collects a deposit of $300 ($200 as registration fees and $100 as an advance on the first month’s fee).
According to the start date selected on the registration form, the pro-rated amount will be calculated and collected on the start date. Along with that, the additional $100 that was collected during the registration process as an advance will also be deducted from the pro-rated amount.
What is the pro-rated amount?
If you use a service for a lesser amount of time, you have to pay only for the time you have utilized the service. This is called a pro-rated charge. For example, a service costs $100 a month. But, you have used it only for half a month, so the service provider will charge you only $50.
4. Payment scenarios
Let us take a look at some of the payment scenarios and their respective calculations. <
Payment scenario 1
Suppose parent A wants to start Program 1 (fee is $1500) on April 25th, 2019, let’s see how the amount is calculated.
Pro-rata amount calculation
- Pro-rata calculation= (No. of working days between April 25th and April 30th x Program 1 amount / total working days in April 2019
- Pro-rata amount= (4×1500/21) = $285
The final amount parent A has to pay is $285-$100 (advance amount)= $185.
The parent has to pay $185 to the daycare on April 25th.
Starting on May 1st, 2019 the parent will be charged $1500 per month, which is the full monthly fee.
Payment scenario 2
Let’s say the parent wants to enroll their child in Program 3 (Fee is $500) on April 26th, 2019. Here is how the amount will be calculated.
Pro-rata amount calculation
- Pro-rata calculation= (No. of working days between April 26th and April 30th x Program 3 amount / total working days in April 2019)
- Pro-rata amount= (3×500/21) = $71
The final amount the parent has to pay is $71-$100 (advance amount) = -$29
So the parent needn’t pay any amount for April as the daycare centre has to return the extra $29. Instead of returning the amount then and there, they will deduct it from the next month’s fee.
As per the daycare’s payment conditions, the parent has to pay the monthly program fee on May 1st, 2019.
Since the daycare centre owes the parent $29, the total amount the parent has to pay on May 1st, 2019 is $500-$29=$471.
Payment scenario 3
What if the parent wanted to switch from Program 1 to Program 2 in the same month?
Let’s take an example to understand how the amount will be calculated.
If a parent has enrolled the child in Program 1 on April 2nd 2019 and wants to switch to Program 2 on April 16th, 2019, this is how the amount will be calculated.
- Program 1 = No. of attended days x program 1 fee / total no. of working days in April.
P1–>10 x $1500/21=$714
- Program 2= Remaining no. of working days x program 2 fee / the total number of working days in April.
P2–>11 x $1000/21=$523
The total amount the parent has to pay for switching to Program 2 is P1+P2-Program 1 fee
-$263 means the parent doesn’t have to pay any amount for switching to another program in April. The daycare centre will deduct this amount from the next months fees.
Total amount to be paid on May 1st –> $1000-$263 = $737.
5. Limitations of Authorize.net
With innovation in telecommunications, electronic payment systems are rapidly replacing traditional modes of payments.
There are many payment gateways on the rise because, with each transaction, there is a small fee taken by the payment gateway. So there is definitely interest in creating and running a payment gateway. A standard gateway that website developers choose is Authorize.net as it’s popular, easy to integrate and provides top-notch fraud protection systems.
Even though they have many advantages, the payment gateway was not suitable for our unique payment requirements.
Authorize.net handles recurring payments, but it’s not their core business. Their reporting, UI, and functionality around subscription/recurring are not as strong as the other providers who specialize in this area.
When you take a look at the payment policy of Daycare Inc, irrespective of the joining date, the parent has to pay the program fees at the start of every month.
Authorize.net does have a recurring payment option we require. Instead, Authorize.net requires that the amount is debited every month on the date the parent joined. There is no option for debiting the amount at the start of every month.
According to the Daycare Centre’s payment policy, if a parent joins on April 28th, 2019, the amount for the month of April will be collected on April 28th. And for the month of May, the program fee will be debited on May 1st; this is the rule for subsequent months as well.
Whereas in Authorize.net, if the parent has paid the amount on April 28th, 2019, the next month’s fees will be collected only on May 28th, 2019.
What we want to achieve from the payment gateway cannot be done easily as it needs two custom billing dates (e.g. first recurring amount is custom on April 15th and the second recurring amount is custom on May 1st)
To get such features, a completely new Authorize.net integration has to be created that involves combining one-time charges with subscriptions. You’d have to:
- Process a one-time transaction of $300 at the time of registration
- Set up a cron job or something similar to schedule another one-time transaction of the auto-calculated amount on a custom date
- Set up a subscription with a scheduled start date of the next first day of the month
Creating a completely new Authorize.net integration is more complicated and will require a large amount of custom code, and a totally custom gateway implementation.
Full custom development is really complex and a time consuming one. If we do everything from scratch including billing reports to carry over with pro-rata logic, the development will be similar to a product development where there will be many test cases and many new uncertain scenarios.
6. Paid Membership Pro (PMPro) Plugin limitations
If you have searched for the best membership plugins on WordPress, you would have come across PMPro. It is a WordPress membership plugin and support community for membership websites. It has many features that are absolutely free and 60+ add-ons that are also free to download.
The plugin is perfect for,
- Managing professional organizations with thousands of members
- Getting paid for e-learning and digital courseware
- Accepting recurring payment for content, podcasts, video, and more
- Creating private social communities for unique interest groups
- Developing robust directory or listings sites by topic or region
- Offering product subscriptions or members-only product discounts
- Flexibility and third-party integration capabilities
- The code is customizable to collect the 1st-month fee only on the start date specified by the customer during registration
- First month pro-rata amount calculation is possible (amount payable only for the days the child is going to attend the program)
PMPro plugin has some benefits, but we were not able to use it for our daycare centre project. We were not able to integrate the alternate payment scenario and its supporting calculations.
To find out if we could integrate the scenario, one of our developers contacted their support team. We did not get a response right away, only after constant follow-ups, they responded.
After that, our developer even had a call with the founder of the plugin, but the issue couldn’t be resolved as the plugin could not support payment scenario 3.
For example, if the parent wanted to switch from Program 1 to Program 2 on April 15th, 2019, the plugin takes only the whole 15 days (including weekends) for pro-rata calculation and not just the working days.
According to the author, for this calculation method to work, a new method or library has to be discovered which could further complicate things. He also said that the more complicated a code gets, the harder it will get to explain how payment is calculated to the user.
And there is another scenario where if the daycare centre had to pay the extra amount to the parent, then that amount needs to be deducted from the next month’s fees. PMPro plugin doesn’t automatically deduct the amount, it has to be done manually.
Our developers researched a lot to find an alternative plugin. Unfortunately, we couldn’t find any that fit the client’s requirements.
Under such circumstances, WordPress custom plugins prove to be quite useful. Unlike premade plugins, custom plugins can help you add the desired functionality and work exactly the way you want them to. But based on our requirements, developing a custom plugin would be too complicated and time-consuming.
In this article, we have provided a detailed description of the project we did and a possible solution. If you have come across a similar problem and solved the issue in a better way, please do share it with us in the comments section below. It will be helpful for us and for people who have experienced similar problems and haven’t found a solution yet.