Is it possible to set woocommerce to not charge the customer until the product actually ships?
This is not so much a WooCommerce issue as a payment gateway issue. Paypal distinguishes, for example, between ‘authorization’ and ‘capture’, Worldpay has similar terms (and a different API).
In the case of Paypal, check https://www.paypalobjects.com/webstatic/en_US/developer/docs/pdf/pp_wpp_integrationguide.pdf:
Authorization and Capture API operations:
Capture an authorized payment.
Authorize a payment. (Express Checkout only)
So you probably need at least the Paypal Express Gateway plugin: http://www.woothemes.com/products/paypal-express/
With Authorize.net AIM (http://www.woothemes.com/products/authorize-net-payment-gateway/) the “Sale Method” can be set to “Authorize Only” which will verify that funds are available on the customer’s card, but not capture the funds. http://cld.wthms.co/afXJ
Then when the product ships the funds can be captured inside of the Authorize.net account dashboard. If funds are not captured within a few days the authorization will be released.
PayPal Advanced which is only $5 a month will do it. You will need an extension though to integrate unless you can code it yourself. IgniteWoo is the place I recommend for the extension – PayPal Payments Advanced. You can have the customer stay on your site or redirect to paypal page to pay. You may also need a SSL certificate for your site (if you stay on your page and don’t redirect to paypal)
You have to sign up for a PayPal Advanced account….you also have several settings on PayPal Manager side that needs to be set correctly…
I found this WooCommerce Module. You are able to authorize only and capture later if you like. It looks as if it works very well. See here http://www.sellxed.com/shop/en/wordpress-woocommerce-paypal-zahlungs-plugin.html