The idea
Create a small linked order for the advance amount and send the customer to the standard pay for order page. Whatever gateways you have enabled appear there.
What to remove
Cash on delivery itself must not appear on that page, or the customer could choose to pay the advance by cash and defeat the purpose.
Gateways that confirm later
Offline methods such as bank transfer cannot confirm instantly. The advance counts only when you mark the advance order as paid.
Refunds
Because the advance is its own order, a refund goes through that order, which your gateway already understands. The main order total is never edited.
Questions
Do I need a gateway specific plugin?
No. Any gateway that works on the WooCommerce pay for order page can take the advance.
What if the customer does not pay the advance?
The order cancels after the number of hours you set and stock is released.
Get paid before the door opens. Threshold is free on WordPress.org.
Get the free plugin