Install the plugin
Get
qint-payments.zip, then in WP Admin go to
Plugins → Add New → Upload Plugin, choose the zip, and Activate.
WooCommerce must already be active.Create an API key
In the Qint dashboard:
Developers → API keys → Create key. Label it (e.g.
woocommerce) and
select both Read and Write scopes — Write creates payment intents;
Read powers status polling and the settings-page connection test.Configure the gateway
- WP Admin → WooCommerce → Settings → Payments → Qint — Pay with crypto → Manage.
- Tick Enable Qint crypto payments.
- Optionally adjust the Title (default: “Pay with crypto”) and Description.
- Paste the API key and save.
| Notice | Meaning |
|---|---|
| Green | Key verified — you’re connected. |
| Red, mentions 401 | The key is wrong or revoked. |
| Red, mentions scopes | Recreate the key with Read + Write. |
The payment method only appears at checkout when the store currency is
CHF, EUR or USD (WooCommerce → Settings → General → Currency).
Create the webhook endpoint
Your site’s webhook receiver URL is:(It’s also displayed under the “Webhook signing secret” field in the
gateway settings.)
- Qint dashboard → Developers → Webhooks → Add endpoint → paste that URL.
- Copy the signing secret shown on creation — shown only once.
- Paste it into the gateway’s Webhook signing secret field and save.
- Press Send test event in the dashboard — the delivery should show as delivered (HTTP 200). A 401 means the secret in WooCommerce doesn’t match.
- The site must be reachable over HTTPS from the public internet.
- WordPress permalinks must not be “Plain” if your host blocks
?rest_route=(pretty permalinks guarantee/wp-json/…works). - Security plugins/WAFs must allow unauthenticated POSTs to
/wp-json/qint/v1/webhook— the request is authenticated by its HMAC signature, not by cookies.
How orders are updated
| Qint intent status | WooCommerce order |
|---|---|
settled | Payment complete (processing/completed) + note with asset & amount |
confirmed / pending / initiated | Order note only |
failed | Failed |
expired / cancelled | Cancelled (only if the order was still pending) |
underpaid = true (non-terminal) | On hold + note “partial payment received — awaiting decision” |
GET /intents/{id} once (throttled to one call per 30 s) and applies the same mapping.
The admin order screen shows a Qint payment box with the intent id, cached status and a dashboard link; the cache self-refreshes when older than 2 minutes while payment is pending.