99testsStart a job

Test case library · Payments

Test cases for payment gateway: cards, net banking, wallets

This flow covers paying at checkout through a payment gateway with a card and the bank's OTP page, a saved card, net banking, a wallet, EMI or a pay-later option, through to the result screen and the invoice. Most field failures happen between the app and the bank's page: a redirect that never returns, a back press, a late OTP SMS or an app killed while the user reads it. Each one can leave a customer charged for an order that shows unpaid.

39 test cases10 release-blocking (P1)11 need a real phoneUpdated 2026-10-29

From the reviews. 42 of the 317 malfunction reviews in our India App Quality Report describe a failed, stuck or double-debited payment. 34 of them are on apps other than UPI and banking apps, where paying is one step inside a booking, order, premium, top-up or repayment; 11 on travel apps alone.

category page · India App Quality Report

In scope

  • Cards with the bank's OTP or 3-D Secure page, and saved tokenised cards
  • Net banking redirects, wallets, EMI and pay-later options
  • Web views, redirects, the back button and timeouts
  • Results when the app is killed, retries and double taps
  • Amount formatting, invoices and receipts

Out of scope

  • UPI payments inside checkout, covered on the UPI payment page
  • Refund processing and chargebacks

Before you start

  • Test cards set up to succeed, decline and confirm late, from the payment provider's test environment
  • For SMS cases, a low-value live card whose OTPs go to a SIM in the test phone
  • Test net banking, wallet, EMI and pay-later options enabled for the test merchant
  • A 3–4 GB RAM dual-SIM Android phone, a 5-inch phone and an iPhone
  • Test orders priced at ₹1, an amount with paise, and ₹1,00,000
Show
Add to a test plan

Happy path8

PG-01

Pay with a new card and the bank's OTP page

P1functionalreal phone
  1. Choose Card and enter a card number, expiry and CVV
  2. Tap Pay and wait for the bank's OTP page
  3. Enter the OTP from the SMS and submit

Expected: The OTP arrives by SMS while the bank page waits. The app then shows the order as Paid with the card's last four digits.

Why a real phone: OTP SMS delivery depends on the carrier network and a real SIM.

PG-02

Save a card while paying and use it on the next order

P2functional
  1. Pay with a new test card and tick the option to save it
  2. Start a new order and open the payment options
  3. Pay with the saved card

Expected: The card appears as saved with only its last four digits and network label. Paying with it asks for the CVV or the configured check, then the bank's step.

PG-03

Pay through net banking with a redirect to the bank

P1functional
  1. Choose Net banking and pick a test bank
  2. Log in on the bank's page and approve the payment
  3. Wait for the return to the app

Expected: The app returns to its result screen on its own and shows the order as Paid. The receipt names the bank used.

PG-04

Pay with a linked wallet

P2functional
  1. Choose Wallets and pick a test wallet with enough balance
  2. Link it with the OTP if asked, then confirm the payment

Expected: The wallet balance drops by the order total and the order shows Paid. The receipt shows the wallet as the method.

PG-05

Choose card EMI and check the plan before paying

P2functional
  1. Choose EMI and pick an eligible test credit card
  2. Compare the tenures, monthly amounts and the interest and fees shown
  3. Pick a tenure and complete the bank's OTP step

Expected: Each tenure shows the monthly amount and the total payable before the user pays. The receipt shows EMI with the chosen tenure.

PG-06

Pay with a pay-later option

P2functional
  1. Choose Pay later and pick a test provider
  2. Complete the provider's check and confirm
  3. Open the order and the receipt

Expected: The order shows Paid with pay later as the method. The receipt shows the due date the provider gave.

PG-07

Download the invoice after a successful payment

P2functional
  1. Complete a payment
  2. Open the order and tap Download invoice
  3. Open the downloaded file

Expected: The invoice opens and shows the order number, the amount with lakh grouping and the IST date and time. The payment method shows only the last four card digits.

PG-08

Receive the payment confirmation by SMS and notification

P3functionalreal phone
  1. Pay with a card and lock the phone
  2. Wait for the app notification and the SMS
  3. Tap the notification

Expected: The notification and SMS show the same amount and order number as the result screen. Tapping the notification opens that order.

Why a real phone: SMS and push delivery depend on carriers and OEM battery savers.

Validation & negative6

PG-09

Enter a wrong OTP on the bank's page

P2negative
  1. On the bank's OTP page, enter a wrong OTP
  2. Repeat until the bank stops accepting attempts
  3. Return to the app

Expected: The bank page shows an error for each wrong OTP. The app then shows the payment as failed with a retry, and the order stays unpaid.

PG-10

Reject an invalid card number, expiry or CVV

P2negative
  1. Enter a card number that is too short, then one with a digit changed
  2. Enter a past expiry month and a CVV with too few digits

Expected: Each field shows an inline error, and Pay stays disabled or is refused until all fields are valid.

PG-11

Show the reason when the bank declines a card

P2negative
  1. Use a test card set up to be declined, or one with online use turned off
  2. Tap Pay and complete any bank step

Expected: The app shows the decline reason in plain words and offers another payment method. The order stays unpaid.

PG-12

Pay with a wallet whose balance is below the order total

P2negative
  1. Use a test wallet with a balance below the order total
  2. Choose that wallet and confirm

Expected: The app shows the shortfall and offers to add money or choose another method. Nothing is deducted from the wallet.

PG-13

Cancel on the bank's page

P2negative
  1. Start a card payment and reach the bank's OTP page
  2. Tap Cancel on the bank page

Expected: The app shows the payment as cancelled with a retry option. The order stays unpaid and nothing is debited.

PG-14

Hide EMI for small orders and ineligible cards

P3negative
  1. Make an order below the configured minimum for EMI and open the payment options
  2. Make a larger order and try EMI with a card that is not eligible

Expected: EMI is hidden or disabled with a reason in both cases, and no EMI plan can be selected.

Edge cases5

PG-15

Double-tap Pay

P1edge
  1. Fill in valid card details
  2. Tap Pay twice very quickly
  3. Complete the OTP page

Expected: Only one bank page opens and the card is charged once. The order shows a single payment attempt.

PG-16

Retry after a failed payment without a double charge

P1edge
  1. Fail a payment by cancelling on the bank page
  2. Tap Retry and pay with another method
  3. Check the order and both payment methods

Expected: The order shows Paid once, with the first attempt listed as failed. The first method is not charged for this order.

PG-17

Show the same amount in the app, on the bank page and on the receipt

P1edge
  1. Create test orders for ₹1, an amount with paise such as ₹999.50, and ₹1,00,000
  2. Pay each one and compare the bank page and receipt with the cart total

Expected: The app shows ₹1,00,000 with lakh grouping, and the bank page shows the same value. No amount is rounded, multiplied by 100 or shown in another currency.

PG-18

Bank confirms the payment late

P1edge
  1. Use a test card set up to confirm late
  2. Complete the OTP and stay on the result screen
  3. Wait, then pull to refresh the order

Expected: The screen shows Pending or Processing with advice not to pay again. The order then moves to Paid, or to Failed with a refund note, without a second charge.

PG-19

Tap Pay after the payment session has timed out

P2edge
  1. Open the payment page and leave it idle past the timeout your payment provider sets
  2. Tap Pay

Expected: The app says the session expired and starts a fresh payment attempt or returns to checkout. Nothing is charged on the expired session.

Interruptions & network7

PG-20

Swipe the app away right after submitting the OTP

P1interruption
  1. Pay with a test card and submit the OTP
  2. Swipe the app away from recent apps at once
  3. Reopen the app and open the order

Expected: The order shows Paid, or Pending that turns to Paid, and the app does not ask for payment again.

PG-21

System kills the app while the user reads the OTP in another app

P1interruptionreal phone
  1. On a 3–4 GB RAM phone, start a card payment and reach the OTP page
  2. Switch to the messages app, then open the camera and a game
  3. Return to the app and complete or restart the payment

Expected: The app reopens on the order with its current payment status, not an empty cart or a blank page. It never shows the order as unpaid after the bank has taken the money.

Why a real phone: Low-RAM phones and OEM memory managers kill apps left behind the messages app.

PG-22

Press back on the bank's page

P1interruption
  1. Reach the bank's OTP or net banking page
  2. Press the back button or swipe back
  3. Confirm leaving if the app asks

Expected: The app asks before leaving the bank page, then shows Cancelled or a status check. If the payment went through on the bank side, the order still ends up Paid.

PG-23

Network drops right after submitting the OTP

P1interruptionreal phone
  1. Submit the OTP on the bank page
  2. Turn on airplane mode within a second
  3. Turn the network back on and open the order
  4. Repeat, submitting just as you walk into a lift or basement

Expected: The app shows Checking or Pending instead of Failed, and settles on the right status once online. It does not ask the user to pay again.

Why a real phone: Real dead zones lose packets slowly; an emulator's network cut is instant and clean.

PG-24

Wi-Fi switches to mobile data during the bank redirect

P2interruptionreal phone
  1. Start a net banking payment on Wi-Fi
  2. Turn Wi-Fi off while the bank page is loading
  3. Finish the payment on mobile data

Expected: The bank page loads on mobile data, or the app shows a clear error with a way to check the status. There is no blank web view or endless spinner.

Why a real phone: Needs a real SIM on Jio, Airtel or Vi to hand over from Wi-Fi.

PG-25

Incoming call on the bank's OTP page

P2interruptionreal phone
  1. Reach the bank's OTP page
  2. Answer an incoming call, then end it
  3. Return to the app and enter the OTP

Expected: The OTP page is still open and submitting the OTP completes the payment. The app does not restart the payment or lose the bank page.

Why a real phone: Needs a real incoming SIM call over the bank's web page.

PG-26

Leave the OTP page idle until it times out

P2interruption
  1. Reach the bank's OTP page and do nothing until it times out
  2. Return to the app if the page sends you back

Expected: The app shows the payment as failed or timed out with a retry, and the order stays unpaid.

Device & OS6

PG-27

Fill the bank OTP by auto-read and by hand

P2compatibilityreal phone
  1. Reach the bank's OTP page in an app that offers OTP auto-fill
  2. Allow the prompt to read the OTP SMS
  3. Repeat, declining the prompt and typing the OTP

Expected: The allowed prompt fills the OTP field. When the prompt is declined, typing the OTP by hand still works.

Why a real phone: OTP auto-read depends on real SMS delivery and the phone's SMS handling.

PG-28

Get the bank OTP on the second SIM of a dual-SIM phone

P2compatibilityreal phone
  1. Keep the bank-registered number in SIM 2 and mobile data on SIM 1
  2. Pay with a card and wait for the OTP

Expected: The OTP arrives on SIM 2 and can be entered or auto-filled on the bank page before it times out.

Why a real phone: Needs two physical SIMs receiving SMS on a real dual-SIM phone.

PG-29

Approve a payment in the bank's own app instead of an OTP

P2compatibilityreal phone
  1. Pay with a card or net banking account set up for in-app approval
  2. Open the bank app from its notification and approve
  3. Return to the payment app

Expected: The payment app shows the result on return, whether the bank app sends the user back or the user switches back by hand. The order is not left on a spinner.

Why a real phone: Needs a real bank app installed and a switch between apps.

PG-30

Keep the OTP field visible above the keyboard on a small screen

P2compatibility
  1. On a 5-inch phone, reach the bank's OTP page
  2. Tap the OTP field so the keyboard opens

Expected: The page scrolls so the OTP field and the Submit button stay visible above the keyboard.

PG-31

Pay on an older Android version with an outdated system web view

P2compatibility
  1. Use the oldest Android version the app supports, with the system web view not updated
  2. Pay by net banking, then by card

Expected: The bank pages load and submit, or the app asks the user to update the web view component. No blank page appears.

PG-32

Return to the app from the phone maker's default browser

P2compatibilityreal phone
  1. Set the phone's default browser to the maker's own browser
  2. Pay by net banking where the app opens an external browser
  3. Finish on the bank page

Expected: The phone returns to the payment app with the result. If the browser stays open, the app shows the correct status when reopened.

Why a real phone: OEM default browsers on Xiaomi, Vivo and Oppo handle return links differently.

Security & privacy4

PG-33

Hide card details in recent apps and screenshots

P2securityreal phone
  1. Type a card number and CVV
  2. Open recent apps and look at the app's thumbnail
  3. Try taking a screenshot of the card form

Expected: The thumbnail does not show the card details, and screenshots of the card form are blocked or blank.

Why a real phone: Recent apps thumbnails and screenshot gestures vary across OEM Android skins.

PG-34

Show only the last four digits of saved cards

