| @@ -282,8 +282,17 @@ | ||
| 282 | 282 | |
| 283 | 283 | // Add type-specific configuration |
| 284 | 284 | if ( paymentType === 'one-time' ) { |
| 285 | 285 | elementsConfig.captureMethod = 'manual'; |
| 286 | + // Manual capture is incompatible with some account-enabled payment methods | |
| 287 | + // (e.g. Bacs Direct Debit, Link, Cash App, BNPL). When any of those are enabled, | |
| 288 | + // Stripe rejects the deferred elements/sessions request with HTTP 400 and the | |
| 289 | + // Payment Element fails to render — which is why the card field does not load in | |
| 290 | + // live mode while test mode (card-only) works. Scope the element to card so only | |
| 291 | + // capture-compatible methods are offered. Apple Pay / Google Pay still appear | |
| 292 | + // (they are surfaced through `card`); the methods dropped here could never be used | |
| 293 | + // with manual capture anyway, so no working checkout is lost. | |
| 294 | + elementsConfig.paymentMethodTypes = [ 'card' ]; | |
| 286 | 295 | } |
| 287 | 296 | |
| 288 | 297 | // Create and mount payment element |
| 289 | 298 | const elements = stripe.elements( elementsConfig ); |