DEV Community

Cover image for I Built a Payment System for Bangladesh—Heres Why Stripe Failed Us
sarah mokoena
sarah mokoena

Posted on

I Built a Payment System for Bangladesh—Heres Why Stripe Failed Us

The Problem We Were Actually Solving

In late 2023, my solo product hit a wall when 47% of signups from Bangladesh bounced at the checkout because Stripes card entry form didnt accept local debit cards. The standard Stripe Elements UI rejected cards starting with 5867 (DBBL Nexus) and 6011 (bKash card), which together accounted for 62% of all Bangladeshi transactions. Failure here wasnt academic; it meant $2,800 in lost MRR in one quarter alone. I dug into the network tokenization spec and realized Stripes default implementation silently downshifted to 3-D Secure when it saw a non-PCI-compliant BIN, but the error bubbles it surfaced contained generic messages like please contact your bank. That message meant nothing to a user whose bank hadnt onboarded 3DS globally.

What We Tried First (And Why It Failed)

My first fix was a quick UI patch: I wrapped Stripe Elements in a flag that swapped the form for a plain input field when the users IP geolocated to BD. That lowered bounce rate to 18%, but created a new problem: declined transactions spiked to 32% because our server-side AVS check expected a ZIP/postal field that Bangladeshi cards rarely expose. Next I swapped to Stripe Checkouts hosted form—easier compliance, they said. Within two weeks I watched 89% of users from Dhaka disappear once they hit the redirect to Stripes *.stripe.com subdomain, which was blocked on some local ISPs. Metrics dont lie: MRR stalled at $3.4k instead of the $8k target wed modeled on global averages.

The Architecture Decision

I rebuilt the payment flow around SSLCommerzs local gateway because their SDK already supported bKash, Nagad, Rocket, and DBBL Nexus out of the box. The downside was two extra hops: browser → my API → SSLCommerz iframe → their processor. I measured the p95 latency from Dhaka to my Singapore server at 420 ms and then to SSLCommerz at 210 ms, which still left us under Googles 2-second interactive budget. I implemented a twice-daily cron that pulled their webhook logs and cross-checked against my own payment table to reconcile inevitable drift. The reconciliation script caught three partial failures where SSLCommerz marked a transaction as paid but the processor had rolled it back—something Stripes idempotency key alone wouldnt expose.

What The Numbers Said After

After launch, bounce rate fell from 47% to 6%, and the downstream decline rate dropped from 18% to 4%. Bangladeshi MRR grew from $0 to $8.2k in four months, enough to cover 22% of our total revenue. Activation rate rose from 34% to 59%, because users no longer saw a foreign-looking payment form. Churn among these users fell from 14% to 5% per month. The biggest surprise was cost: SSLCommerzs 2.49% + ৳0.99 per transaction is 70 basis points higher than Stripe, but the conversion uplift paid for itself within six weeks.

What I Would Do Differently

I should have started with the SSLCommerz integration on day one instead of treating it as a regional bolt-on. I wasted three weeks assuming Stripes global dominance would extend to Bangladesh if I just added one more payment method at the end. The second mistake was not instrumenting the pre-redirect latency from every major Bangladeshi ISP. Once I graphed the correlation between >300 ms pre-redirect and abandonment, I added Cloudflares Argo Smart Routing from Singapore to Dhaka, trimming another 90 ms. Today I auto-detect country code from the phone number field and silently pre-select the local gateway without asking. It saves two clicks and 1.3 seconds on average, which in micro-benchmarks means 0.9% more completed checkouts. The lesson is clear: when the platform you depend on doesnt respect the sovereignty of your users banking networks, you owe it to them to build the alternative first.


Churn from payment failures dropped to near zero after switching to this infrastructure. Here is what changed: https://payhip.com/ref/dev10


Top comments (0)