Complete guide for WordPress lovers. Install WordPress, configure WooCommerce, connect the Trondealer Payments plugin and start accepting USDT and USDC across 8 blockchains without writing a single line of code. From the domain to the first confirmed payment.
This is the step-by-step guide you needed to turn your WordPress site into a store that accepts stablecoin payments. By the end you will have a working WooCommerce store charging USDT and USDC across 8 blockchains (TRON, Ethereum, BSC, Polygon, Arbitrum, Base, Avalanche and Solana) using the official Trondealer Payments plugin — without writing a single line of code and without spinning up nodes.
It is written for the merchant who already knows WordPress and WooCommerce — or wants to learn from scratch — and is looking for a real alternative to Stripe, PayPal, Coinbase Commerce or BitPay in markets where stablecoins have already become the natural way to pay online.
Stablecoins (USDT, USDC) solve the three chronic problems of accepting crypto in an online store:
The Trondealer Payments plugin is an open-source (GPL v2) WooCommerce gateway maintained by QvaPay/TronDealer. It generates a deposit address per order, receives the payment, detects it on-chain and marks the order as paid automatically via an HMAC-signed webhook. If you have read the API integration guide, this tutorial is the no-code equivalent for WooCommerce stores.
For a production-ready WooCommerce store you need:
mystore.000webhostapp.com for a real store: SEO suffers and many gateways won't accept shared domains.| Hosting | Recommended plan | One-click WordPress | Free SSL |
|---|---|---|---|
| Hostinger | Premium Web Hosting | Yes (Hostinger Auto Installer) | Yes |
| SiteGround | StartUp | Yes (native wizard) | Yes |
| DigitalOcean (managed) | 2 GB Droplet + Ploi/RunCloud | Yes (via panel) |
The plugin labels every wallet wc_<order_id>, which is idempotent: if the customer refreshes the checkout, the plugin reuses the same address instead of generating a new one. That gives you a 1:1 match between address and order for reconciliation, and prevents mixing payments across orders from the same customer.
min_confirmations without a reason. The defaults are safe (15 on BSC, 19 on TRON, 12 on ETH). Raising it only delays the "completed" mark without materially reducing risk on stablecoins.on-hold. Wait for processing/completed to release the download. WooCommerce already does this by default.withdraw endpoint with x-api-key auth is shipped on the TronDealer backend.| Plugin | Model | Fee | Settlement | KYC | Multi-chain |
|---|---|---|---|---|---|
| Trondealer Payments | Self-custody / QvaPay | 0% (QvaPay) · 0.4% or $0.30 (wallet) | Own wallet or QvaPay | No | 8 networks |
| Coinbase Commerce for WC | Coinbase custody | 1% | Crypto only since 2024 | Yes (Coinbase) | Limited |
| BitPay Payments | BitPay custody | ~1% + network fees | USD/EUR to bank (supported countries) | Business KYC | Limited |
| NOWPayments | Self-custody | ~0.5% | Crypto, optional fiat | Optional | Yes (160+ crypto, not just stablecoins) |
If you are coming from Coinbase Commerce or BitPay and your average customer pays $5–$50 USD in stablecoins, switching to Trondealer Payments typically drops the effective fee from 1% to 0.4% (or $0.30 flat) — and to 0% if you settle via QvaPay. We have a detailed comparison of the three gateways if you want to dig deeper.
With the store live, the next level is:
purchase event — stablecoin payments fire the same hook as card payments.If you have a technical team and want to understand how the plugin talks to TronDealer under the hood, read the API integration guide. If you are torn between Trondealer Payments and other market options, the Coinbase Commerce vs BitPay vs TronDealer comparison covers the detail.
And when you're ready to take your first real payment, sign up at trondealer.com/onboard.
| Yes |
| Generic cPanel (Namecheap, Bluehost) | Basic plan | Yes (Softaculous) | Yes |
Local WordPress with XAMPP or LocalWP is great for learning, but TronDealer's webhooks need a public HTTPS URL to reach your site. If you want to test locally, expose your install temporarily with ngrok or cloudflared tunnel.
You have two paths depending on your hosting:
Option A — One-click installer (recommended for beginners):
admin — bots will hit it first), a strong password and a recovery email.https://yourdomain.com/wp-admin.Option B — Manual install (when your host has no auto-installer):
# 1. Download the latest version
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
# 2. Upload the contents of wordpress/ into public_html/ via FTP/SFTP
# (your FTP client: FileZilla, Cyberduck, etc.)
# 3. Create the database from phpMyAdmin:
# - Name: wp_store
# - User: wp_user
# - Password: a long, random one
# 4. Visit https://yourdomain.com and complete the WordPress wizard
# pasting the database details.Once inside wp-admin:
https://./wp-json/tdp/v1/webhook) to respond properly.Before adding plugins, install these essentials: Wordfence or iThemes Security (firewall + 2FA), UpdraftPlus (automatic backups to Google Drive/Dropbox) and WP Mail SMTP (so WooCommerce notifications actually reach customers). A store without backups and 2FA is a ticking bomb.
WooCommerce is the most-used e-commerce plugin in the world (it powers ~30% of all online stores). It is free, maintained by Automattic, and has the largest extension ecosystem.
After the wizard, go to WooCommerce > Settings > General and confirm:
| Field | Value |
|---|---|
| Country / Region | Your real country |
| Store currency | United States (US) dollar (USD) |
| Currency position | Left with space |
| Thousand separator | Comma (,) |
| Decimal separator | Period (.) |
| Number of decimals | 2 |
The Trondealer Payments plugin charges USDT/USDC 1:1 against the order total in USD. If your store is in EUR, MXN, ARS or any other currency, the gateway will hide itself from checkout automatically. EUR support is on the roadmap (future version). If you sell locally, set WooCommerce to USD as the base currency and use a frontend switcher plugin to display converted prices.
Now the crypto side. You will register your business with TronDealer to obtain an API key — the credential the WordPress plugin uses to request deposit addresses.
Visit https://trondealer.com/en/onboard (public sign-up, no KYC to start).
Fill the form:
| Payout method | Who it's for | TronDealer fee |
|---|---|---|
wallet | Merchant with their own wallet (Trust, MetaMask, Phantom, TronLink) | 0.4% per transaction or $0.30 flat if the amount is below $10 USD |
qvapay | Merchant who wants to receive in USD/CUP/EUR via QvaPay | 0% (free) |
zelle | Merchant with active Zelle in the US | Per QvaPay |
If you picked wallet, set sweep_wallet_evm (your EVM address, e.g. 0xABC...), sweep_wallet_tron (Base58, e.g. TXX...) and sweep_wallet_sol (Base58 Solana). You only need to configure the networks you plan to enable in the plugin.
Solve the Cloudflare Turnstile captcha and hit Create account.
You land on the dashboard. In the top bar you will see your API key prefixed with td_ followed by 64 hex characters. Copy it to a password manager (1Password, Bitwarden) right now: this is the only time it is shown in full.
Anyone with that header can generate wallets in your name and read your transactions. Never push it to GitHub, never paste it in public chats, never put it in frontend code. It only lives in the WordPress panel and, optionally, in your secrets vault.
If you want to understand what each endpoint the plugin invokes does under the hood, check the 6-step API integration guide.
The plugin is distributed as a downloadable ZIP.
trondealer-payments-vX.X.X.zip file and hit Install now.On activation, the plugin:
https://yourdomain.com/wp-json/tdp/v1/webhook that will receive the signed notifications from TronDealer.Visit https://yourdomain.com/wp-json/tdp/v1/webhook in your browser (GET). You should see a JSON response like {"code":"rest_no_route",...} or a 405 Method Not Allowed. That means the REST route is alive. If you see a plain 404, go to Settings > Permalinks and save again to refresh the rewrite rules.
This is where the magic happens: in a single click the plugin authenticates against TronDealer and registers your webhook URL with an automatically generated HMAC secret.
| Field | What to put |
|---|---|
| Title | How it should appear to the customer. e.g. Pay with USDT/USDC |
| Description | Helper text shown at checkout. e.g. Accept USDT and USDC on TRON, BSC, Ethereum, Polygon and more. |
| API key | Your td_... from step 4 |
| API base | Leave empty (default: https://trondealer.com/api/v2) |
| Tolerance (%) | 1 (accept underpayments up to 1%; covers wallet rounding fees) |
| Whitelabel | Check if you don't want to show TronDealer branding to the customer |
Internally that button does:
1. GET /api/v2/clients/me with your x-api-key
-> verifies the key exists and is active
2. Generates a random 64-char hex webhook secret
(only if tdp_webhook_secret doesn't exist yet)
3. PATCH /api/v2/clients/me with:
- webhook_url: https://yourdomain.com/wp-json/tdp/v1/webhook
- webhook_secret: the generated one
4. POST /api/v2/clients/me/webhook-test
-> TronDealer fires a test POST to your webhook
5. Verifies you responded with 2xxIf everything works you will see a green notice like:
Connected as My Store. Webhook URL https://yourdomain.com/wp-json/tdp/v1/webhook registered and verified.
If you see a "test ping failed" warning, check: valid HTTPS certificate (not self-signed), permalinks set to "Post name", and that no security plugin (Wordfence) is blocking POST requests with non-standard user agents.
The tdp_webhook_secret value is generated and rotated by the connection test. Don't edit it by hand unless you are migrating domains or your vault requires it. If you change it, run the connection test again so TronDealer receives the new value; otherwise signature verification will fail and webhooks will return 401.
On the same plugin settings page you will see Enabled networks: a multi-select of every available network:asset combo.
| Combo | Typical confirmation | When to pick it |
|---|---|---|
tron:USDT | ~60s | Default for LatAm. Near-zero fees thanks to TronDealer's energy renting |
bsc:USDT / bsc:USDC | ~45s | Low fees (~$0.20), deep exchange liquidity |
pol:USDT / pol:USDC | ~30s | Polygon fast, minimal fees |
arb:USDT / arb:USDC | ~10s | Near-instant confirmation, ideal UX |
base:USDT / base:USDC | ~30s | For customers with Coinbase Wallet integrated |
avax:USDT / avax:USDC | ~10s | Avalanche C-Chain |
eth:USDT / eth:USDC | ~4 min | Only if you sell high-ticket items ($100+); mainnet gas is still expensive |
sol:USDT / sol:USDC | ~30s | Solana SPL, near-zero fees |
Recommended starter set: enable tron:USDT, bsc:USDT, pol:USDT and pol:USDC. That covers 80% of Hispanic / global cases with minimal fees. Leave Ethereum mainnet for tickets above $100 USD because of gas.
Also tune:
Hit Save changes.
If you want to verify which smart contract each combo points to, check our verified USDT and USDC contract addresses on every blockchain reference. The plugin uses exactly those addresses.
Before promoting the checkout, always do a real low-amount purchase to validate the full flow.
Create a cheap product: go to Products > Add new, set the price to $1.00 USD and publish it.
Open the site in an incognito window (so you don't use your admin session).
Add the product to the cart and go to checkout.
In the payment section you will see the Trondealer method with a network+asset picker.
Pick TRON: USDT (the fastest and cheapest option for testing).
Complete the checkout. You will land on the thank-you page with:
wc_<order_id>).From your wallet (TronLink, Trust Wallet, Binance App) send exactly $1.00 USDT-TRC20 to that address.
Within 60–90 seconds you should see:
transaction.incoming received).transaction.confirmed).tx_hash is added to the order for audit.If all of that happened: you are live.
On the order screen (WooCommerce > Orders > #N) the notes section shows:
transaction.incoming, transaction.confirmed, transaction.swept.Before announcing the new payment method to your customers: