Skip to content

How to Secure Wallet Transfers with OTP (Pro)

A wallet balance is money. Anyone who gets into a customer’s account can move it in one click, and nothing about a password tells you the person typing it is the account holder. OTP puts an emailed code between the button and the transfer.

Go to DevDiggers Plugins → Wallet → Configuration → OTP.

The OTP tab with the operations, expiry and code length fields

Nothing here is on by default. The tab ships with Secure Operations empty, which means no operation ever asks for a code.

Step 2: Choose which operations need a code

Section titled “Step 2: Choose which operations need a code”

The Secure Operations multi-select

Three operations can be guarded, in any combination.

  • Send Money moves balance to another customer.
  • Request Money asks another customer for balance.
  • Withdrawals takes money out of your store.

Start with Withdrawals. It is the only one of the three where money leaves the business rather than moving between two of your own customers. If a hijacked account drains a balance into another account on your store, you can reverse it with a manual adjustment. Once you have paid a withdrawal out, you cannot.

Request Money is the weakest case. A request moves nothing on its own, and the person who pays it has to press Pay themselves.

The OTP expiration and code length fields

OTP Expiration (Seconds) is how long the code stays valid. Leave it empty and the code never expires, which throws away most of what OTP buys you.

Five minutes is the number to use. It is long enough for someone to switch to their inbox and back, and short enough that a code sitting in an old email is useless.

Security Code Length is how many digits, default 6.

Six is what people expect and what they can hold in their head between two tabs. Longer is safer and more annoying, and the annoyance is what makes customers give up halfway through a transfer.

Press Save Changes, then open the wallet page as a customer and start one of the operations you guarded.

The wallet operation buttons on the customer’s wallet page

Fill the form in and submit it as usual. Instead of completing, the popup swaps to a Verify OTP panel: a line saying the code has been sent and how long it lasts, one field for the code, and a Verify & Proceed button.

Entering the code completes the operation. Closing the popup abandons it, and nothing has moved.

The email is Security OTP Verification under Configuration → Emails.

OTP is only as reliable as your store’s email. A store whose transactional mail lands in spam puts every guarded transfer behind a code nobody receives, and the customer cannot tell the difference between that and a broken wallet.

Send yourself a real test through whatever sends your WooCommerce mail, then run one guarded operation end to end on your own account, before you turn OTP on for anyone else.