Satqo ESPTSign inGet started
Online stores

How to accept USDT on WooCommerce

You can take USDT in a WooCommerce store today in two ways: a pay button that needs no code, or a proper payment gateway that creates an invoice per order and marks it paid by itself. Here is how each works and which one fits your shop.

Published 5 min read

Two ways to do it

Pay button (no code)Payment gateway on the API
Set-upMinutes, in the dashboardA developer, or an AI coding assistant plus testing
Shows at checkoutNo, it is a link or button on a pageYes, as a payment method next to cards
Order status updatesBy hand, when you see the paymentAutomatically, from a signed webhook
Best forA few products, services, deposits, donationsA 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.

  1. Open a free Satqo account.
  2. 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.
  3. Copy the generated HTML and paste it into a Custom HTML block on the product page or a dedicated "Pay with crypto" page.
  4. 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:

  1. Creates an invoice when the customer places the order. In process_payment(), call POST /api/v2/invoices/create with the order number as foreign_id, the order total as amount, the store currency as currency (USD or EUR), sender_currency USDT and a chain such as tron. Save the invoice id on the order.
  2. Sends the customer to the payment page. Return the invoice's data.url as 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 your url_success when done.
  3. 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 callbackMeaningSuggested WooCommerce action
paidFull amount receivedpayment_complete() โ†’ Processing
overpaidMore than asked; all creditedpayment_complete(), add an order note
underpaid / failedLink expired with part paidOn hold; ask for the rest with a new invoice or refund
expiredNothing paid in timeCancelled, 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/invoices covers 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:

  1. POST /api/v2/ipn/test reaches your webhook and the signature check passes.
  2. A paid order moves to Processing and stock goes down once, even if the callback arrives twice.
  3. A part-paid order goes on hold and an expired one is cancelled.
  4. 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.

This guide is general information, not legal, tax or financial advice. Crypto services and the card are available only where the law allows them, and availability depends on your country of residence. Fees and features are as of October 2026; the dashboard always shows the current ones before you confirm.