
August 13, 2026
10 min read
Table of Contents
By Kokil Thapa | Last reviewed: August 2026
Choosing the right payment processor is the single most critical technical decision for any online store in this region, yet documentation remains fragmented and outdated. This guide provides a practical breakdown of eCommerce payment gateway options for Nepal compared from the perspective of a full-stack developer who integrates these systems regularly. Whether you are building a custom Laravel application or configuring WooCommerce, understanding the real-world API limitations, settlement cycles, and verification requirements of eSewa, Khalti, ConnectIPS, and Fonepay is essential before writing a single line of code.
How do the major Nepal payment gateway APIs compare for developers?
When evaluating Laravel payment integrations for Nepali merchants, the quality of the API and the reliability of the sandbox environment matter more than marketing claims. In my experience shipping platforms like Nepal Gift Card and various legal-tech portals, the developer experience varies significantly between providers. You need to know which gateway will fight you during integration and which one lets you ship confidently.
eSewa: The Ubiquitous Wallet with Legacy Quirks
eSewa remains the default choice for consumer-facing businesses because of its massive user base. However, developers must navigate two distinct API generations. The older EPAY interface uses simple form posts and MD5 signatures, while the newer EPG (eSewa Payment Gateway) v2 supports RESTful endpoints with HMAC-SHA256 verification. Always use EPG v2 for new projects in 2026; the legacy endpoint lacks proper idempotency and refund capabilities.
A common mistake I see on client projects is trusting the success redirect URL without verifying the transaction server-side. eSewa redirects can be spoofed or fail due to network issues. Your application must implement a dedicated verification endpoint that calls /api/epg/transaction/status using the transaction UUID before marking an order as paid. Settlement typically takes T+1 to T+3 days depending on your merchant agreement tier.
Khalti: Developer-Friendly with Robust Sandboxing
For custom applications built on frameworks like Laravel or Symfony, Khalti often provides the smoothest integration path. Their sandbox environment mirrors production accurately, and the API documentation includes working cURL examples that actually match the current specification. Khalti’s verification endpoint returns detailed metadata including fee breakdowns and source bank information, which simplifies reconciliation.
Their SDK support for PHP is community-maintained but generally reliable for standard flows. One advantage Khalti holds over competitors is the consistency of their webhook payloads. While other gateways occasionally change response structures without versioning, Khalti has maintained backward compatibility for their core verification responses since 2021. For eCommerce website development in Nepal, this stability reduces long-term maintenance burden.
ConnectIPS and Fonepay: Banking Infrastructure
ConnectIPS operates differently from wallets; it connects directly to bank accounts via the NCHL infrastructure. Integration requires stricter compliance checks and often involves manual paperwork that can take weeks. The API is designed for higher-value transactions with enhanced security tokens. Use ConnectIPS when your average order value exceeds NPR 50,000 or when serving B2B clients who prefer direct bank transfers.
Fonepay acts as a QR aggregator, enabling customers to scan a single dynamic QR code using any participating bank’s mobile app. The technical challenge here is the verification latency. Unlike wallet callbacks that fire instantly, Fonepay confirmations sometimes arrive via delayed webhooks or require active polling. Implement a background job in your queue system to poll for confirmation if the webhook hasn’t arrived within 30 seconds, ensuring orders don’t get stuck in pending state.
What are the actual fees and settlement times for Nepal merchants?
Technical integration is only half the equation; profitability depends on understanding the true cost structure. Published rates often exclude VAT, setup fees, or volume-based tiers. Based on recent merchant agreements I’ve reviewed for clients, here is a realistic comparison table for 2026. Note that these rates apply to domestic NPR transactions; international card processing through these gateways carries significantly higher fees.
| Gateway | MDR (Standard) | Settlement Cycle | Setup Cost | Best For |
|---|---|---|---|---|
| eSewa | 1.5% – 2.0% | T+1 to T+3 | NPR 0 – 5,000 | Retail, Digital Goods |
| Khalti | 1.5% – 2.0% | T+1 to T+2 | NPR 0 | SaaS, Custom Apps |
| ConnectIPS | NPR 10 – 25 flat | T+1 (Real-time avail.) | NPR 5,000+ | High Value, B2B |
| Fonepay | 0.8% – 1.2% | T+1 | Varies by Bank | Retail, Physical Stores |
| Stripe (via Atlas) | 3.4% + $0.30 | 7-14 Days | $500+ (Atlas) | Global SaaS Only |
ConnectIPS stands out for high-ticket items like legal services or enterprise software licensing because the flat fee becomes negligible above NPR 10,000. Conversely, for a flower shop selling bouquets at NPR 1,500, Fonepay’s lower percentage rate preserves margin. Always negotiate based on projected monthly volume; gateways frequently discount MDR by 0.3–0.5% for merchants processing over NPR 1 million monthly.
How should you architect secure payment verification in Laravel?
Never trust client-side payment confirmation. A secure architecture treats every payment notification as untrusted input until cryptographically verified against the gateway’s server. This principle applies whether you’re building a simple WooCommerce plugin or a complex multi-vendor marketplace.
Implementing Idempotent Webhook Handlers
Gateways may send duplicate notifications due to network retries. Without idempotency, you risk fulfilling the same order twice or creating duplicate ledger entries. Store every incoming transaction ID in a dedicated payment_events table with a unique constraint. Process the webhook inside a database transaction:
<?php
// App\Http\Controllers\Webhook\KhaltiController.php
public function handle(Request $request)
{
$payload = $request->all();
$transactionId = $payload['transaction_id'];
// Atomic check-and-lock to prevent race conditions
return DB::transaction(function () use ($transactionId, $payload) {
$exists = PaymentEvent::where('gateway_txn_id', $transactionId)
->lockForUpdate()
->exists();
if ($exists) {
return response()->json(['status' => 'already_processed']);
}
// Verify signature BEFORE recording event
$verified = KhaltiService::verify($payload);
if (!$verified) {
Log::warning('Invalid Khalti signature', $payload);
abort(400);
}
PaymentEvent::create([
'gateway_txn_id' => $transactionId,
'payload' => $payload,
'verified_at' => now(),
]);
// Dispatch async job for fulfillment
ProcessSuccessfulPayment::dispatch($transactionId);
return response()->json(['status' => 'accepted']);
});
} Handling Currency and Precision
Nepalese Rupees (NPR) do not have subunits in digital transactions, yet some gateway APIs return amounts in paisa (cents) while others return whole rupees. Standardize internally: store all monetary values as integers representing paisa in your database, converting only at the presentation layer. This prevents floating-point rounding errors that cause reconciliation mismatches. When integrating ConnectIPS alongside eSewa, create an adapter interface that normalizes amount formats before passing data to your domain logic.
Which gateway works best for international sales and subscriptions?
This is where the landscape gets complicated. Domestic Nepali gateways (eSewa, Khalti, Fonepay) cannot process payments from foreign credit cards directly. If you sell digital products globally or run a subscription SaaS targeting international customers, you need a different strategy.
The Stripe Atlas Route
Many Nepali founders incorporate a US LLC via Stripe Atlas to access Stripe’s global payment infrastructure. This works well for pure digital SaaS but adds significant administrative overhead: US tax filings, registered agent fees (~$200/year), and complex fund repatriation to Nepal. Budget roughly NPR 80,000–100,000 annually just for compliance, excluding transaction fees. For subscription-based businesses with genuine global revenue, this investment pays off. For local-focused commerce, it’s overkill.
Hybrid Approach for Mixed Audiences
On projects serving both Nepali and international users, I implement a dual-gateway strategy. The checkout page detects the user’s IP or billing country and presents appropriate options: eSewa/Khalti/Fonepay for NPR transactions, and Stripe/PayPal for USD/EUR transactions. This requires maintaining separate order ledgers or a unified currency-normalized schema. Laravel’s polymorphic relationships work well here, linking an Order model to either a DomesticPayment or InternationalPayment model depending on the gateway used.
What compliance and testing requirements must you meet before going live?
Nepal Rastra Bank regulations require all payment aggregators to perform KYC on merchants before activating live credentials. Prepare these documents early to avoid launch delays:
- Company registration certificate (Ward office or OCR)
- PAN/VAT registration certificate
- Board resolution authorizing digital payments (for Pvt Ltd companies)
- Director citizenship copies and photos
- Bank account verification letter
Testing protocols vary by provider. eSewa’s sandbox requires separate test credentials that don’t carry over to production. Khalti allows switching environments via API key prefix changes. ConnectIPS demands UAT sign-off from their technical team before production keys are issued. Budget 2–4 weeks for the entire approval cycle.
A critical testing step many developers skip is simulating failure scenarios. Gateways provide success cases easily, but you must verify your system handles timeouts, partial payments, expired sessions, and declined transactions gracefully. Write automated tests that mock gateway responses for each failure mode. On one legal-tech portal I built, we discovered during UAT that our order confirmation email fired even when the ConnectIPS token exchange failed silently. Catching this before launch prevented hundreds of confused customer support tickets.
Making the Final Decision for Your Nepal Store
The landscape of eCommerce payment gateway options for Nepal compared in this guide reflects production reality, not marketing brochures. For most Nepali businesses starting out in 2026, begin with Khalti for its developer experience and eSewa for market coverage. Add Fonepay once you have physical retail presence or want to capture bank-app users. Reserve ConnectIPS for high-value service businesses. International sellers should evaluate Stripe Atlas only after validating sufficient foreign demand to justify compliance costs.
Integration quality matters as much as gateway selection. A poorly implemented verification flow loses more revenue through abandoned carts and support overhead than any MDR difference. Invest time in building a robust, idempotent payment service layer that abstracts gateway-specific quirks behind a clean interface. Your future self debugging production issues at midnight will thank you.
If you need help architecting a secure payment integration for your Laravel or WooCommerce store, or want a second opinion on your current gateway setup, reach out to discuss your project requirements. I’ve helped dozens of Nepali businesses navigate these exact decisions and can help you avoid the costly mistakes I’ve seen repeatedly in production.

