Skip to content

How a Wallet Works

A wallet is one number per customer and a list of every change to it. This is that chain in order, so the settings docs make sense when you read them.

1. The balance is one number on the account

Section titled “1. The balance is one number on the account”

Every customer has a single balance, stored against their WordPress account. It is not per currency and not per order. A guest checkout has no account, so it has no wallet.

You can see every balance at once under DevDiggers Plugins → Wallet → Users.

The wallet users list with ID, user, balance, transactions and referred-by columns

Each one writes a transaction row with its own reason, which is what makes the history readable later.

  • A top-up. The customer enters an amount and pays for it like any other order.
  • A signup credit. Set Registration Credit and every new account starts with money in it.
  • Cashback. Rules award a percentage or a fixed amount on qualifying orders.
  • A transfer in. Another customer sends money, or pays a request.
  • An adjustment. You credit the wallet by hand from the admin.

Two more only exist in Pro: a referral reward when someone they invited registers, and money returned when a withdrawal is cancelled.

This is the part that surprises people. The Add Money box does not credit the balance directly. It puts a hidden product called Wallet Topup into the cart, priced at the amount typed. It then sends the customer to the cart or the checkout.

The Add Money box on the My Wallet page with the amount field and preset buttons

Three consequences, and all three catch people out.

  • The cart is emptied first. A top-up cannot share a cart with ordinary products, and the plugin removes anything else that is in there.
  • The wallet cannot pay for a top-up. The Wallet payment method is removed from a checkout holding the top-up product, along with any gateway you have not allowed for top-ups.
  • The balance moves on order completion, not on payment. Which status counts is Wallet Topup Order Status, and Completed is the default.

The checkout for a wallet top-up, with the payment methods narrowed to the allowed ones

The order received page for a completed top-up

The credit lands with the reason Wallet Topup, for the order subtotal.

Two routes, and they behave differently.

Paying the whole order uses the Wallet payment method. Selecting it and placing the order debits the full order total and completes the payment in one step.

The Wallet payment method at checkout with the available balance beside its name

The method hides itself when it cannot be used. A zero balance, a balance smaller than the order total, or an order larger than Max Debit Limit.

Paying part of the order uses the Wallet Partial Payment panel in the order summary. It applies the amount as a negative, non-taxable line called Payment via Wallet, and the customer settles what is left with another method.

The order summary with a Payment via Wallet line reducing the total

Either way the debit is written when the order is placed, with the reason Order Payment.

5. Cashback is decided at checkout and paid on completion

Section titled “5. Cashback is decided at checkout and paid on completion”

Two separate moments, and the gap between them is where the confusion lives.

  • When the order is placed, the plugin works out what cashback it qualifies for and stores that figure on the order. Nothing is credited yet.
  • When the order reaches Completed, the figure is credited, one transaction row per kind of cashback.

The cashback line in the checkout, stating what the order will earn

How Cashback Is Awarded follows that in detail, including the delay and expiry options.

Send Money debits the sender and credits the receiver on the spot, in a single transfer row that records both. Request Money does not move anything: it leaves a pending request on the other customer’s wallet page, and they choose Pay or Decline.

The Pending Requests card on the wallet page with Pay and Decline buttons

A withdrawal is a request, not a payout. The balance is debited immediately, and two rows are written: the net amount as Withdrawal Requested, and the fee as Withdrawal Charges.

You then pay the customer by whatever means they named in the note, and mark the request paid. If you cancel it instead, the full amount before charges goes back into the balance.

The withdrawal requests screen listing customers with pending requests

  • An order is cancelled. Any wallet amount used is credited back, and any cashback awarded on it is debited.
  • An order is fully refunded. The same, plus a refund through the Wallet method credits the refunded amount into the balance.
  • An order is partly refunded. The cashback is reversed in proportion to what was refunded.

A part-refunded order, with the refund line and the net payment

Every step in this chain writes a row, and they all land in the same place.

The wallet transactions list with ID and date, customer, context, amount and note columns

The Transaction Context column is what makes it readable: the type, the reason and the order or sender it links back to.

The transaction context column showing type, reference and linked order

  • The cashback line in the checkout, stating what the order will earn

How Cashback Is Awarded