When a product is sold by weight, the final price is not known at checkout. A customer orders around 500g of steak, the butcher cuts 465g, and the order should cost what the scales say. Charging the estimate and refunding the difference is slow and costs fees. The cleaner approach is to authorise the payment at checkout and capture the exact amount after the order is weighed. We use this flow on our WooCommerce builds for butchers connected to Wedderburn scales, and this post explains how it works and how to set it up.
The problem with charging the estimate
If you charge the estimated total at checkout, one of three things happens after weighing:
- The cut is lighter than estimated, so you owe the customer a refund. Refunds cost fees and take days to appear on the customer’s statement.
- The cut is heavier than estimated, and there is no easy way to charge the difference.
- The weights happen to match, which is rare with hand-cut products.
Authorise and capture avoids all three cases. The customer is charged once, for the exact weighed amount.
How authorise and capture works
The flow has four steps:
- At checkout, the gateway authorises the estimated total plus a buffer (20 percent is a common default). The bank places a hold on the customer’s card. Nothing is charged yet.
- The store weighs and packs the order. On our POS-connected builds, the final weighed amounts come back from the scales automatically.
- The gateway captures the exact final amount, which can only lower than the authorised hold.
- The remainder of the hold is released back to the customer automatically.
You can try the numbers below. Change the buffer and the weighed result to see what is authorised, captured and released:
Interactive: authorise, weigh, capture
Choosing the buffer
The buffer covers products that weigh in above the estimate. On our builds it is a setting in the WooCommerce admin, and 20 percent is the usual starting point. A butcher selling hand-cut portions needs more buffer than a store selling pre-packed items with small variance. If captures regularly come in close to the authorised limit, increase it.
It is also worth telling the customer what is happening. A short line at checkout, for example “a temporary hold of $60.00 will be placed on your card and you will only be charged for the exact weighed amount”, answers the question before it is asked.

What happens if the final total is above the hold
A gateway can only capture up to the authorised amount. If the weighed total comes in above the hold, there are three options:
- Capture the authorised amount and adjust the order so the totals match what was actually charged. The store wears a small difference.
- Contact the customer for a separate payment on the difference. Reasonable for large gaps, annoying for small ones.
- Increase the buffer so it does not happen again. This is usually the right fix.
Gateway support in WooCommerce
Most major gateways support authorise and capture, but the setting is named differently in each:
- WooPayments and Stripe: turn off automatic capture (often called “capture later” or “manual capture”). Captures can then be triggered from the order screen or by code.
- Tyro: supported through our EUX Tyro gateway for WooCommerce, which we built with this workflow in mind.
- PayPal: authorisation is supported but hold behaviour differs, so test before relying on it.
One important limit applies everywhere: authorisations expire. Most card holds are reliable for about 7 days. If your fulfilment can take longer, capture sooner or re-authorise.
To trigger the capture from code once the final weight is in:
// Example: capture a Stripe/WooPayments order after the final total is set.
// $order already has its line items updated to the weighed amounts.
$order->calculate_totals();
$gateway = wc_get_payment_gateway_by_order( $order );
if ( $gateway && method_exists( $gateway, 'capture_charge' ) ) {
$gateway->capture_charge( $order );
$order->add_order_note( 'Captured final weighed amount: ' . $order->get_total() );
}
The exact method name depends on the gateway. On our production builds the capture runs automatically when the POS sends the final weighed order back to WooCommerce, so staff never trigger it by hand.
Comparing the three settlement methods
Interactive: compare settlement methods
How this connects to the POS
The missing piece in most tutorials is where the final weight comes from. On our Wedderburn builds, the order is weighed and packed at the store, the Atria system sends the final amounts back to WooCommerce, the order totals update, and the capture runs for the exact amount. Staff do not touch the website at any point. We cover the full integration in our post on connecting Wedderburn Atria to WooCommerce, and the selling side in selling meat online by weight.
FAQ
Does the customer see the hold on their card?
Yes, it appears as a pending transaction for the authorised amount. Once you capture, the pending amount is replaced by the final charge and the difference disappears. Telling customers about the hold at checkout prevents most questions.
How long can we wait before capturing?
Capture as soon as the order is packed. Holds are generally reliable for about 7 days, but same-day or next-day capture is the normal pattern for fresh food.
Does this work for click and collect?
Yes, and it is a common combination: the order is authorised online, weighed when packed, captured for the final amount, and the customer collects it already paid.
Need this on your store?
We have built this flow end to end for Australian butchers and fresh food retailers: gateway configuration, buffer settings, POS integration and automatic capture. EUX is a WooCommerce Pro Partner, one of only three in Australia. Talk to us if you would like it on your store.