Swft Wallet
A store-credit and cashback system for WooCommerce. Customers earn wallet balance through cashback, signup bonuses, and referrals; they spend it at checkout against any order. Includes peer-to-peer transfers and bank withdrawals.
Swft Wallet is free forever — there is no Pro tier.
What it does
Section titled “What it does”Every registered customer gets a wallet. Balance comes from:
- Signup bonus — a one-time credit when a customer registers.
- Cashback — a percentage of every completed order is added back to the wallet.
- Referral bonus — both the referrer and referee can get a credit when a referral converts.
- Manual credit — admins can credit or debit any wallet from the admin panel.
- Transfers — customers can transfer balance to each other (subject to a configurable fee).
- Withdrawals — customers can request a bank withdrawal; admin approves and processes manually.
Balance is spent at checkout as a payment method (Swft Wallet) — either covering the whole order or partial against the rest.
Prerequisites
Section titled “Prerequisites”- WordPress 6.0+
- WooCommerce 8.0+
- PHP 7.4+
- Database user with
CREATE TABLEprivileges (the plugin creates a custom transactions table on activation)
Installation
Section titled “Installation”- Install the Swft Wallet plugin from your Swft dashboard’s downloads section.
- Activate it.
- Go to WooCommerce → Swft Wallet → Settings.
Settings
Section titled “Settings”| Setting | What it does |
|---|---|
| Signup bonus | One-time credit when a new customer registers (e.g. £5). 0 disables. |
| Referral bonus | Credit to the referrer when their referee makes their first purchase. |
| Referee bonus | Credit to the referee when they make their first purchase via a referral link. |
| Cashback rate | Percentage of every completed order added back to the customer’s wallet (e.g. 2%). 0 disables. |
| Cashback expiry (days) | How long cashback stays valid before it’s clawed back. 0 = never expires. |
| Transfer fee | Flat fee deducted from the sender’s wallet on each P2P transfer. |
| Withdrawal minimum | Minimum balance a customer must accumulate before they can request a withdrawal. |
| API key | Used by Swft Checkout to verify wallet balance during the checkout flow. |
Customer experience
Section titled “Customer experience”Account page — customers see their wallet balance, transaction history, transfer form, and withdrawal request form.
Checkout — when the wallet has a positive balance, Swft Wallet appears as a payment method. Customers can:
- Apply their full balance and pay the difference with another method.
- Apply a partial amount of their choice.
- Pay the full order using only wallet balance.
Earning — cashback is awarded automatically when an order moves to Completed. Referral bonuses are awarded when the referee places their first order.
Admin pages
Section titled “Admin pages”WooCommerce → Swft Wallet has five tabs:
| Tab | Purpose |
|---|---|
| Customers | List of all wallets with balances. Search by email; click through to credit/debit. |
| Transactions | Full ledger of every credit and debit. Filterable by customer and type. |
| Cashback Rules | Per-product or per-category cashback overrides. Override the global rate for specific items (e.g. higher cashback on a clearance category). |
| Withdrawals | Pending and processed withdrawal requests. Approve, mark paid, or reject. |
| Settings | The settings table above. |
How it works under the hood
Section titled “How it works under the hood”On activation, the plugin creates swft_wallet_transactions — one row per credit or debit, with type, amount, balance-after, and reference (order ID, transfer ID, withdrawal ID).
The plugin registers a WooCommerce payment gateway (swft_wallet) that supports both full and partial payment. Cashback is awarded via woocommerce_order_status_completed. Referral bonuses are awarded via user_register (on a referee using a referral link cookie) and the referee’s first woocommerce_order_status_completed.
Three REST endpoints power the Swft Checkout integration:
GET /swft-wallet/v1/balance— current balance for the logged-in user.POST /swft-wallet/v1/debit— deduct from the wallet (called by Swft Checkout on order completion).POST /swft-wallet/v1/credit— add to the wallet (used for refunds and manual credits).
Withdrawals are stored in a swft_wallet_withdrawals table with status (pending / approved / paid / rejected). Processing is manual — there’s no automatic bank-rail integration.
Gotchas
Section titled “Gotchas”- Cashback only fires on Completed. Orders stuck in Processing won’t award cashback until they move forward.
- Withdrawal processing is manual. The admin must approve each request and arrange the bank transfer separately. The plugin doesn’t connect to a payment rail.
- Cashback expiry is hard. When the configured days elapse, expired cashback is clawed back from the wallet. If the customer has spent it, this can leave them negative — set a sensible expiry or 0.
- Transfer fee is deducted from the sender. The receiver gets the full amount.
- Wallet balance is real money on your books. Reconcile carefully with your accounting; outstanding wallet balance is a liability.