—— vendor evaluation · payment gateway integration · RFP §3.9
Payments — Razorpay Checkout
Click the button below to open the Razorpay Checkout SDK. The modal renders UPI, cards, netbanking, and wallets using a placeholder test key. No real charge is made. The point of this surface is to prove the SDK is wired in — the rest is one sandbox account away.
— launch checkout
Try the Checkout SDK
Acting as Psychologist (Dr. Priya Menon). Each click writes a payment_init row to the audit log.
Razorpay Checkout · Test Mode
Chisel CDP Demo · simulated sandbox
Amount
₹500
Counselling session — Demo
UPI
Cards
Netbk
Wallet
Test mode — no live
RAZORPAY_KEY_ID configured.
The real Razorpay sandbox modal would open here once an rzp_test_* key is set in the server env.
The audit-log row for this click was already written server-side.
Test key:
rzp_test_SnjDDcGEf7bkuX
— replace with a real rzp_test_* key (and matching server-side secret) once the Razorpay sandbox account lands. The modal still renders all payment methods even with the placeholder; only the actual capture call needs the real key.
— what's deferred
Phase 1 — production wire-up
The Checkout SDK is the surface; the moving pieces below are what turn a click into a captured, reconciled payment. None of them are exotic — each is a ~2-day chunk once the sandbox account exists.
- Sandbox key from env:
RAZORPAY_KEY_ID+RAZORPAY_KEY_SECRET - Server-side order creation:
POST /razorpay/orders→ Razorpay Orders API (so the modal opens against a realorder_id) - Webhook handler with signature verification (HMAC-SHA256) on
payment.captured+payment.failed - A
payment_attemptstable + state machine (created → authorized → captured → reconciled) - Idempotency keys on order creation so double-clicks don't double-charge
Open Razorpay Checkout
→ JS POSTs to /payments/init (writes audit_log)
→ opens new Razorpay(options).open()
→ SDK renders modal from checkout.razorpay.com/v1/checkout.js
→ handler / payment.failed callbacks update the result panel above.