Blog
A teacher opens a calendar and schedules next week’s Quran class. That is the entire action. No Zoom login, no copying a meeting link into an email, no checking who has paid this month. The meeting is created, the link reaches exactly the right students, and only the students who have paid can join. Everything after the teacher picks a time happens on its own.
Put simply, Dar-ul-Quran is an online platform for live Quran classes, and its core is two API integrations working in step: the Zoom API that turns a scheduled class into a live session automatically, and a payment gateway whose status decides who is allowed in. Built on Laravel, the platform ties meeting creation and student access to a single source of truth, whether the student has paid, so live classes and access manage themselves. This case study is about those integration problems, how we solved them, and the result.
Dar-ul-Quran connects students and teachers, with an admin overseeing the whole system. Its value is that live classes and access simply work, and delivering that meant solving several integration problems around Zoom and payments at once.
Both integrations sit behind a Laravel backend so they run automatically and stay in step. For live classes, the platform uses its own server-to-server Zoom credentials rather than any teacher’s account, so class creation is fully automatic and nobody has to log in or share a link. That server-to-server design is exactly the kind of API integration services work that removes a manual step people would otherwise repeat every week.
When a teacher schedules a session, the live-class flow runs in order:
Access is gated on payment. Scheduled jobs generate each student’s next-month invoices from their registered classes, and the payment gateway takes bank-transfer or card payments and reports success through webhooks, which flip the invoice to Paid and unlock access immediately. Until then, the next month’s classes stay locked behind a clear payment-pending message, and reminders go out by email, in-app and SMS during the last week, with a grace period before access is fully denied. Every Zoom and gateway call runs in a queued job with token handling and retries, which is where careful Laravel development keeps an expired token or a timeout from dropping a meeting or a payment update.
The architecture is a Laravel backend that integrates the Zoom API and a payment gateway, with access control tying them together, behind student, teacher and admin web apps. It centres on a handful of subsystems, each mapped to a requirement.
Each problem was met in a specific way. Turning a scheduled class into a live meeting was solved by the server-to-server Zoom API creating the meeting and link the moment a class is booked, so classes become live sessions with no teacher effort. Getting the link to the right people was solved by storing it on the session, sending it to enrolled students, and opening it with one join button, so there is no manual link sharing and nothing to lose. Tying access to payment came down to gating class visibility and the Zoom join on the invoice status, so attendance and payment can never drift apart.
Unlocking access in real time was handled by gateway webhooks flipping the invoice to Paid and opening access on the spot, with no waiting and no manual checks, the sort of billing behaviour that fintech and subscription-billing products depend on. Running billing without hands was solved by scheduled jobs that generate invoices, send reminders and enforce the grace period, so the monthly cycle runs itself. And staying reliable through expiring tokens and rescheduled classes came from queued jobs with token handling and retries, plus meeting updates on reschedule, so neither integration fails silently.
The outcome is a platform where live classes and access run themselves. A teacher schedules a class and the Zoom meeting, its link and the student notifications happen automatically. Students and teachers join with one button. Only students whose payment is confirmed can see and join the month’s classes, and the moment a payment clears a webhook unlocks access without anyone lifting a finger. Around this sit role-based dashboards for students, teachers and admins, messaging, rescheduling with approval, and monthly invoicing and reminders that need no manual work, all on Laravel.
If you are building a platform where scheduling, live sessions and paid access all have to stay in step, you can hire Laravel developers who have integrated Zoom and payment gateways into one automated backend, or tell us how your platform works and we will map your meetings, payments and access to flows that manage themselves.
Can a platform create Zoom meetings automatically without teachers logging in?
Yes. Dar-ul-Quran uses the Zoom API with the platform’s own server-to-server credentials, so a queued job creates the meeting and a unique join link the moment a class is scheduled. No teacher ever logs into Zoom or shares a link, and recurring classes have their meetings created ahead of time.
How do you stop unpaid students from joining classes?
Class visibility and the Zoom join are both gated on the student’s invoice status. Only students whose payment is marked Paid can see and join the next month’s classes, so attendance always matches payment. Until payment clears, those classes stay locked behind a clear payment-pending message.
How does access unlock the moment a student pays?
The payment gateway reports a successful payment through webhooks, which flip the invoice to Paid and unlock access immediately. Because the platform reacts to the gateway rather than polling on a schedule or checking by hand, access opens the instant a payment clears.
What happens if a Zoom or payment call fails?
Every Zoom and gateway call runs in a queued job with token handling and retries. An expired token or a timed-out call is recovered rather than dropping a meeting or a payment update, and admins can adjust access by hand when a payment needs manual attention.
How are monthly invoices and reminders handled?
Scheduled jobs generate each student’s next-month invoice from their registered classes, send reminders by email, in-app and SMS during the last week, and lock access after the due date and grace period. The whole billing and access cycle runs unattended.