5

I am creating a Woocommerce shop. The client wants to use the payment plugin "Mollie" to accept iDeal payments (Dutch).

When people order items from the webshop, they should be able to order everything they want without paying. After that, the shop owner should receive an email and check the order.

The shop owner reviews the order by checking the stock of the ordered products. From this point on there should be there scenario's:

  1. Everything is in stock. The package is weighed. Shippingcosts are added. The customer will receive a payment link.

  2. Nothing is in stock. A message should be sent to the customer with an out-of-stock message.

  3. Only part of the order is in stock. The order should be changed in the Woocommerce orders-panel. The remaining order is weighed and packed. The customer will receive a payment link.

When the order is accepted, the customer should receive a payment link with the normal payment methods (including "Mollie" payments).

Is there a way to make this happen? Thanks in advance!

polonium
  • 247
  • 4
  • 17
  • 1
    Mollie allows you to create payments and/or payment links easily through their API. Paying after the order has been completed is not included in the Mollie Woocommerce package though. So: sure, but it does require some custom coding. – Vernon May 02 '17 at 07:37
  • have you checked this plugin https://wordpress.org/plugins/order-approval-woocommerce/ – Saran Apr 19 '23 at 12:14

2 Answers2

6

I know this is a year after, but that could help someone else :-).
My customer would like a similar process, shop customers would not be able to pay online until the shop owner confirm order.

Solution:

  1. We used Cash on Delivery for offline payment, renamed to "Register order".
  2. We used Stripe for credit card payment for online payment.
  3. We showed Cash on Delivery for checkout page(checkout endpoint) and Stripe for order-pay page(my-accounts endpoint), more on endpoints in woocommerce docs.
  4. And voila.

We used this filter to switch payment gateways between the 2 endpoints.

function my_switch_gateways_by_context($available_gateways) {
  global $woocommerce;

  $endpoint = $woocommerce->query->get_current_endpoint();

  if ($endpoint == 'order-pay') {
    unset($available_gateways['cod']);
  } else {
    unset($available_gateways['stripe']);
  }

  return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'my_switch_gateways_by_context');

I hope this helps.

JBoulhous
  • 844
  • 7
  • 11
-1

For as far as I know there is no easy way to do this. The normal payment flow would be to let the consumer pay immediately when they place the order. If some products are out of stock, you could simply create a (partial) refund. This is supported in Mollie's WooCommerce plugin.

Daan
  • 327
  • 3
  • 10