Accept BTC payments without Stripe or a Lightning node
Accepting Bitcoin on a small site does not require Stripe, Coinbase Commerce, or a Lightning node. A practical pattern is:
- Create a unique BTC address and a unique satoshi amount for each order.
- Show a BIP21 URI and QR code.
- Poll Mempool.space for the address/amount pair.
- Unlock the digital download after the transaction is confirmed.
# Minimal order model
# address, amount_sats, status
Why exact sats? A shared address becomes usable when the invoice amount is unique. Combine a derived address with a randomized suffix of satoshis, and the payment can be matched without an index server or custodial processor.
For a small digital product, the server only needs the public address and order status. Keep private keys off the web server. Sweep funds separately. Use mempool.space as a convenience API, but consider your own Electrum instance for production.
I built a compact Python + HTML example with exact-sat invoicing, QR generation, payment polling, and download unlock:
https://mtg-arbitrage-desk.loca.lt/checkout-lite
A $1 payment-widget-only version is also available. The point is not that this is the right solution for every business, but that small sites can accept BTC without paying a recurring SaaS fee.
Write a comment