Contents
Developers Plugins
WooCommerce
Take payments through Payshen in a WooCommerce store. Customers pay on Payshen's secure page with the cards, banks and wallets your providers offer, and orders update by themselves. Building your own checkout instead? Use the PHP SDK.
Install
Requires WordPress 6.5 or newer, WooCommerce 8.5 or newer and PHP 8.2 or newer. Tested with WordPress 7.1 and WooCommerce 11.2. Run a PHP with the 21 October 2026 security release (8.2.35, 8.3.36, 8.4.27, 8.5.12 or newer): why.
- Download payshen-for-woocommerce.zip (the latest release).
- In WordPress: Plugins → Add New → Upload Plugin, choose the file, then Activate.
Set up
- WooCommerce → Settings → Payments → Payshen: click Connect with Payshen, sign in, pick the workspace and approve. The store gets its own test key and webhook, nothing to copy. Tick live payments on the same page when you are ready to take real ones.
- Enable it, keep Test mode on, and choose automatic or manual capture and the kinds of payment to offer: card, bank, wallet, crypto.
- Place a test order and pay it on the test page.
A connected store's keys can create, read, capture, release and refund payments, nothing else. They are listed under Developers as WooCommerce: your-store.com. Connecting again replaces them, and Disconnect in the plugin revokes them and removes the store's webhooks. A store on your own computer gets keys but no webhook, since Payshen cannot reach it; its orders are confirmed by the scheduled checks.
Prefer to enter keys by hand? Paste a test API key (ps_test_…) from Developers into the plugin, add the webhook URL shown in the plugin settings as a test endpoint under Developers → Webhooks, and paste its signing secret (whsec_…). The plugin checks the key with Payshen when you save. Connect with Payshen needs plugin 1.1.0 or later.
What the customer sees
The customer chooses Payshen at checkout and is sent to Payshen's secure payment page, then to the provider Payshen routes the payment to. Card details never reach your store. They come back to the order-received page. A declined payment brings them back to pay again, and that second try goes to a different provider first when the first one declined; one who left the payment page is offered a link that resumes the same payment, so an order is never paid twice.
Works with the Cart and Checkout blocks and with the classic checkout.
How orders update
The browser is never the source of truth. The plugin reads each payment from the Payshen API before it changes an order: on return, when a signed webhook arrives, and on a schedule for 48 hours (5 minutes, 30 minutes, 2, 12 and 48 hours), so a lost message never leaves an order wrong.
- Captured: the order is paid (Processing).
- Authorized (manual capture): On hold, with a note. With automatic capture, On hold only until the provider's capture is confirmed.
- Declined or failed: Failed, with the reason; the customer can pay again.
- Still being decided: On hold, never marked paid.
Refunds
Refund from the order screen, in full or in part, with "Refund via Payshen". A refund the provider confirms later stays pending with a note until it does; a refund made in the Payshen dashboard is recorded on the order too.
Manual capture
With manual capture the payment is authorized at checkout and captured when you move the order to Processing or Completed, or with the order action "Capture payment (Payshen)". A lower order total captures less. Cancelling the order releases the authorization.
Going live
Click Connect again, tick live payments and approve; or add your live API key (ps_live_…) and a live webhook endpoint's signing secret by hand. Then turn Test mode off. Test and live keys and secrets are kept apart, and a key of the wrong kind is refused on save.
Note
Everything else
- Source, issues and releases: github.com/meetsodasoft/payshen-woocommerce
- Supports High-Performance Order Storage. Logs (no keys or card data) under WooCommerce → Status → Logs, source "payshen".
- The API it uses: API reference.