Stripe Terminal Integration
POS Pro integrates with Stripe Terminal to accept in-person card payments using physical card readers.
Overview
Stripe Terminal allows you to:
- Accept chip, contactless, and swipe payments
- Use certified card readers
- Process secure, PCI-compliant transactions
- Handle refunds back to cards
- Support multiple readers per location
Requirements
Before setting up Stripe Terminal:
- Stripe Account: Active Stripe account with Terminal enabled
- Stripe Plugin: Botble Stripe plugin must be installed and active
- Card Reader: Stripe-certified card reader device
- Network: Stable internet connection for readers
Supported Card Readers
Stripe Terminal supports various readers:
| Reader | Type | Best For |
|---|---|---|
| BBPOS WisePOS E | Countertop | Full-featured checkout |
| Stripe Reader M2 | Mobile | Portable payments |
| BBPOS Chipper 2X BT | Bluetooth | Mobile with existing device |
| Verifone P400 | Countertop | High-volume retail |
Check Stripe's documentation for the latest supported devices.
Configuration
Step 1: Enable Stripe Terminal
- Go to POS > Settings
- Find the Stripe Terminal Settings section
- Toggle Enable Stripe Terminal to ON
Step 2: Enter API Credentials
Stripe Secret Key: Enter your Stripe secret API key
- Find this in your Stripe Dashboard > Developers > API keys
- Use the secret key (starts with
sk_)
Stripe Location ID (Optional):
- Create a location in Stripe Dashboard > Terminal > Locations
- Enter the location ID (starts with
tml_) - Useful for multi-location businesses
Webhook Signing Secret (Optional):
- Set up a webhook endpoint in Stripe Dashboard
- Enter the signing secret for validation
Click Save Settings
Step 3: Register Your Reader
- Follow Stripe's instructions to register your reader
- Connect the reader to your network
- The reader should appear in your Stripe Dashboard
Syncing Readers
First-Time Setup
- Go to POS > Settings > Stripe Terminal
- Click Sync Readers
- POS Pro fetches all readers from your Stripe account
- Readers appear in the reader list
When to Sync
Sync readers when:
- Adding a new reader
- Reader not showing in POS
- After Stripe Dashboard changes
- Troubleshooting connection issues
Managing Readers
Viewing Reader Status
- In POS, click the card reader icon
- View list of available readers
- Each reader shows:
- Device name/label
- Device type
- Online/offline status
- Last seen timestamp
Setting Default Reader
- Click the card reader icon
- Find the reader you want as default
- Click Set as Default
- This reader is used automatically for card payments
Reader Status Indicators
| Status | Meaning |
|---|---|
| Online | Reader is connected and ready |
| Offline | Reader is not reachable |
| Busy | Reader is processing a payment |
Processing Card Payments
Standard Card Payment
- Add items to cart
- Select Card as payment method
- Click Complete Order
- The reader displays the amount
- Customer inserts, taps, or swipes card
- Wait for authorization
- Order completes on success
Split Payment with Card
- Click Split Payment
- Add card tender with amount
- Optionally add other tenders
- Click Complete Order
- Process card payment on reader
- Complete remaining tenders
Customer Interaction
Guide customers through:
- Insert Card: For chip cards, insert into slot
- Tap Card: For contactless, hold near reader
- Swipe Card: For magnetic stripe, swipe through reader
- Enter PIN: If required for the card
- Remove Card: When prompted
Handling Payment Scenarios
Payment Approved
- Reader shows "Approved"
- POS marks payment as captured
- Receipt prints (if enabled)
- Order is complete
Payment Declined
- Reader shows decline reason
- POS shows error message
- Options:
- Try a different card
- Choose different payment method
- Cancel the transaction
Connection Lost
If the reader loses connection during payment:
- POS shows connection error
- Click Retry to attempt reconnection
- Or Cancel to abort the payment
- Check reader network connection
Processing Card Refunds
For orders paid by card:
- Go to refund screen
- Select Original Tender as refund method
- Process the refund
- Refund is sent to Stripe automatically
- Customer sees refund in 3-5 business days
INFO
Card refunds don't require the card to be present. The refund is processed to the original card used.
Cancelling a Payment
If you need to cancel a pending payment:
- Click Cancel Payment in POS
- The reader cancels the action
- Customer can remove their card
- Choose a different payment method or cancel order
Webhook Setup (Optional)
For real-time payment updates:
Creating a Webhook
- Go to Stripe Dashboard > Developers > Webhooks
- Click Add endpoint
- Enter your webhook URL:
https://yourdomain.com/pos/stripe/terminal/webhook - Select events:
terminal.reader.action_failedterminal.reader.action_succeeded
- Copy the signing secret
- Enter it in POS Settings
Webhook Benefits
- Real-time payment status updates
- Better error handling
- Automatic status synchronization
Vendor Access (Marketplace)
If using Marketplace plugin:
- Enable Vendor Stripe Terminal Access in POS Settings
- Vendors can use card readers from their dashboard
- Each vendor processes their own payments
- Vendors need their own Stripe Terminal setup
Troubleshooting
Reader Not Showing
Possible Causes:
- Reader not registered in Stripe
- Reader not synced to POS
- Reader on different Stripe account
Solutions:
- Check reader is registered in Stripe Dashboard
- Click Sync Readers in POS
- Verify correct Stripe API key
Reader Offline
Possible Causes:
- Network connectivity issues
- Reader powered off
- Reader not configured
Solutions:
- Check reader power and network
- Restart the reader
- Verify network settings on reader
- Check firewall isn't blocking
Payment Timeout
Possible Causes:
- Slow network connection
- Reader not responding
- Card reader busy
Solutions:
- Check network connection
- Restart the reader
- Wait and retry
- Try a different reader
Payment Declined
Common Decline Codes:
| Code | Meaning | Action |
|---|---|---|
card_declined | Card declined by issuer | Try different card |
insufficient_funds | Not enough balance | Try different card |
expired_card | Card has expired | Use valid card |
incorrect_pin | Wrong PIN entered | Re-enter PIN |
Refund Failed
Possible Causes:
- Original charge too old
- Charge already refunded
- Stripe account issue
Solutions:
- Check original charge in Stripe Dashboard
- Verify charge hasn't been fully refunded
- Process refund directly in Stripe if needed
Security Best Practices
API Key Security
- Never share your secret key
- Use test keys for development
- Rotate keys periodically
- Restrict key permissions if possible
Reader Security
- Place readers in secure locations
- Don't leave readers unattended
- Report lost/stolen readers to Stripe
- Use reader PINs if available
Transaction Security
- Verify transaction amounts before processing
- Watch for suspicious behavior
- Review transactions regularly
- Enable Stripe Radar for fraud protection
Testing
Test Mode
- Use Stripe test API keys
- Use test card numbers:
4242424242424242- Successful payment4000000000000002- Declined4000000000009995- Insufficient funds
- Test reader shows "TEST MODE"
Going Live
- Switch to live API keys
- Remove test mode indicators
- Process a small real transaction
- Verify funds in Stripe Dashboard
Permissions
Stripe Terminal requires:
| Permission | Allows |
|---|---|
| POS | Process card payments |
| Settings | Configure Stripe Terminal |
Assign these permissions in Users > Roles.
