WordPress Plugin
Accept cryptocurrency payments on any WordPress site, no WooCommerce required. Drop a pay button anywhere with a shortcode; customers pick a coin and are redirected to a hosted payment page. Funds go straight to your wallet, GriffNode never holds them.
Step 1, Download the plugin
Download the latest griffnode-payments.zip from the GitHub releases page.
Step 2, Install in WordPress
- In your WordPress admin go to Plugins → Add New → Upload Plugin.
- Choose the downloaded ZIP and click Install Now.
- Click Activate Plugin.
Step 3, Configure
- Go to Settings → GriffNode.
- Fill in the required fields:
| Field | Where to find it |
|---|---|
Publishable Key |
Dashboard → API Integration → Publishable key (pk_live_...). Safe to expose in the browser. |
Secret Key |
Dashboard → API Integration → Secret key (sk_live_...). Keep this private, used server-side to create transactions. |
Webhook Secret |
Dashboard → Webhooks → your endpoint's signing secret. Used to verify that incoming payment events are genuinely from GriffNode. |
Default Currency |
Fiat used when a shortcode doesn't set one (USD, PLN, EUR, GBP). |
Step 4, Register your webhook
In your GriffNode dashboard go to Webhooks and add the URL shown on the plugin settings page:
https://yoursite.com/wp-json/griffnode/v1/webhook
Subscribe to these events: payment.completed, payment.partial, payment.expired.
Copy the signing secret into the Webhook Secret field in the plugin settings.
Step 5, Add wallets
The coin selector only shows cryptos you have wallets configured for. Go to Dashboard → Wallet Management and add an xpub for each coin you want to accept. The selector updates automatically.
Adding a pay button
Put the shortcode in any post, page, or widget:
[griffnode_button amount="49.99" currency="USD" button_text="Pay with Crypto"]
| Attribute | Required | Description |
|---|---|---|
amount | Yes | Price in fiat (e.g. 49.99) |
currency | — | USD (default from settings), PLN, EUR, GBP |
crypto | — | Lock the button to one coin (e.g. BTC); omit to let the customer choose |
button_text | — | Button label (default Pay with Crypto) |
reference | — | Your order/reference id, echoed back in every webhook as order_id |
email | — | Pre-fill the customer email on the payment page |
success_url | — | Where to send the customer after a confirmed payment. We add ?transaction_id=; confirm it server-side with GET /transactions/{id} before fulfilling, since anyone can open this URL |
cancel_url | — | Where to send the customer on expiry/cancel |
Reacting to payments (for developers)
When a verified webhook arrives, the plugin fires WordPress actions. Hook into them from your theme's functions.php or your own plugin to fulfil orders, grant access, send emails, etc.
add_action( 'griffnode_payment_completed', function ( $event ) {
// $event['order_id'] — your `reference` from the shortcode
// $event['transaction_id'] — GriffNode transaction id
// $event['amount_crypto'], $event['currency_crypto'], ...
error_log( 'Paid: ' . $event['order_id'] );
} );
add_action( 'griffnode_payment_partial', function ( $event ) { /* underpaid */ } );
add_action( 'griffnode_payment_expired', function ( $event ) { /* window expired */ } );
// Or catch everything:
add_action( 'griffnode_webhook', function ( $event ) { /* $event['event'] = 'payment.completed' ... */ } );
Only HMAC-verified events reach these hooks.
How it works
Test mode
You can use your pk_test_... and sk_test_... keys in the plugin settings to keep production credentials out of staging sites. Note: sandbox keys currently run against the live API, so transactions they create are real, test with small amounts or let test orders expire. See Test Mode →