wc_refund_payment( WC_Order $order, string $amount, string $reason = '' )
Try to refund the payment for an order via the gateway.
Description Description
Parameters Parameters
- $order
-
(Required) Order instance.
- $amount
-
(Required) Amount to refund.
- $reason
-
(Optional) Refund reason.
Default value: ''
Return Return
(bool|WP_Error)
Source Source
File: includes/wc-order-functions.php
function wc_refund_payment( $order, $amount, $reason = '' ) {
try {
if ( ! is_a( $order, 'WC_Order' ) ) {
throw new Exception( __( 'Invalid order.', 'woocommerce' ) );
}
$gateway_controller = WC_Payment_Gateways::instance();
$all_gateways = $gateway_controller->payment_gateways();
$payment_method = $order->get_payment_method();
$gateway = isset( $all_gateways[ $payment_method ] ) ? $all_gateways[ $payment_method ] : false;
if ( ! $gateway ) {
throw new Exception( __( 'The payment gateway for this order does not exist.', 'woocommerce' ) );
}
if ( ! $gateway->supports( 'refunds' ) ) {
throw new Exception( __( 'The payment gateway for this order does not support automatic refunds.', 'woocommerce' ) );
}
$result = $gateway->process_refund( $order->get_id(), $amount, $reason );
if ( ! $result ) {
throw new Exception( __( 'An error occurred while attempting to create the refund using the payment gateway API.', 'woocommerce' ) );
}
if ( is_wp_error( $result ) ) {
throw new Exception( $result->get_error_message() );
}
return true;
} catch ( Exception $e ) {
return new WP_Error( 'error', $e->getMessage() );
}
}
Changelog Changelog
| Version | Description |
|---|---|
| 3.0.0 | Introduced. |