Pay-for-Order Page Missing Billing Address Fields – Stripe Radar Compatibility
-
I’m experiencing an issue with manually created orders on the pay-for-order page where payment methods are created without billing details, causing payments to be blocked by Stripe Radar rules.
Environment:
- WooCommerce: Latest version
- WooCommerce Stripe Gateway: 10.3.1
- WordPress: Latest version
The Issue:
When an admin manually creates an order and sends a customer the pay-for-order link (/checkout/order-pay/{order_id}/?pay_for_order=true&key={order_key}), the payment fails due to a Stripe Radar rule that blocks payments with missing billing address:
Block if :address_line1_check: in ('fail', 'not_provided')The Stripe API shows the payment method is created with address_line1_check: ‘not_provided’, causing the Radar rule to block the payment.
Root Cause:
- The pay-for-order page doesn’t display billing address fields like the normal checkout page does
- Admins enter a billing address when creating the order, but customers may use a credit card with a different billing address
- The Stripe payment element creates the payment method on the frontend without billing details
- By the time the payment method reaches the server, it has already been evaluated by Stripe Radar and blocked
Solutions Attempted:
Over 3+ hours of debugging, I attempted the following server-side solutions:
- Added custom billing fields to pay-for-order page using woocommerce_pay_order_before_payment hook – Successfully displayed fields and captured customer input
- Tried multiple filters to inject billing details:
- wc_stripe_generate_payment_request – Discovered billing_details not valid on payment intent
- wc_stripe_generate_create_intent_request – Failed because filter fires during confirmation, not creation; Stripe returned “Received unknown parameter: customer” on confirm endpoint
- wc_stripe_payment_intent_data – Filter never fired during pay-for-order flow
- Attempted to update payment method after creation:
- Attached payment method to Stripe customer
- Updated payment method billing_details via Stripe API
- Failed because Radar rule evaluates before backend code runs
- Updated order billing address using woocommerce_before_pay_action hook – Successfully saved to order but doesn’t affect payment method creation
The Core Problem:
The payment method is created by JavaScript on the frontend without billing details before any server-side code can intervene. There’s no server-side hook that fires early enough in the pay-for-order flow to inject billing details before Stripe creates and evaluates the payment method.
What’s Needed:
Either:
- Display billing address fields on pay-for-order page (like normal checkout) so customers can verify/update billing address to match their credit card
- Pass billing details to Stripe Elements when creating payment method on pay-for-order page so address_line1_check is properly evaluated
- Add a filter/hook that fires before payment method creation where billing details can be configured for the Stripe Elements instance
Comparison:
Normal checkout flow: Shows billing fields → collects data → creates payment method with billing details → Stripe Radar evaluates with address
Pay-for-order flow: No billing fields → creates payment method without billing details → Stripe Radar blocks for missing address
Request:
Can you either:
- Add billing address fields to the pay-for-order page template
- Modify the Stripe Elements initialization to include billing details from the order
- Provide documentation on the correct filter/hook to use for this scenario
This affects any WooCommerce store using Stripe Radar rules that require billing address verification for manually created orders.
Logs/Evidence:
The Stripe API request shows payment methods being created without billing_details, resulting in address_line1_check: ‘not_provided’ which triggers Radar blocks.
Thank you for your help with this issue. Happy to provide additional details or test any solutions.
You must be logged in to reply to this topic.