Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

LadyDeathKZN's avatar

Tutorial on making recurring bank invoices

Hi, I am new here, and been using Laravel for a while now. I have been requested to create a billing system with recurring invoices payable via EFT or bank. Where can I find a tutorial on how to do this? I know nothing about tasks, queables and cronjobs. Any and all advice would be very much appreciated!

0 likes
3 replies
jlrdw's avatar

First realize you do not store a customers bank or credit card information, the service handles that.

Then whatever service you use, start with their documentation.

Cronix's avatar
Cronix
Best Answer
Level 67

That's a big question with little to go on. I'd suggest looking into Stripe or Braintree as a payment processor. They can handle subscriptions, which do the monthly invoicing/charging automatic. I suggest Stripe/Braintree because Laravel has a nice Cashier package which handles a lot of the harder stuff. https://laravel.com/docs/5.8/billing

Beyond that, like if you're using a different processor, you'd probably have to search around and see if there are tools/packages that make it easy to work in laravel with. The most basic way to invoice someone regularly would be to have a day of the month the user gets invoiced, such as the 10th of every month. Then you create a daily() scheduled task that just scans the db for all invoices that need to be processed on this date (today). If today is the 10th, you query all users whose invoice_date is the 10th, and send an email with a pdf invoice, or whatever you plan to do. If today is the 11th, you'd query each person due on the 11th. Basically just use `date('j') to get the current day of the month and query against that. Of course you'd have to build in logic to handle days that don't exist, such as if the billing date is the 31st of the month (like if they signed up on the 31st), then obviously you can't send an invoice for the 31st for months that don't have 31 days. Every month has at least 28 days, so if they sign up on the 29th/30th/31st, you'd enter it as 28 for the billing date (or something like that) https://laravel.com/docs/5.8/scheduling

The simplest is to use Stripe/Braintree. It basically does everything for you and tremendously simplifies this.

LadyNay's avatar

@CRONIX - Thank you so much for the reply, sadly I live in South Africa and we are limited to bank EFT, payfast, and other paygates, we don't have stripe or paypal in our currency. I had thought about doing a conversion to ZAR (Rand) from USD, but not many South Africans have paypal accounts.

I will definitely look into scheduling. Thank you so much for taking the time to go into an in depth explanation for me to understand properly. I really appreciate it.

Please or to participate in this conversation.