WooCommerce Plugin
The official Genius Checkout for WooCommerce plugin lets WordPress stores accept cards through Genius Checkout with no code.
Installation
- Download
genius-checkout-for-woocommerce.zipfrom your merchant dashboard. - In WordPress admin, go to Plugins → Add New → Upload Plugin.
- Upload the zip and activate.
Configuration
In WooCommerce → Settings → Payments → Genius Checkout, fill in:
| Setting | Description |
|---|---|
| API Key | Your gc_test_ or gc_live_ key |
| Webhook Secret | From the GC dashboard's Webhooks page |
| Send Order Details | When enabled, line items, tax, and description flow through to the gateway and receipt |
What's supported
- Simple products and subscriptions
- WooCommerce Subscriptions — automatic renewals via stored token
- Block checkout and classic checkout
- Refunds issued from the WooCommerce admin (full or partial)
- Detailed private order notes with gateway IDs and decline reasons
Order meta stored on each order
The plugin records the following meta fields on every paid WooCommerce order — handy for support, refunds, and reconciliation:
| Key | Value |
|---|---|
_gc_session_id | Checkout session ID |
_gc_transaction_id | Transaction ID (used for refunds) |
_gc_receipt_number | Human-readable receipt number |
_gc_gateway_transaction_id | Underlying gateway reference |
_gc_card_brand | Card brand (Visa, Mastercard, etc.) |
_gc_card_last4 | Last 4 digits |
_gc_token_id | Reusable token for renewals |
Subscriptions
If WooCommerce Subscriptions is active, the plugin uses the stored _gc_token_id to charge renewals automatically on the WooCommerce schedule. Failed renewals follow your WooCommerce dunning settings.
Refunds
In the order detail page, click Refund as you would for any WooCommerce gateway. The plugin calls POST /api/v1/payments/{transaction_id}/refund and posts a private note with the refund ID.
Saved cards (picker on checkout)
Signed-in WooCommerce customers see a list of previously-stored cards at checkout, courtesy of the platform's GET /api/v1/customers/{external_customer_id}/payment-tokens endpoint.
How it wires up inside the plugin:
- The plugin records each cardholder's WooCommerce user id as
external_customer_idwhen they first check out (we mapwp_users.ID→ GCcustomers.external_customer_id). - At checkout, the plugin hits the platform endpoint with the merchant's API key to retrieve the saved-card list. Only
{id, brand, last4, expiry_month, expiry_year}is surfaced to the browser — the encrypted token stays on the platform. - The shopper's selection (a
pt_…external id) is threaded into the_gc_payment_token_idorder meta. Block checkout reads it via the registered Store API extension; classic checkout reads it from a hidden form field. - On place-order, the plugin charges that token via
POST /api/v1/paymentswithpayment_token_id. If empty, it falls back to the hosted-redirect flow.
API key never reaches the browser. The list fetch happens in PHP from the WP plugin, mirroring the Magento 2 module's Controller/Index/Savedcards proxy pattern.
To force only the hosted-redirect flow (no saved-card UI), uncheck Show saved cards under WooCommerce → Settings → Payments → Genius Checkout. The Magento 2 module reads the same setting from its own admin panel.
Troubleshooting
- Decline notes appear in the order activity log with the gateway ISO code.
- Webhook delivery can be inspected and replayed from the GC dashboard's Webhooks page.
- The plugin's debug log is at WooCommerce → Status → Logs → genius-checkout.
