LLMS_Transaction::process_refund( float $amount, string $note = '', string $method = 'manual' )
Process a Refund Called from the admin panel by clicking a refund (manual or gateway) button
Description Description
Parameters Parameters
- $amount
-
(float) (Required) amount to refund
- $note
-
(string) (Optional) note to record in the gateway (if possible) and as an order note
Default value: ''
- $method
-
(string) (Optional) method used to refund, either "manual" (available for all transactions) or "gateway" (where supported)
Default value: 'manual'
Return Return
(string|WP_Error) a refund ID on success or a WP_Error object
Source Source
File: includes/models/model.llms.transaction.php
public function process_refund( $amount, $note = '', $method = 'manual' ) { // ensure the transaction is still eligible for a refund if ( ! $this->can_be_refunded() ) { return new WP_Error( 'error', __( 'The selected transaction is not eligible for a refund.', 'lifterlms' ) ); } $amount = floatval( $amount ); // ensure we can refund the requested amount $refundable = $this->get_refundable_amount(); if ( $amount > $refundable ) { return new WP_Error( 'error', sprintf( __( 'Requested refund amount was %1$s, the maximum possible refund for this transaction is %2$s.', 'lifterlms' ), llms_price( $amount ), llms_price( $refundable ) ) ); } // validate the method & process the refund switch ( $method ) { // we're okay here case 'manual': $refund_id = apply_filters( 'llms_manual_refund_id', uniqid() ); $method_title = __( 'manual refund', 'lifterlms' ); break; // check gateway to ensure it's valid and supports refunds case 'gateway': $gateway = $this->get_gateway(); if ( is_wp_error( $gateway ) ) { return new WP_Error( 'error', sprintf( __( 'Selected gateway "%s" is inactive or invalid.', 'lifterlms' ), $method ) ); } else { if ( ! $gateway->supports( 'refunds' ) ) { return new WP_Error( 'error', sprintf( __( 'Selected gateway "%s" does not support refunds.', 'lifterlms' ), $gateway->get_admin_title() ) ); } else { $refund_id = $gateway->process_refund( $this, $amount, $note ); $method_title = $gateway->get_admin_title(); } } break; default: /** * Allow custom refund methods for fancy developer folk */ $refund_id = apply_filters( 'llms_' . $method . '_refund_id', false, $method, $this, $amount, $note ); $method_title = apply_filters( 'llms_' . $method . '_title', $method ); } // output an error if ( is_wp_error( $refund_id ) ) { return $refund_id; } // End if(). elseif ( is_string( $refund_id ) ) { // filter the note before recording it $orig_note = apply_filters( 'llms_transaction_refund_note', $note, $this, $amount, $method ); $order = $this->get_order(); $note = sprintf( __( 'Refunded %1$s for transaction #%2$d via %3$s [Refund ID: %4$s]', 'lifterlms' ), strip_tags( llms_price( $amount ) ), $this->get( 'id' ), $method_title, $refund_id ); if ( $orig_note ) { $note .= "\r\n"; $note .= __( 'Refund Notes: ', 'lifterlms' ); $note .= "\r\n"; $note .= $orig_note; } // record the note $order->add_note( $note, true ); // update the refunded amount $new_amount = ! $this->get( 'refund_amount' ) ? $amount : $this->get( 'refund_amount' ) + $amount; $this->set( 'refund_amount', $new_amount ); // record refund metadata $refund_data = $this->get_array( 'refund_data' ); $refund_data[ $refund_id ] = apply_filters( 'llms_transaction_refund_data', array( 'amount' => $amount, 'date' => current_time( 'mysql' ), 'id' => $refund_id, 'method' => $method, ), $this, $amount, $method ); $this->set( 'refund_data', $refund_data ); // update status $this->set( 'status', 'llms-txn-refunded' ); return $refund_id; } // wut happened? else { return new WP_Error( 'error', __( 'An unknown error occurred during refund processing', 'lifterlms' ) ); } }
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
3.0.0 | Introduced. |
User Contributed Notes User Contributed Notes
Permalink: