Accept payments

WooCommerce plugin

Accept QRIS, Virtual Account and cards on a WooCommerce store without writing code.

The official plugin adds Kasera Pay as a payment method on your store's checkout. The buyer is redirected to the hosted Kasera Pay Checkout page to pay, and the order is marked paid automatically through the signed payment.paid webhook. Source and downloads live on GitHub. Both the block-based checkout (WooCommerce's default) and the classic [woocommerce_checkout] shortcode page are supported.

Requirements

WordPress 6.0+, WooCommerce 8.0+, PHP 8.1+, and the store currency set to IDR — the gateway hides itself on any other currency.

Install

Download the latest zip from Releases, then in WordPress admin: Plugins → Add New → Upload Plugin, and activate.

Configure

Open WooCommerce → Settings → Payments → Kasera Pay and fill in two values:

API key. From your dashboard's Developer page. Start with kp_test_... — everything works end to end and no real money moves; see Test mode.

Webhook signing secret. In the dashboard, set your webhook URL to https://toko-anda.com/?wc-api=kasera_pay then copy the whsec_... secret into the plugin. Without it, orders never flip to Processing on their own.

The optional method codes field limits which payment methods the checkout offers (comma-separated codes from payment methods); empty means every method enabled on your account.

Test, then go live

Place one order with the test key: pick Kasera Pay at checkout, pay on the hosted page (test mode has a simulate button), and check the order becomes Processing. Then replace the key with kp_live_.... That is the whole go-live.

What the plugin does under the hood

Each order creates a payment request over POST /v1/transactions with an Idempotency-Key derived from the order and the request body, so a double-clicked Pay button never bills twice. The webhook is verified against Kasera-Signature-V1 (timestamped HMAC, five-minute tolerance) before the order is touched, and a delivery whose amount disagrees with the order total puts the order on hold instead of completing it.

If something does not work

Kasera Pay is not offered at checkout: check the store currency is IDR and the API key field is filled. Orders stay Pending after payment: check the webhook URL in the dashboard and the signing secret in the plugin — the payment succeeded on the Kasera Pay side; only the notification is missing, and it retries for ~34 hours.