Wallet SystemWallet System
Buy Now
View Demo
  • Getting Started

    • Introduction
    • Quick Start
    • Features
    • Installation
    • First-Time Setup
    • Admin Tour
  • Wallet Core

    • Core Wallet
    • Wallet Payment Gateway
    • Recharge / Top-up
    • Wallet Transfer
    • My Wallet Page
    • Shortcodes
  • Earn & Reward

    • Cashback Engine
    • Referral Program
    • Multilevel Referral
    • Daily Login Reward
    • Invite Friends
    • Deposit / Top-up Bonus
  • Spend & Payout

    • Checkout Discount
    • Checkout Restriction
    • Withdrawal
    • PayPal Payout
    • Stripe Payout
    • Refund to Wallet
    • Buy Now Pay Later
  • Identity & Mobile

    • KYC
    • QR Code Payments
  • Wallet Central

    • Overview
    • Endpoint & Routing
    • CTA Discovery
    • Home Dashboard
    • Add Funds
    • Withdraw
    • Withdrawals List
    • Send Money
    • QR Pay
    • Payment Requests
    • Refer & Earn
    • Transactions
    • Settings
    • KYC Flow
    • Architecture
    • Tweaks & Responsive
    • Security
    • Admin Controls
  • Admin Tools

    • Admin Settings (index)
    • Bulk Credit / Debit
    • Analytics Dashboard
  • Settings Tabs

    • General
    • Recharge
    • Checkout
    • Withdrawal
    • Payout (PayPal/Stripe)
    • KYC
    • Cashback
    • Referral
    • Multilevel
    • BNPL
    • QR Pay
    • Notifications
    • Wallet Central
    • Integrations
    • API Keys
  • Notifications

    • Email Notifications
    • SMS Notifications
  • Developer

    • REST API
    • Filters & Hooks
  • Help

    • Troubleshooting
    • FAQ
    • Glossary
Support
Buy Now
View Demo
  • Getting Started

    • Introduction
    • Quick Start
    • Features
    • Installation
    • First-Time Setup
    • Admin Tour
  • Wallet Core

    • Core Wallet
    • Wallet Payment Gateway
    • Recharge / Top-up
    • Wallet Transfer
    • My Wallet Page
    • Shortcodes
  • Earn & Reward

    • Cashback Engine
    • Referral Program
    • Multilevel Referral
    • Daily Login Reward
    • Invite Friends
    • Deposit / Top-up Bonus
  • Spend & Payout

    • Checkout Discount
    • Checkout Restriction
    • Withdrawal
    • PayPal Payout
    • Stripe Payout
    • Refund to Wallet
    • Buy Now Pay Later
  • Identity & Mobile

    • KYC
    • QR Code Payments
  • Wallet Central

    • Overview
    • Endpoint & Routing
    • CTA Discovery
    • Home Dashboard
    • Add Funds
    • Withdraw
    • Withdrawals List
    • Send Money
    • QR Pay
    • Payment Requests
    • Refer & Earn
    • Transactions
    • Settings
    • KYC Flow
    • Architecture
    • Tweaks & Responsive
    • Security
    • Admin Controls
  • Admin Tools

    • Admin Settings (index)
    • Bulk Credit / Debit
    • Analytics Dashboard
  • Settings Tabs

    • General
    • Recharge
    • Checkout
    • Withdrawal
    • Payout (PayPal/Stripe)
    • KYC
    • Cashback
    • Referral
    • Multilevel
    • BNPL
    • QR Pay
    • Notifications
    • Wallet Central
    • Integrations
    • API Keys
  • Notifications

    • Email Notifications
    • SMS Notifications
  • Developer

    • REST API
    • Filters & Hooks
  • Help

    • Troubleshooting
    • FAQ
    • Glossary
