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, CryptoGate never holds them.

Requires WordPress 6.0+ and PHP 7.4+. Running a WooCommerce store? Use the dedicated WooCommerce plugin instead — it hooks straight into checkout and orders.

Step 1 — Download the plugin

Download the latest cryptogate-payments.zip from the GitHub releases page.

Step 2 — Install in WordPress

  1. In your WordPress admin go to Plugins → Add New → Upload Plugin.
  2. Choose the downloaded ZIP and click Install Now.
  3. Click Activate Plugin.

Step 3 — Configure

  1. Go to Settings → CryptoGate.
  2. Fill in the required fields:
FieldWhere 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 CryptoGate.
Default Currency Fiat used when a shortcode doesn't set one (USD, PLN, EUR, GBP).

Step 4 — Register your webhook

In your CryptoGate dashboard go to Webhooks and add the URL shown on the plugin settings page:

Webhook URL
https://yoursite.com/wp-json/cryptogate/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:

Shortcode
[cryptogate_button amount="49.99" currency="USD" button_text="Pay with Crypto"]
AttributeRequiredDescription
amountYesPrice in fiat (e.g. 49.99)
currencyUSD (default from settings), PLN, EUR, GBP
cryptoLock the button to one coin (e.g. BTC); omit to let the customer choose
button_textButton label (default Pay with Crypto)
referenceYour order/reference id — echoed back in every webhook as order_id
emailPre-fill the customer email on the payment page
success_urlWhere to send the customer after a confirmed payment
cancel_urlWhere to send the customer on expiry/cancel
The amount and currency are signed server-side, so a customer can't tamper with the price in the browser.

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.

PHP
add_action( 'cryptogate_payment_completed', function ( $event ) {
    // $event['order_id']       — your `reference` from the shortcode
    // $event['transaction_id'] — CryptoGate transaction id
    // $event['amount_crypto'], $event['currency_crypto'], ...
    error_log( 'Paid: ' . $event['order_id'] );
} );

add_action( 'cryptogate_payment_partial', function ( $event ) { /* underpaid */ } );
add_action( 'cryptogate_payment_expired', function ( $event ) { /* window expired */ } );

// Or catch everything:
add_action( 'cryptogate_webhook', function ( $event ) { /* $event['event'] = 'payment.completed' ... */ } );

Only HMAC-verified events reach these hooks.

How it works

Customer clicks the button
Selects a cryptocurrency (or it's locked to one) and clicks pay
Redirected to payment page
The plugin calls the API server-side (your secret key never touches the browser) and shows a 60-minute payment window
Payment confirmed
CryptoGate fires a webhook — the plugin verifies it and triggers your action hooks

Test mode

Replace your live keys with pk_test_... and sk_test_... in the plugin settings. All transactions will be processed in test mode without moving real funds. See Test Mode →

Having trouble? Open a support ticket in your dashboard or check the GitHub repository for known issues.