Condominium developer·2020
A billing and payment platform for condominium buyers
A condominium developer needed to issue reservation fees and monthly statements, then give buyers a secure way to pay them online.
- Sector
- Real Estate, Payments
- My role
- Worked across the application as a full-stack developer within a multi-developer delivery team.
- Stack
- Laravel, Blade, JavaScript, jQuery, Bootstrap, MySQL, REST APIs
In 2020, I worked on a billing and payment platform for a condominium developer. The internal team needed to issue reservation fees and monthly statements, and buyers needed a secure link where they could see the amount and pay it online.
I was a full-stack developer within the delivery team, working across the application while another developer led the build.
Two types of billing, one payment flow
The first billing path covered the fee used to secure a unit reservation. The second covered the monthly statements issued as the sale progressed.
Although the timing and purpose were different, both needed the same basic trail: what was issued, who it belonged to, whether it had been paid, and which processor transaction matched it.
I contributed to the data model, billing and statement screens, buyer checkout, payment status handling, receipts, user access, reporting, and production fixes. I worked on those features from the Laravel backend through to the Blade and JavaScript interface.
Secure links and external payment processors
Each billing email includes a temporary signed link to the checkout. The application rejects expired or invalid links and prevents an already paid bill from being processed again.
The checkout integrates with PayMongo for card payments and AltPayNet for card, QR, and wallet methods, including Alipay, WeChat Pay, UnionPay QR, and GCash. The client can enable individual processors and payment methods through configuration.
On the administration side, users sign in to authenticated accounts, access is limited by module, inactive accounts can be blocked, submissions are validated on the server, and important actions are logged.
Treating payment as more than a redirect
Sending a buyer to a processor does not mean the bill has been paid. The application uses the processor response and later callbacks to update the transaction attached to the billing record.
Successful payments store the processor reference and trigger an email receipt. This gives the buyer and the internal team a clear link between the amount issued, the external transaction, and the final payment status.