Support
  • Getting Started

    • Introduction
    • Quick Start — Wallet Live in 5 Minutes
    • Features
    • Installation
    • First-Time Setup
    • Admin Tour
  • Wallet Core

    • Core Wallet
    • Wallet Payment Gateway
    • Recharge / Top-up
    • Wallet Transfer
    • My Wallet Page
    • Shortcodes
  • Earn & Reward

    • Cashback Engine
    • Referral Program
    • Multilevel Referral
    • Daily Login Reward
    • Invite Friends
    • Deposit / Top-up Bonus
  • Spend & Payout

    • Checkout Discount
    • Checkout Restriction
    • Withdrawal
    • PayPal Payout
    • Stripe Payout
    • Refund to Wallet
    • Buy Now Pay Later (BNPL)
  • Identity & Mobile

    • KYC (Know Your Customer)
    • QR Code Payments
  • Wallet Central

    • Wallet Central Overview
    • Endpoint & Routing
    • CTA Discovery
    • Home Dashboard
    • Add Funds
    • Withdraw
    • Withdrawals List + Detail
    • Send Money
    • QR Pay
    • Payment Requests
    • Refer & Earn
    • Transactions
    • Settings (customer)
    • KYC Flow
    • Architecture
    • Tweaks & Responsive
    • Security
    • Admin Controls
  • Admin Tools

    • Admin Settings
    • Bulk Credit / Debit
    • Analytics Dashboard
  • Settings Tabs

    • General Settings
    • Recharge Settings
    • Checkout Settings
    • Withdrawal Settings
    • Payout Settings (PayPal + Stripe)
    • KYC Settings
    • Cashback Settings
    • Referral Settings
    • Multilevel Settings
    • BNPL Settings
    • QR Pay Settings
    • Notifications Settings
    • Wallet Central Settings
    • Third-Party Integrations
    • API Keys
  • Notifications

    • Email Notifications
    • SMS Notifications
  • Developer

    • REST API
    • Filters & Hooks
  • Help

    • Troubleshooting
    • FAQ
    • Glossary

Payout Settings (PayPal + Stripe)

Where you put your PayPal + Stripe credentials so admin-approved withdrawals can pay out automatically.

Want the feature overview?

See PayPal Payout and Stripe Payout for the API call shape, sandbox vs live, and reconciliation queries.

Where

Wallet → Settings → Payout.

Two sub-sections: PayPal and Stripe.

PayPal

PayPal Automatic Payouts section — client ID, secret, sandbox toggle, webhook

The Stripe Automatic Payouts section sits right below it on the same Settings tab:

Stripe Automatic Payouts section — secret/publishable keys, mode toggle

What you need

  • A PayPal Business account
  • API credentials (Client ID + Secret) from your PayPal app
  • Webhook URL registered in your PayPal app (for status sync)

Step-by-step Setup

1. Get API credentials

  1. Log in to developer.paypal.com
  2. Apps & Credentials
  3. Click Create App (sandbox first, then live separately)
  4. Copy Client ID + Secret

2. Plugin fields

FieldNotes
Enabletoggle exposure on the withdrawal method radio
Modesandbox for testing / live for production
Sandbox Client IDfrom your sandbox app
Sandbox Secretfrom your sandbox app
Live Client IDfrom your live app
Live Secretfrom your live app
Currencybase currency for payouts (must match PayPal account)
Sender batch prefixe.g. WK-WDRW- (helps reconcile)
Email subject (to recipient)from PayPal — overrideable
Webhook URLshown read-only — copy into PayPal app webhooks

3. Register webhook in PayPal

In your PayPal app:

  1. Scroll to Webhooks
  2. Add the webhook URL the plugin shows (/wp-json/wkwc_wallet/v1/paypal_webhook)
  3. Subscribe to events:
    • PAYMENT.PAYOUTS-ITEM.SUCCEEDED
    • PAYMENT.PAYOUTS-ITEM.FAILED
    • PAYMENT.PAYOUTS-ITEM.REFUNDED
    • PAYMENT.PAYOUTS-ITEM.RETURNED
    • PAYMENT.PAYOUTS-ITEM.UNCLAIMED

PayPal POSTs to that URL on each event → plugin updates the matching withdrawal status.

4. Test in sandbox

  1. Use sandbox credentials + Mode = sandbox
  2. Approve a test withdrawal via admin
  3. Confirm webhook arrives → status flips approved → paid
  4. Switch to live keys when ready

5. Save

Click Save changes.

Sandbox vs Live

