PrestaShop Plugin
The Genius Checkout module for PrestaShop 8.x adds Genius Checkout as a payment option on PrestaShop storefronts. The shopper selects Genius Checkout, gets redirected to the GC hosted checkout, completes payment (3DS handled by GC), and is returned to PrestaShop's order-confirmation page.
Install
- Download
geniuscheckout-prestashop.zipfrom your merchant dashboard. - PrestaShop admin → Modules → Module Manager → Upload a module.
- Upload the zip and click Install.
Configure
Module Manager → Genius Checkout → Configure:
| Setting | Value |
|---|---|
| API Key | Your gc_test_… or gc_live_… key (renders as password field) |
| Webhook Signing Secret | Same value you set in GC Dashboard → Developers → Webhooks (password field) |
| Test Mode | Enable while validating; the GC dashboard mode is derived from the API-key prefix |
Then in the GC dashboard, set your PrestaShop webhook URL to:
https://your-prestashop.example.com/module/geniuscheckout/webhookSubscribe the endpoint to at least: payment.completed, payment.failed, payment.refunded, payment.voided.
Checkout flow
- Shopper reaches PrestaShop's checkout, picks Genius Checkout (rendered via the
paymentOptionshook). - PrestaShop POSTs to
controllers/front/validation.phpwhich validates the cart, places a pending order viaModule::validateOrder, callsPOST /api/v1/checkout-sessions, and redirects tocheckout_url. - Shopper completes payment on the GC hosted page.
- GC sends
payment.completedto the webhook receiver. The receiver verifies HMAC-SHA256 (X-GC-Signatureover{timestamp}.{body}, 5-minute replay window) and transitions the order toPS_OS_PAYMENT.
Supported features
| Capability | Status |
|---|---|
| Refunds | Yes — wire-level; trigger from PrestaShop order screen |
| Tokenization | Tokens stored on the GC platform; PrestaShop doesn't render a saved-card picker today |
| Subscriptions | Not natively — PrestaShop has no built-in subscription engine |
| Multi-currency | Yes — uses Currency::iso_code from the cart, passed to GC unchanged |
Refunds
From the PrestaShop order detail page → Partial refund / Standard refund. The module calls POST /api/v1/payments/{transaction_id}/refund with the refund amount; the order is moved to PS_OS_REFUND on the resulting payment.refunded webhook.
Webhook security
Inbound webhooks are HMAC-SHA256 signed by GC. The PrestaShop receiver:
- Rejects deliveries whose
X-GC-Timestampis more than 5 minutes off the server clock. - Rejects deliveries whose
X-GC-Signaturedoesn't matchHMAC-SHA256("{timestamp}.{body}", webhook_secret). - Rejects deliveries when the configured webhook secret is empty or under 16 characters.
See Webhooks → Signature Verification.
Troubleshooting
- Order stuck in
PS_OS_BANKWIRE-like pending state — the current scaffold uses the bank-wire status as a holding state while waiting on the webhook. Confirm the webhook URL is reachable from public internet and that the webhook secret matches between PrestaShop and the GC dashboard. - Logo missing on the payment method radio — clear PrestaShop's cache (
Advanced Parameters → Performance → Clear cache). - 422 on session create — check the cart currency is in the supported list and that the API key prefix matches the configured Test Mode toggle.
Submission
Available on the PrestaShop Addons Marketplace (review SLA ~5 business days).
