PayPal Reader (Zettle) Gateway
The PayPal Reader gateway lets you accept in-person card payments using a PayPal Reader (Zettle) card terminal directly from WCPOS. The browser streams the live payment status from the reader over a secure connection to Zettle's Reader Connect API, so the cashier sees each step of the payment as it happens.
Features
In-person card payments
Take chip, contactless, and mobile-wallet payments on a PayPal Reader (Zettle) terminal
Live payment status
The POS shows real-time progress — connecting, payment in progress, completed, or cancelled
Amount verified server-side
The reported amount is always checked against the order total before the order is placed
Simple pairing
Link a reader from the gateway settings using a pairing code shown on the device
Requirements
PayPal Reader / Zettle availability, supported reader models, and supported countries are determined by your Zettle merchant account, not by WCPOS. Confirm your reader and region are supported with PayPal/Zettle before purchasing.
Installation
Install PayPal Reader for WooCommerce
Install from WP Admin > POS > Settings > Extensions, or download the latest plugin zip asset (not the GitHub source-code zip or tarball) from the GitHub releases page and upload it via Plugins > Add New > Upload Plugin. WooCommerce must be installed and active.
Configure the gateway
- Navigate to
WP Admin > WooCommerce > Settings > Payments - Find PayPal Reader in the payment methods list and open its settings
- Leave Enable Test mode on while you verify the setup. Use the credentials from your Zettle developer merchant account in test mode; disable it later to take live payments
- Enter your Zettle Client ID — your Zettle OAuth client ID from the Zettle Developer Portal
- Enter your Zettle Assertion — your Zettle OAuth assertion (JWT). This is treated as a secret
- Optionally set the Title and Description shown to customers
- Save the settings
The "Enable PayPal Reader for web checkout" checkbox is for your online store's checkout only — it is not required for the POS. You enable the gateway for the POS in a later step.
Pair your reader
- After saving, scroll to the Paired readers section at the bottom of the settings screen (it appears once your Client ID and Assertion are saved)
- On the PayPal Reader device, open Settings → Link with a developer to display the pairing code
- Under Pair a new reader, enter the Pairing code and optionally a Reader name (e.g. "Front counter")
- Click Pair reader. The reader appears in the paired list and is ready to take payments
A reader must be successfully paired before you can take payments. Use Unpair on the paired list to remove a reader.
Enable in WCPOS
- Go to
WP Admin > POS > Settings > Checkout - Find the PayPal Reader gateway in the list
- Enable it for use in the POS
- Save your settings
Taking a payment
- Add items to the cart in the POS and proceed to checkout
- Select PayPal Reader as the payment method
- Choose a paired reader and start the payment. (If none are paired, you'll be prompted to ask the store admin to pair one in
WooCommerce → Settings → Payments → PayPal Reader.) - The POS shows live status as it connects: "Connecting to reader…", "Reader ready. Requesting payment…", "Payment in progress…"
- The customer taps or inserts their card on the reader
- On success, the amount is verified against the order total, the transaction reference is recorded, and the order is placed automatically
- Use Cancel payment at any point to cancel the request on the reader
Going live
When you've verified everything in test mode:
- Disable Enable Test mode
- Replace your Zettle test credentials with your production Client ID and Assertion
- Save — the endpoints and flow are identical; only the merchant account differs
Requirements recap & limitations
- The order is only completed after a confirmed reader result. WCPOS will not place the order unless the payment reports as completed.
- Amount-mismatch protection. If the amount the reader reports doesn't match the order total, the payment is refused — so avoid editing the cart total mid-payment.
- Connectivity. Live payments depend on the browser maintaining a session to Zettle's Reader Connect API; a stable internet connection is required.
Troubleshooting
The Paired readers section isn't showing
Save your Zettle Client ID and Assertion first. The pairing panel only appears once both credentials are saved. You'll otherwise see "Save your Zettle Client ID and Assertion above before pairing a reader."
Reader won't pair
- On the reader, make sure you opened Settings → Link with a developer to get a fresh pairing code
- Enter the code exactly as shown, before it expires
- Confirm your Zettle Client ID and Assertion are correct and saved
- Ensure the reader and your network have a stable internet connection
Payment is refused with an amount mismatch
The plugin verifies the reader-reported amount against the order total and refuses any mismatch. Don't change the cart or order total while a payment is in progress — cancel the payment, adjust the cart, then start a new payment.
No real payments are processed / an admin warning about a 'mock reader' appears
A development/CI constant (PRWC_USE_MOCK_READER) is defined in wp-config.php. Remove that constant before taking live payments — while it's set, no real payments are processed.
Getting help
- Report gateway issues on the GitHub repository
- Contact PayPal/Zettle support for account, reader hardware, and regional availability questions