(Pre)authorize only checkout for Paypal and Stripe
It’s usually good practice to only charge the customer’s card when products are ready to ship. By default, Woocommerce will immediately charge the customer, even though products may not ship for another couple of days. Ideally, I’d like Woocommerce to verify the card information upon checkout, then charge the card once the order has been marked as completed in the admin UI.
Both Stripe and Paypal standard are capable of doing this. For Paypal standard, you simply pass an additional paymentaction = authorization parameter, and you can later capture the payment using the API. https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/
The official Stripe plugin already collects the customer token, so it should be straightforward to not charge the customer until the order has been marked as complete.
Last updated: August 15, 2022