-
Notifications
You must be signed in to change notification settings - Fork 130
Description
Library used
react-paypal-js
🐞 Describe the Bug
Venmo isEligible() returns false on desktop browsers but true on mobile browsers, using the same production client ID and SDK configuration. This causes the Venmo pay button not to render. According to PayPal documentation, desktop users should see the button and be prompted with a QR code flow where they scan with their Venmo app when they click it, but the button never renders because eligibility fails.
🔬 Minimal Reproduction
Set up @paypal/react-paypal-js with Venmo enabled:
const initialOptions = {
"client-id": "YOUR_PRODUCTION_CLIENT_ID",
currency: "USD",
components: "buttons",
"enable-funding": "venmo",
}
<PayPalScriptProvider options={initialOptions}>
<PayPalButtons
fundingSource="venmo"
createOrder={...}
onApprove={...}
/>
</PayPalScriptProvider>
Load the page on a desktop browser (Chrome on macOS)
Check window.paypal.Buttons({ fundingSource: 'venmo' }).isEligible() - returns false
Load the same page on a mobile browser (iOS Safari or Android Chrome)
Check eligibility - returns true, button renders
😕 Actual Behavior
On desktop browsers on macOS, the Venmo button does not render. Debug logging shows:
[PayPal Debug] SDK State: {isInitial: false, isPending: false, isResolved: true, isRejected: false}
[PayPal Debug] window.paypal available: true
[PayPal Debug] paypal.FUNDING: {PAYPAL: 'paypal', VENMO: 'venmo', ...}
[PayPal Debug] paypal.version: 5.0.520
[PayPal Debug] Venmo button isEligible(): false
[PayPal Debug] initialOptions: {client-id: 'Afcs...', currency: 'USD', data-page-type: 'checkout', components: 'buttons', enable-funding: 'venmo'}
[PayPal Debug] paymentType: venmo
[PayPal Debug] fundingSource being passed: venmo
[PayPal Debug] User agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
No errors are thrown - the button simply doesn't render because isEligible() returns false.
🤔 Expected Behavior
Per PayPal documentation at https://developer.paypal.com/docs/checkout/pay-with-venmo/:
"Buyers on desktop web browsers can use any major web browser" "If the payer doesn't have Venmo installed or uses a desktop, the SDK presents the payer with a QR code"
The Venmo button should render on desktop and display a QR code for the user to scan with their Venmo mobile app.
🌍 Environment
- Node.js/npm: - Node: v22.21.1, npm: 10.9.4
- OS: - macOS Sequoia 15.5
- Browser: - Chrome 143.0.7499.41/Safari 18
**Note that on Windows/Chrome this issue does not occur.
➕ Additional Context
This is occurring in production with a live PayPal Business client ID, not sandbox (Venmo is not supported in sandbox)
The Braintree SDK has explicit allowDesktop: true and allowDesktopWebLogin: true options - is there an equivalent for the PayPal JS SDK that we're missing?
We've verified enable-funding=venmo is being passed correctly in the SDK options
Is additional merchant account configuration required to enable desktop Venmo/QR code flow?