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'


Top ↑

Return Return

(string|WP_Error) a refund ID on success or a WP_Error object


Top ↑

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' ) );

		}

	}

Top ↑

Changelog Changelog

Changelog
Version Description
3.0.0 Introduced.


Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.





Permalink: