An Easypaisa payment gateway lets customers pay your website from their Easypaisa mobile wallet. They enter a mobile number, approve the request on their phone, and your order is confirmed automatically. You do not need to build a payment page or handle wallet credentials yourself.
This guide shows how to accept Easypaisa payments online with ZurvaPay: what the customer sees, how the integration works, how to check the status of a payment, and the habits that keep your orders accurate.
- What is an Easypaisa payment gateway?
- How an Easypaisa payment works
- Why offer Easypaisa at checkout
- ZurvaPay features for Easypaisa payments
- How to integrate Easypaisa on your website
- Checking payment status
- Best practices
- Who it is for
- Frequently asked questions
What is an Easypaisa payment gateway?
A payment gateway sits between your website and a payment method. For Easypaisa, it starts the payment request, waits for the customer to approve it, and tells your server the outcome in a way you can trust. ZurvaPay does this through a hosted checkout and a simple API, so your own code only has to create an order and react to the result.
How an Easypaisa payment works
- Select Easypaisa. The customer opens the ZurvaPay checkout and chooses Easypaisa.
- Enter the wallet number. They type their Easypaisa mobile number in the 03XXXXXXXXX format. The Pay button stays disabled until the number is valid.
- Approve on the phone. A payment request reaches their phone and they confirm it. This can take a little longer than other methods, so the checkout waits patiently and shows a clear message.
- Back to your site. Once ZurvaPay confirms the payment, the customer is returned to your success page and your server receives a signed notification.
Why offer Easypaisa at checkout
- Familiar for wallet users. Customers who keep their money in a mobile wallet can pay without a bank card.
- Fewer abandoned checkouts. When shoppers see the wallet they already use, they are more likely to finish the purchase.
- No payment form for you. The customer enters their number on ZurvaPay's hosted page, not on your website.
- Works with your other options. The same integration also covers JazzCash and Raast QR.
ZurvaPay features for Easypaisa payments
Hosted checkout you can brand
Pass an optional site_logo to show your own logo on the checkout, and an optional checkout_theme (light or dark) to match your site.
Signed IPN notifications
When a payment is paid, ZurvaPay sends a signed IPN to your server. If your server does not answer with HTTP 200, ZurvaPay retries after about 2, 5, 15, 30, 60, 180 and 360 minutes (8 attempts in total).
Payment Status API
Ask for the current status of one payment, or up to 50 at once, from your server. It is the safety net for orders that are still pending on your side.
Automatic recovery
If a customer approves the payment but the page times out or closes, ZurvaPay re-checks the payment and, if it was paid, confirms it and sends your IPN.
Dashboard, invoices and withdrawals
Follow transactions and pending payments, send invoices that clients pay online, and request withdrawals to your registered bank account.
How to integrate Easypaisa on your website
1. Open a merchant account and get your keys
Register as a merchant, complete KYC and wait for approval. Then copy your public and secret keys and register your website domain. See how merchant onboarding works.
2. Save the order, then start the payment
Store the order in your database as pending, with a unique identifier (up to 20 characters, never reused). Then send this request from your server, not from the browser:
curl -X POST "https://zurvapay.com/payment/initiate" \
-F "public_key=YOUR_PUBLIC_KEY" \
-F "identifier=ORD1790000000123" \
-F "currency=PKR" \
-F "amount=1500" \
-F "details=Order 1234" \
-F "ipn_url=https://yourdomain.com/zurvapay/ipn.php" \
-F "success_url=https://yourdomain.com/payment/success" \
-F "cancel_url=https://yourdomain.com/payment/cancel" \
-F "customer_name=John Doe" \
-F "customer_email=john@example.com"
The response contains a checkout URL. Redirect the customer to it. They choose Easypaisa on that page.
3. Verify the IPN
The IPN is the only trusted confirmation. Verify both signatures with your secret key before you mark the order as paid, answer with HTTP 200, then process the order. Full samples for PHP, Python and Node.js are in the API documentation.
4. Treat the success page as a message only
The customer returning to your success_url proves nothing, because anyone can open that address. Show "Payment received, confirming" and read the real status from your own database.
Checking payment status
If you want zero orders stuck as pending, add a small job that asks ZurvaPay about them. The Payment Status API needs your secret key, so call it from your server only:
curl -X POST "https://zurvapay.com/payment/status" \
-F "public_key=YOUR_PUBLIC_KEY" \
-F "secret_key=YOUR_SECRET_KEY" \
-F "identifier=ORD1790000000123"
The answer is one of four statuses:
- success: paid. Verify the status signature and amount, then complete the order once.
- pending: checkout was opened but the payment is not finished yet. Check again later.
- failed: cancelled, expired or rejected. Mark your order as failed.
- not_found: the customer never opened checkout. Stop checking after 24 hours.
The limit is 120 requests per minute per IP, so check in batches rather than one order at a time.
Best practices
- Create one unique identifier per order and store it before you call ZurvaPay.
- Keep the secret key on your server and rotate it if it is ever exposed.
- Make your IPN handler idempotent, so a repeated notification cannot complete an order twice.
- Tell customers to approve the request on their phone and keep the checkout page open until it confirms.
- Use a small real payment to test before launch. ZurvaPay processes live payments only.
Who it is for
Easypaisa payments suit online stores, course and tuition platforms, subscription and software sellers, service businesses that take bookings, and any platform with a wallet top-up. If you run several sites or clients, add them as sub-merchants under one verified account.
Frequently asked questions
How do I accept Easypaisa payments on my website?
Open a ZurvaPay merchant account, get your API keys and send one server-side request to the payment initiate endpoint. Redirect the customer to the returned checkout URL, where they choose Easypaisa and approve the payment on their phone. Verify the signed IPN to confirm the order.
Does my customer need an Easypaisa account?
Yes. They pay from their own Easypaisa wallet, so they need an active wallet number and must approve the request on their phone.
How long does an Easypaisa payment take?
It depends on how quickly the customer approves the request. The checkout waits for the result and shows a clear success or failure message.
What if the customer pays but sees an error?
ZurvaPay re-checks such payments and confirms them automatically. With the optional status API job, your order can be completed even if every IPN attempt failed.
How much does it cost?
Charges are configured per merchant account. Contact us or create an account to see the rate for your business.
Start accepting Easypaisa payments with ZurvaPay
Open a merchant account, read the API documentation and visit the Easypaisa payment gateway page to get started. Open a merchant account.
Related guides
- JazzCash payment gateway guide
- Raast QR payment gateway guide
- Bank payment gateway guide
- Card payment gateway guide
Brand, bank and card network names are used only to describe payment methods and belong to their respective owners. ZurvaPay is an independent payment gateway and is not affiliated with or endorsed by them.
Start accepting payments with ZurvaPay
Open a merchant account, connect your website with one API and get notified the moment a customer pays.
