Skip to content

Getting Started with Khokha

To try the Khokha demo, follow these steps to set it up on your local machine.

Step 1: Clone the Repository

Khokha lives in its own repository — you do not need a copy of the Raast QR repository to run it:

bash
git clone https://github.com/realrashid/khokha.git
cd khokha

Step 2: Install Dependencies

bash
composer install

This installs Laravel and realrashid/raast-qr.

If you also keep a local checkout of the Raast QR package beside Khokha, the Composer path repository in composer.json symlinks your working copy into vendor/ instead, so you can test package changes immediately.

Step 3: Set Up Environment Variables

bash
cp .env.example .env

Khokha ships pointing at the author's own account, so every code works the moment you start it — including the Support the development page:

dotenv
RAAST_QR_IBAN=PK50RQMI0000021676137573
RAAST_QR_ACCOUNT_TITLE="Rashid Ali"

These are live codes

Every QR the demo renders points at a real bank account. Scanning one with a banking app moves real money — the invoice figures are made up, the transfer is not. Swap the IBAN for your own, or for the checksum-valid test value PK33ABCD0000000000000000, before you start experimenting:

dotenv
RAAST_QR_IBAN=PK33ABCD0000000000000000
RAAST_QR_ACCOUNT_TITLE="Your Business Name"

Step 4: Generate Application Key

bash
php artisan key:generate

Step 5: Start the Application

bash
php artisan serve

Open http://localhost:8000.

Step 6: Explore the Pages

Invoice — a dynamic code. The amount is in the payload, so a payer scans and confirms without typing anything. Built with one Blade tag:

blade
<x-raast-qr :amount="$invoice['total']" size="440" />

Counter card — a static code. No amount, so it never expires and the customer types the figure themselves. Rendered as SVG because it gets printed:

php
RaastQr::iban(config('raast-qr.iban'))->size(300)->toSvg();

Builder — generate a code for any IBAN and amount. The IBAN goes through the PakistaniIban rule, so try a wrong check digit and watch it get rejected:

php
$request->validate([
    'iban' => ['required', new PakistaniIban],
]);

The raw payload is printed under the code, which is the fastest way to see what a Raast QR actually contains.

Scan Them

Every code on these pages is real. Open any Raast-enabled banking app, choose Scan to Pay, and point it at the screen. The account and amount will fill in.

Do not confirm the payment unless the IBAN is yours.

Explore and Test

Worth reading in the demo source:

  • routes/web.php — all three pages in one file
  • resources/views/invoice.blade.php — the Blade component
  • resources/views/counter.blade.php — SVG output for print
  • resources/views/builder.blade.php — validation and the raw payload

Made with ❤️ from Pakistan