P2security
  1. Open the saved cards list
  2. Start a payment with a saved card

Expected: Only the last four digits and the card network label are shown, never the full number. The CVV or the configured check is asked before the bank step.

PG-35

Delete a saved card

P2security
  1. Delete a saved card from the app's settings
  2. Start a new order on the same phone
  3. Start one on a second phone logged in to the same account

Expected: The card is gone on both phones and is not offered at checkout.

PG-36

Do not keep card details after a failed attempt

P2security
  1. Enter a new card without saving it, and cancel on the bank page
  2. Tap Retry and look at the card form
  3. Open the saved cards list

Expected: The card number field is empty or shows only the last four digits, and the CVV is never prefilled. The card does not appear in saved cards.

Accessibility & language3

PG-37

Fill the card form and pay with TalkBack

P2accessibility
  1. Turn on TalkBack and open the payment options
  2. Move through the card form and leave one field invalid
  3. Fix it, pay and listen to the result screen

Expected: Each option and field is announced with its label, and the error is read out. The result is announced as paid, pending or failed.

PG-38

Use payment options and statuses in Hindi

P2localization
  1. Switch the app language to Hindi
  2. Open the payment options, an EMI plan and a failed payment

Expected: Option names, EMI terms and statuses such as Pending appear in Hindi with no English leftovers. Amounts keep lakh grouping, such as ₹1,00,000.

PG-39

Pay with the largest font and display size

P3accessibility
  1. Set font size and display size to the maximum
  2. Open the payment options, the card form and the bank's OTP page

Expected: Labels, fields and the Pay button stay visible without cut-off text, and the bank page can be scrolled to its Submit button.

In the field

Where payment gateway checkout (cards, net banking, wallets) breaks on real phones

  • On Xiaomi, Realme, Vivo and Oppo phones with 3–4 GB RAM, the app is killed while the user switches to messages to read the OTP, and the order shows unpaid after the card is charged.
  • Users press back or close the bank page during a slow redirect on 3G, pay again, and the first payment completes later as a second charge.
  • OTP SMS arrives late on congested Jio, Airtel or Vi networks, or on the other SIM, after the bank page has timed out, so users see failures they cannot explain.
  • Amounts are sent in paise or rounded in one place and not another, so the bank page shows a different figure from the cart, or ₹1,00,000 appears as 100,000.
  • Net banking opened in the phone maker's default browser does not return to the app, leaving users on a bank page that tells them to go back to the merchant.
  • The bank's OTP page in a web view does not resize on small screens, so the keyboard hides the Submit button and users give up at the last step.

Run these 39 cases on real phones

They fit the Standard package: 10 × 45-minute sessions on 4 phones or browsers of your choice, up to ~50 cases, ₹18,999 + GST ($249), verified report in 3 business days. The 10 P1 cases alone fit Starter (₹9,999 + GST).

Download the CSV, pick the package at checkout and upload the file with your build. Testers run them on their own phones, on Jio, Airtel and Vi.

Questions

About testing payment gateway checkout (cards, net banking, wallets)

What should a tester do when a card payment is charged but the order shows failed?

Note the order number, the payment attempt ID and the time, and look up that attempt in the payment provider's test dashboard. The app should move the order to Paid once the provider confirms, or show that a refund is on its way, without asking the customer to pay again. Repeat the case with the app killed and with the network dropped after the OTP, since those are the usual causes.

Can payment gateway checkout be tested on an emulator?

Most of it can. Card form validation, net banking redirects with test banks, EMI screens, retries and double taps behave the same on an emulator against the provider's test environment. OTP SMS delivery and auto-read, dual-SIM phones, apps killed on low-RAM phones, OEM default browsers and real network drops need real devices.

Why do payment pages tell users not to press back or refresh?

The bank may still be processing when the user leaves the page, and leaving can lose the result the app is waiting for. A well-built app asks before leaving the bank page, then checks the payment status with its server instead of assuming a failure. Test back presses and swipes at each step of the redirect to confirm the order still ends in the correct state.

Related flows

Test these next

Your AI wrote the test cases. Run them on real phones.

99tests runs your cases, AI-generated ones included, on the phones, laptops and browsers your users own. Every finding is verified, serious bugs come with a screen recording, and each case comes back pass, fail, blocked or not run.