Simulate high-value UPI transactions across multiple PSPs.
Start with mock payments that hit different slabs — ₹50K (below cap), ₹1L (old cap), ₹5L, and ₹10L (new limit). Make sure to include both payer-verified and non-verified scenarios. You want to confirm that your refund logic only triggers for transactions that were actually successful and within NPCI’s allowed range.
Test full and partial refunds
Run test cases for both:
- Full refund: ₹10L payment reversed completely.
- Partial refund: ₹10L payment, ₹2L refunded.
Verify that your PSP APIs (like Razorpay, Cashfree, or Paytm) correctly handle the refund_reference_number and that the original UPI transaction ID maps properly to the refund in your ledger.
Validate refund window and cap handling.
Some PSPs impose refund windows or lower refund caps for large-value UPI payments. Your marketplace should log the error gracefully if a refund attempt exceeds the PSP’s refund time window or refund amount limit.
Chargeback scenarios.
Simulate customer-initiated chargebacks (where the user disputes the payment through their bank). Make sure your platform captures the chargeback notification webhook and reconciles it against the original transaction. Your ledger should automatically move the transaction from Settled → Under Dispute → Reversed once confirmed.
Test multi-split transaction refunds.
For cases where you auto-split a ₹10L bill payment into two ₹5L transactions, ensure your refund logic tracks both sub-transactions independently. If only one leg fails, the refund should still reconcile correctly in your GL.
Reconciliation and audit trails.
Every refund or chargeback should flow through your UPI settlement reports and update the GL with the same txn_id or upi_ref_id that appeared in the original payment. If the PSP changes reference IDs for refunds, your QA should flag that to finance.
Stress test response delays.
UPI refunds can take minutes (sometimes hours) to process, especially for high-value categories. Check that your marketplace gracefully handles delayed PENDING → SUCCESS updates and retries webhook confirmations without creating duplicates.