Under certain scenarios, you may want to force Woocommerce to collect card info for orders, even when there’s a $0 payment (free). It sounds like a rare, if not impossible scenario, but I ran into a client who needed it. In their case, they’re offering their product for rental for free to industry influencers, reviewers, etc. Because their product is pretty pricey, they need to capture card data in Stripe (outside the number of days allowed for “capture”).
In either case, you can force Woocommerce to require payment with the following simple filter: