Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.pawpayments.com/llms.txt

Use this file to discover all available pages before exploring further.

The WooCommerce plugin adds a single payment gateway — PawPayments (Crypto) — to the WooCommerce checkout. It is checkout‑only: WooCommerce has no native credit balance, so there is no top‑up flow.
PropertyValue
GitHubpawpayments/woocommerce-plugin
WordPress6.0+
WooCommerce7.0+
PHP7.4+ (8.0+ recommended)
Required extensionsext-curl, ext-json
HPOSCompatible (High‑Performance Order Storage)

Install

  1. Download the latest woocommerce-plugin-<version>.zip from the GitHub Releases page (or build it yourself with zip -r ... woocommerce-plugin).
  2. Plugins → Add New → Upload Plugin, choose the zip, click Install Now, then Activate.
  3. WooCommerce → Settings → Payments, find PawPayments (Crypto), click Manage.

Configure

FieldValue
Enable / DisableTick to expose the gateway at checkout.
TitleCustomer‑facing label (e.g. Pay with Crypto).
DescriptionOptional helper text under the title.
API KeyMerchant API key from the Paw dashboard.
API Base URLhttps://api.pawpayments.com (default).
Debug LogWrites to WooCommerce → Status → Logs → pawpayments.

Webhook

WooCommerce auto‑registers the handler at https://<your-store>/?wc-api=pawpayments. The plugin sends this URL as notify_url on every invoice it creates, so you do not need to set a callback URL on the merchant side.
https://<your-store>/?wc-api=pawpayments       (always works)
https://<your-store>/wc-api/pawpayments        (with pretty permalinks)

Order lifecycle

  1. Customer chooses Pay with Crypto and is redirected to a https://paw.now/invoice#… paywall.
  2. The order is created in On hold with the invoice id stored in _pawpayments_order_id.
  3. After the on‑chain payment confirms, Paw posts a webhook with status=success. The plugin verifies the X-Paw-Signature header and calls payment_complete() — the order becomes Processing (or Completed for virtual goods) with a PawPayments: Paid X USDT (order …) note.
payment_complete() is natively idempotent, so duplicate webhook deliveries never double‑credit an order. Webhooks carrying a permanent_address_id are silently acknowledged with 200 OK.

Smoke test

ORDER_ID="<paw_order_id_from_meta>"
EXTRA="<wc_order_id>"
KEY="<your_api_key>"
BODY="{\"order_id\":\"$ORDER_ID\",\"extra\":\"$EXTRA\",\"status\":\"success\",\"amount\":\"10\",\"asset\":\"USDT\"}"
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$KEY" | awk '{print $2}')

curl -X POST "https://<your-store>/?wc-api=pawpayments" \
  -H "Content-Type: application/json" \
  -H "X-Paw-Signature: $SIG" \
  -d "$BODY"
A healthy response is OK with HTTP 200, and the order transitions to Processing.

Troubleshooting

SymptomLikely cause
Gateway not visible at checkoutDisabled in settings, or cart currency not enabled on the merchant account.
Payment error: Invalid API keyWrong key, or the merchant account is not yet activated.
Order stays On hold after paymentWebhook not delivered — confirm the store is reachable over HTTPS and not behind a firewall blocking outbound Paw deliveries.
Webhook returns HTTP 401Signature mismatch — the gateway’s API key differs from the one used when the invoice was issued.
No log entriesEnable Debug Log and check WooCommerce → Status → Logs.

Uninstall

Deactivate and delete the plugin via Plugins → Installed Plugins. Settings live in wp_options.woocommerce_pawpayments_settings; remove with wp option delete woocommerce_pawpayments_settings if needed. The plugin does not create any custom database tables.