ModeUse forCustomer email
sandboxdev / stagingsandbox personal accounts (in developer dashboard)
liveproductionreal PayPal email

Mode mismatch

Sandbox creds with live mode (or vice versa) → "Authentication failed (invalid_client)". Plugin guards against the mistake by validating the token endpoint on save.

Sender Balance Required

PayPal Payouts withdraw from your PayPal Business balance. Top up your PayPal account before approving large withdrawals — failure mode is INSUFFICIENT_FUNDS.

Stripe

What you need

  • Stripe account with Connect enabled
  • Your Connect platform application live
  • API secret keys (test + live)

Step-by-step Setup

1. Plugin fields

FieldNotes
Enabletoggle exposure on withdrawal method radio
Modetest for staging / live for production
Test Secret Keysk_test_...
Live Secret Keysk_live_...
Currencybase currency (sent in lower-case to Stripe)
Description prefixfor the Stripe transfer description
Auto-fetch onboarding linkwhen ON, generates onboarding URL when needed

2. Customer Connect account

The plugin needs the customer's acct_xxx ID to know where to send. Two ways:

A. Auto-fetch onboarding (recommended)

Enable the toggle. When a customer requests their first Stripe withdrawal:

  1. Plugin creates an Express Connect account
  2. Saves the account ID
  3. Generates a Stripe-hosted onboarding URL
  4. Redirects customer to complete onboarding

Future withdrawals just work.

B. Bring-your-own

If you collect Stripe Connect IDs via another plugin (Dokan / WCFM / custom), set user meta _wkwp_stripe_account_id from that plugin's hook. Wallet plugin reads from the same key.

3. Webhooks (optional)

Transfers are immediate so webhooks aren't strictly needed. Optionally subscribe to:

  • transfer.created
  • transfer.failed
  • transfer.reversed

Webhook URL shown in plugin settings. Set the signing secret on the same tab.

4. Test in test mode

  1. Use test keys + Mode = test
  2. Onboard a Stripe test connected account
  3. Approve a test withdrawal
  4. Confirm Stripe transfer ID appears on the withdrawal row
  5. Switch to live keys when ready

5. Save

Click Save changes.

Currency Conversion

Plugin auto-converts to Stripe's smallest currency unit:

CurrencyMultiplier
USD, EUR, GBP, INR, etc.× 100 (cents / paise)
JPY, KRW, VND× 1 (zero-decimal)
BHD, KWD, OMR× 1000 (three-decimal)

Override via filter for unusual currencies.

Verify Both

  1. Set up PayPal sandbox and Stripe test
  2. Enable both methods in Withdrawal Settings
  3. As test customer → submit 100 withdrawal via PayPal → admin approves → confirm sandbox PayPal account credited
  4. Repeat for Stripe → confirm test transfer in Stripe dashboard
  5. Switch all to live mode

Common Combos

GoalSetup
PayPal-only storePayPal live, Stripe disabled
Stripe-only storeStripe live, PayPal disabled
Both optionsBoth live, customer picks at withdrawal
Bank-only fallbackBoth disabled — admin manually transfers off-platform

Reconciliation

Both providers tag transfers with the withdrawal row ID. Easy to reconcile per row in your accounting.

PayPal: search dashboard for WK-WDRW- prefix (or your custom prefix).

Stripe: transfer ID tr_xxx is searchable.

Troubleshooting

PayPal

ProblemFix
Authentication failed (invalid_client)Sandbox creds in live mode, or vice versa
RECEIVER_UNREGISTEREDCustomer has no PayPal account at that email
INSUFFICIENT_FUNDSYour PayPal Business balance too low
Webhook never firesURL not registered in PayPal app, OR firewall blocking PayPal IPs

Stripe

ProblemFix
account_invalidCustomer's Stripe account closed; reject + refund
transfers_not_allowedConnect onboarding incomplete; resend onboarding link
balance_insufficientTop up your platform Stripe balance
currency_mismatchCustomer's Stripe profile currency ≠ payout currency

Related

  • Withdrawal Settings
  • PayPal Payout (engine)
  • Stripe Payout (engine)
Prev
Withdrawal Settings
Next
KYC Settings