Two ways to do it
| Pay button (no code) | Payment gateway on the API | |
|---|---|---|
| Set-up | Minutes, in the dashboard | A developer, or an AI coding assistant plus testing |
| Shows at checkout | No, it is a link or button on a page | Yes, as a payment method next to cards |
| Order status updates | By hand, when you see the payment | Automatically, from a signed webhook |
| Best for | A few products, services, deposits, donations | A real catalogue with stock and many orders |
Both land on the same Satqo balance, cost the same 0.5% per incoming payment as of October 2026, and let the customer pay from any wallet or exchange without an account.
Option 1: a pay button, no code
A pay button is a reusable link, pay.satqo.com/b/CODE, that creates a fresh invoice for every customer who clicks it. It is plain HTML, so it works in any WordPress block, widget or product description.
- Open a free Satqo account.
- In the dashboard go to Pay buttons โ New button. Choose a fixed price (in USD, EUR or a coin) or let the customer enter the amount, pick which coins you accept and add an optional return link, for example your "Thank you" page.
- Copy the generated HTML and paste it into a Custom HTML block on the product page or a dedicated "Pay with crypto" page.
- When a payment arrives you see it in the dashboard; complete the order in WooCommerce by hand.
Useful extras on the link: ?coin=USDT_TRC20 preselects the coin, ?amount=25 fills in an open amount and ?lang=es or ?lang=pt sets the language of the payment page. This is the fastest route, but the button does not know about WooCommerce orders, so it does not suit shops with many orders a day.
Option 2: a payment gateway on the API
WooCommerce lets any developer add a payment method by extending its WC_Payment_Gateway class. A Satqo gateway does three things:
- Creates an invoice when the customer places the order. In
process_payment(), callPOST /api/v2/invoices/createwith the order number asforeign_id, the order total asamount, the store currency ascurrency(USD or EUR),sender_currencyUSDT and achainsuch astron. Save the invoice id on the order. - Sends the customer to the payment page. Return the invoice's
data.urlas the redirect. The hosted page shows the amount, address, QR code and live status in English, Spanish or Portuguese, and sends the customer back to yoururl_successwhen done. - Listens for the webhook. Satqo POSTs a signed JSON callback to your webhook URL when the invoice is paid, part paid or expired. Verify
X-Processing-Signature(an HMAC-SHA512 of the raw body with your signing secret), then update the order and answer HTTP 200.
WooCommerce's own documentation recommends handling external callbacks through its WC-API endpoint (woocommerce_api_{your_gateway}) or a REST route, and calling $order->payment_complete() for paid orders so stock and statuses are handled correctly.
Mapping invoice statuses to WooCommerce
| Satqo callback | Meaning | Suggested WooCommerce action |
|---|---|---|
| paid | Full amount received | payment_complete() โ Processing |
| overpaid | More than asked; all credited | payment_complete(), add an order note |
| underpaid / failed | Link expired with part paid | On hold; ask for the rest with a new invoice or refund |
| expired | Nothing paid in time | Cancelled, release the stock |
Make it robust
- Verify the signature on the raw body, before parsing JSON, and compare it in constant time.
- Be idempotent. Satqo retries undelivered invoice callbacks for about two days with the same body and the same
X-Satqo-Event-Id. Store processed event ids and skip repeats, so an order is never completed twice. - Add a safety net. A WP-Cron job that checks still-open invoices with
GET /api/v2/invoicescovers the rare case of a webhook that never arrives. - Keep secrets on the server. The API key and signing secret belong in the gateway settings, never in JavaScript sent to the browser.
- Expire sensibly. Invoices created through the API live 60 minutes by default (
expiry_minutes, up to 24 hours). Match WooCommerce's "hold stock" setting to that window.
Building it with an AI assistant
The Satqo API reference is a single Markdown file written to be read by people and by AI coding assistants. Its last section includes a ready prompt for a WooCommerce payment gateway: settings for the key and secret, invoice creation in process_payment(), a webhook route that verifies the signature and updates the order. Give it to your assistant together with your store's code, then review the result like any other code before it touches real orders.
Testing before launch
There is no sandbox: test with small real amounts. On TRON, network fees are low and a payment of up to USD 1,000 is typically credited in about 10 seconds, so a full test costs little. Check that:
POST /api/v2/ipn/testreaches your webhook and the signature check passes.- A paid order moves to Processing and stock goes down once, even if the callback arrives twice.
- A part-paid order goes on hold and an expired one is cancelled.
- The customer lands back on your thank-you page after paying.
Once it works, your USDT sits on your Satqo balance. You can pay suppliers from it, send it to any wallet, or spend it with the virtual card.
Sources: WooCommerce Payment Gateway API, Satqo API reference. Checked 8 October 2026.
Frequently asked questions
Do my customers need a crypto account with Satqo?
No. They choose USDT at checkout, land on the payment page and pay from any wallet or exchange they already use.
Can I keep prices in dollars or euros?
Yes. Send the order total in USD or EUR with sender_currency USDT. The amount in USDT is fixed when the invoice is created, so the customer pays an exact figure.
What does it cost?
As of October 2026, Satqo keeps 0.5% of each incoming payment and the customer pays the network fee of their transfer. There is no monthly or setup fee. Current fees are in the pricing section of satqo.com.
What if a customer pays too little?
The invoice shows the shortfall and the part received stays on your balance. Your gateway should put the order on hold; you can create a new invoice for the remaining amount or refund the difference.
Is there a test mode?
There is no sandbox. Test with small real payments on TRON, where fees are low and credits are fast, and use the test webhook endpoint to check your signature verification.