Payments journey

A guided path · 4 showcases · no state carried

The payments journey

4 of the showcases here are consecutive beats of one story, and on their own they read as unrelated toys. This is the order they happen in — a merchant onboards, a payment is signed, the webhook arrives and is checked, and the money turns up somewhere someone can look for it.

It is a tour, not a thread. Nothing is carried between the four: the merchant you onboard does not become the merchant_id you sign. Each showcase stays a self-contained thing you can land on cold — which is the constraint this lab is built around, and the reason the journey is a path through them rather than an application on top of them.

The steps

  1. Merchant Onboarding

    A merchant applies. Real South African validation, an error summary that works, and the details every later step refers back to.

  2. PayFast Signature

    The payment is signed. Watch the canonical string being assembled field by field, in arrival order, empty fields included.

  3. Webhook Lifecycle

    The notification arrives — and then what. Tamper with it, redeliver it, time it out, and watch the retry policy earn its keep.

  4. Transaction Explorer

    The payment lands in the ledger. Filter, sort, and watch rows settle — this is where somebody finally looks for the money.

The three Craft showcases are not on this path. They are not payments work and nothing about them is consecutive.

Start at Merchant Onboarding

Or skip the model: pay.iamlukia.com runs the same webhook rules against PayFast’s sandbox, with no signup. No money moves.