How to Accept Bitcoin Payments on Your Woocommerce Store
This will be Part 1 of 2 articles, first explaining how to accept regular Bitcoin payments at your WooCommerce store, and then how to accepting Lightning Network payments (which is still Bitcoin — I’ll explain more when we get there) in part 2. I’ll share personal learnings from my journey and my site too.
Why Should I?
- Save on costs: As an e-commerce merchant, accepting Bitcoin payments is simply cheaper on your side. Big credit cards and payment processors charge 2–3% which can really add up depending on your volume of sales. Bitcoin payments are paid based on the speed in which you need your transaction to be verified (settle). For the solution we will be talking about, fees can be set by the user to be very low. The plugin takes care lots of behind-the-scenes work that would normally raise fees.
- Expand your audience: There are a significant amount of users out there that actually prefer to pay with cryptocurrency. By accepting Bitcoin payments you will be able to accept money from a larger pool of people. This is especially important if your demographic is interested in emerging technology. Aside from Bitcoin, the plugin we will use actually allows you to accept all major cryptocurrencies as well.
- Promote Bitcoin adoption: This was the primary reason that I chose to accept cryptocurrency on my site. By being a Bitcoin merchant, you keep the Bitcoin you earn, become a part of an emerging new economy. When you do business in Bitcoin, you help spread the gift of self-sovereign, censorship resistant money, borderless, and overall better money. The more people that use Bitcoin, the better off we all collectively become.
Assuming you are using the WooCommerce platform, the first step to take before installing any plugins is to set up your own BTCPay Server. This is the software that will allow you to process Bitcoin and cryptocurrency transactions. Don’t worry, it’s much easier than it sounds. There are 2 methods I will recommend here — self-hosted (VPS), and 3rd-part hosting.
A self-hosted BTCPay server means you own and are in full control of the settings on your payment module. There is no 3rd party taking a cut of your transactions, and you can easily route users straight from your checkout page to a BTCPay module where they can pay with any Bitcoin wallet of their choice.
Hosting on a VPS does have a monthly fee, but this is better than hosting it on a local machine. If hosted locally, your server could go down (your computer auto-updates, power goes out, etc). If you aren’t around when there is an issue, there might be hours or days where your customers can’t make purchases on your site. With a VPS you have guaranteed up-time, and get notifications if there is downtime or scheduled maintenance. Also, if you don’t have systems admin or networking skills, a VPS makes setup much easier and less technical.
The site that is recommended to host your BTCPay Server is called LunaNode. It is very cheap — I personally only pay $8.20 USD a month. First go to the LunaNode website, create a LunaNode account, and create a new API key from the “API” section on the site header.
Luckily, the creator of the plugin (Nick Dorier) made setup so easy that deploying the server is now a totally automated process! It just takes a few more clicks, the exact steps are as follows:
- Go to launchbtcpay.lunanode.com. This launches a simple step-by-step setup process.
- Paste the API Key and API ID you just created, and continue.
- Use your own domain or automatically-generated one by LunaNode. This is the website URL you will use to access the BTCPay Server settings. Bookmark this URL.
- Customize the web-wizard settings according to your needs. The defaults are most likely fine.
- Click Launch VM. Wait 6–7 minutes for Virtual Machine deployment
- Visit the domain URL from step 3
Now a copy of the entire Bitcoin blockchain needs to load on your node. I payed the extra $3 for faster syncing (check the setting called “CPU utilization”). It lowers the syncing time from 3+ days to only about 24 hours, which I highly recommend for time’s sake. Also, when you see the “Lightning Implementation” setting on setup, make sure you select lnd or c-lightning. This is important if you want to set up Bitcoin Lightning payments later (I will talk about that in my next article). Here is a really good video walk-through in case you get stuck:
If you need any specific help, here is a link to the BTCPay Slack community as well. Just ask and somebody there might be able to answer your specific question! The official documentation is listed below as well. It is much more thorough.
The other recommended option for deploying your BTCPay Server is to use a 3rd-party service. These have inherently more risks and limitations. Some will not allow you to accept Bitcoin Lightning Network payments at this time, so you will have to wait until the software becomes more mature. In general, you will have to trust the 3rd-party host to continue supporting your server. While the limits of privacy, security, and features are significant, the advantages of less time, simplicity, and lower costs might outweigh the downsides. It all depends on personal preferences.
With BTCPay Jungle, simply go to the website and create an account. Then add your store information/URL in the settings, and the node/server will be automatically set up for you. In this case, the 3rd party provides you a Bitcoin wallet (which isn’t technically yours), which you can use to view all the Bitcoin you earn. If you want (and I highly recommend this), take any Bitcoin you earn out of this wallet, and send it to a wallet where you actually own the private keys/seed phrase. Any of these are secure, self-owned wallets. The documentation for this method is shown below for reference.
Downloading the plugin
After you set up your BTCPay Server, Just download and install the plugin like you would with any other plugin! The settings can then be found in Woocommerce →Settings →BTCPay:
From the settings, you must enter the API key from your BTCPay Server URL:
You can find the API token from within your BTCPay URL under Stores →Store Settings →Access Tokens →Create New Token
After you paste the API token from BTCPay Server URL into the WooCommerce Settings, just make sure the BTCPay setting is toggled ON in WooCommerce. Your Checkout Page should now automatically display Bitcoin as a payment option!
Linking a Personal Wallet
In either method, it is important to have your own personal wallet. If you used the self-hosted method, it is required.In order for the Bitcoin your receive from customers to actually get sent to you, you need to have your own Bitcoin wallet!
The most secure, simple, and longest-running wallet that I will recommend here is called Electrum. Go to that link and download the wallet for whichever OS you are running. Please be careful when creating your Wallet. Follow all the setup instructions exactly after downloading. Store your seed phrase in a very secure place and do not lose it or give it to anyone. This is how people get hacked — if you lose your private key/seed phrase to somebody else, they can steal all your Bitcoin in that wallet.
Now that you have the Electrum Wallet, go to the wallet settings and get your public key to enter into BTCPay Server. This can be found by going to Wallet →Information and copying the public key (should begin with ‘zpub’ or ‘xpub’) to your clipboard:
Now, go the the BTCPay Server URL and navigate to Stores →Store Settings →Derivation Scheme →Modify, then paste your public key into the “Derivation Scheme” field shown
You will be shown a group of Bitcoin addresses to verify the public key is correct. Go back to your Electrum Wallet and click the “Addresses” tab to make sure the addresses in the wallet match the addresses shown on your BTCPay Server.
Now, every time anybody pays you in Bitcoin, it will go straight to your Electrum Wallet. I’d still advise looking into a more secure way to store your Bitcoin if you want to hold it long-term. Having a high balance on an active, online wallet like Electrum (known as a ‘hot’ wallet) can be a security risk. If you want to keep the Bitcoin you earn (also highly recommended!) then you will want to do some research on a ‘cold’ wallet solution. This may involve sending the Bitcoin from your Electrum hot wallet to a physical cold storage wallet like Ledger Nano.
Converting Altcoins to BTC
One cool feature of BTCPay Server is that it can also exchange alternative cryptocurrencies (known as altcoins) to Bitcoin on the spot. This lets you as a merchant reach more potential customers, without causing a hassle for anyone that prefers to pay with the other popular cryptocurrencies. Just go to your BTCPay Server URL , click “Stores” →Settings →Third party Payment methods.
You will then have to go create an account with either Changelly or Coinswitch, and grab the API key from that website to paste into your BTCPay Server settings. Personally, I’ve had trouble getting Coinswitch to work. I recommend Changelly since it has been around longer, has a better reputation, and is more likely to be consistently supported/updated in my opinion. You can find your Changelly API info by logging into your Changelly account, and going to the bottom of this page.
Once you’ve done this, customers will now see a “Conversion” tab on the BTCPay module after they select the Bitcoin payment method at Checkout. They can now choose between all the major alternative cryptocurrencies to pay with, which will be converted to Bitcoin and sent directly to your Electrum wallet.
Limitations of Shopify
Due to personal experience, I feel like I need tot talk about the limitations of Shopify when it comes to BTCPay Server. I originally started my e-commerce store on Shopify due to the user-friendliness and support. I quickly found that the only integration they offer to accept BTC payments is from a company called BitPay. BitPay kind of sucks — it has a few critical flaws that just didn’t make sense for me. Some of them are:
- BitPay is a 3rd party company that also takes a 1% service charge for every transaction, making them almost no different than another service like PayPal
- BitPay doesn’t offer an easy ability for customers to convert other cryptocurrencies into Bitcoin. BTCPay Server, on the other hand, has both CoinSwitch and Changelly as conversion options built in to the module.
- BitPay doesn’t even support the most recent updates the the Bitcoin protocol. Without getting into too much detail, the most recent “SegWit” update to Bitcoin changes some of the Bitcoin address formats. Old address formats (that begin with a ‘1’) are compatible to send to new addresses formats (which begin with a ‘3’ or a ‘bc1’). However, nw addresses are not backwards compatible. This means BitPay makes you use an old Bitcoin wallet, and that it’s impossible for anyone else with a new wallet to send to the old address format of your BitPay wallet.
All this stuff left a bad taste in my mouth, and I pretty much felt like I was at the mercy of yet another 3rd-party vendor. Layer this on with the fact that BitPay will definitely be slow to adopt Lightning Network payments, and the choice was clear to me that a self-owned BTCPay Server is better.
I hope that by sharing my knowledge and experience with you, I opened new door into the future of online payments for your e-commerce business. This will be a huge advantage to you as a business owner as the popularity of cryptocurrency continues to rise. It also allows you to comletely bypass payment processors and take part of an alternative self-sovereign money system which is growing exponentially every day!
One cool technology that we will see a lot of in the near future is called the Lightning Network. In my next article, I will show you how to use the BTCPay Server you already have set up, in order to do LN payments. The advantage Lightning Network has over the regular Bitcoin software is that it is nearly instantaneous, and practically free from a cost perspective (on both the seller’s and buyer’s side). Stay tuned and visit my store to buy some delicious coffee if you’d like!
Donate — 1428RTrjVRsK86XvySb2pVk5AUdqbs3sWD
Open a channel with Crypto Coffee!