Back to writing

Why dual-channel Stripe + Creem

Overseas users pay by card. Mainland users pay by WeChat or Alipay. I don't lose either. The cost is a few extra percent per sale.

If you’re an indie maker selling in English, you default to Stripe. Done. But when a mainland user asks “do you take WeChat Pay?”, a polite “sorry, no” is a lost sale.

Why not plug WeChat Pay in directly

Going direct takes three things:

  • A mainland merchant account (personal ID won’t work)
  • An ICP-registered domain
  • WeChat Pay merchant platform certification

Each is slow, painful, and not always possible.

The 3-4% vs 70% trade-off

Extra 3-4% in fees, or lose 70% of mainland customers.

I’d rather pay a little more so mainland users can “scan and pay.” The math works out.

WeChat Pay’s fee is 0.6% — but only mainland merchants can use it. I can’t. Creem is 5% — but it supports mainland merchants + overseas cards. WeChat + Alipay + international cards. One integration covers everything.

Routing logic

The Chinese site goes through Creem (defaults to WeChat / Alipay, accepts overseas cards too). The English site goes through Stripe (international cards, what overseas users expect). A user on the Chinese site sees Creem’s checkout, picks WeChat, scans. Stripe doesn’t appear to them at all.

Alternatives I looked at

  • Paddle — 5% + $0.50 / sale, Merchant of Record, auto-computes global tax. Discount code features weaker than Stripe.
  • Airwallex — 1.5% fee, but mainland merchant account requires a business license. Lower fee, higher bar, slow support.
  • Lemon Squeezy — 5%, Merchant of Record, similar to Creem. Weaker templates, thinner docs.

Creem isn’t the cheapest. It’s the simplest for an indie maker: WeChat + Alipay + international cards + no ICP + no overseas entity. As long as you have a product description, a price, and a domain, you’re set up in 5 minutes.

Field experience

Pitfall 1: Creem’s sandbox and mainland production behave slightly differently. Fix: Do a real-account test (¥1) before going live — verify the callback flow end-to-end.

Pitfall 2: Creem webhook retries are long. Fix: Make your webhook handler idempotent (same event ID arriving multiple times shouldn’t re-deliver).

Pitfall 3: Creem’s hosted checkout shows a Chinese “立即支付” button on the Chinese site, but your domain needs to “look like a Chinese business” for higher conversion. Fix: Use a localized domain + brand, raise payment completion rate.

Pitfall 4: Both Stripe and Creem can false-positive “high-risk” declines, especially on new accounts. Fix: Age the account 30 days + accumulate real transactions, and the false-decline rate drops sharply.

Closing

Stripe + Creem dual-channel isn’t elegant, but it’s the most practical setup for an indie maker. 5% buys you a global merchant of record + mainland compliance. Worth it.

If you’re overseas-only, just Stripe. If mainland users start asking “WeChat Pay?”, adding Creem is the lowest-friction fix.

Update (2026-09-03)

Four weeks of production data later, Creem + Stripe dual-channel runs as predicted. False-positive “high-risk” declines do drop off after 30 days — the first sale on a fresh account had ~50% reject rate; once aged with real transactions, that’s down to under 5%. After wiring Resend for transactional email, silent webhook failures are no longer a thing — a stuck order shows up in the inbox within a minute.

— Lao Wei

键盘快捷键

先按 g 再按下面的键。? 打开这个面板。