WC_Helper::get_subscriptionspublic staticWC 1.0

Get the connected user's subscriptions.

Method of the class: WC_Helper{}

No Hooks.

Returns

``Array

phpcs:ignore``. Squiz.Commenting.FunctionCommentThrowTag.Missing -- As we wrap the throw in a try/catch.

Usage

$result = WC_Helper::get_subscriptions();

WC_Helper::get_subscriptions() code WC 10.6.2

public static function get_subscriptions() {
	$cache_key = '_woocommerce_helper_subscriptions';
	$data      = get_transient( $cache_key );
	if ( false !== $data ) {
		if ( is_array( $data ) ) {
			return $data;
		}
		// Cached data is corrupted, delete and fetch fresh.
		delete_transient( $cache_key );
	}

	try {
		$request_uri = wp_unslash( $_SERVER['REQUEST_URI'] ?? '' ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
		$source      = '';
		if ( false !== stripos( $request_uri, 'wc/v3/marketplace/refresh' ) ) :
			$source = 'refresh-button';
		elseif ( false !== stripos( $request_uri, 'my-subscriptions' ) ) :
			$source = 'my-subscriptions';
		elseif ( false !== stripos( $request_uri, 'plugins.php' ) ) :
			$source = 'plugins';
		elseif ( false !== stripos( $request_uri, 'wc-admin' ) ) :
			$source = 'inbox-notes';
		elseif ( false !== stripos( $request_uri, 'admin-ajax.php' ) ) :
			$source = 'heartbeat-api';
		elseif ( false !== stripos( $request_uri, 'installer' ) ) :
			$source = 'wccom-site-installer';
		elseif ( defined( 'WP_CLI' ) && WP_CLI ) :
			$source = 'wc-cli';
		endif;

		// Obtain the connected user info.
		$request = WC_Helper_API::get(
			'subscriptions',
			array(
				'authenticated' => true,
				'query_string'  => '' !== $source ? esc_url( '?source=' . $source ) : '',
			)
		);

		if ( is_wp_error( $request ) ) {
			set_transient( $cache_key, array(), 15 * MINUTE_IN_SECONDS );

			throw new Exception( $request->get_error_message(), (int) $request->get_error_data() );
		}

		$code = wp_remote_retrieve_response_code( $request );
		if ( 200 !== $code ) {
			set_transient( $cache_key, array(), 15 * MINUTE_IN_SECONDS );

			throw new Exception( self::get_message_for_response_code( $code ), $code );
		}

		$data = json_decode( wp_remote_retrieve_body( $request ), true );
		if ( ! is_array( $data ) ) {
			set_transient( $cache_key, array(), 15 * MINUTE_IN_SECONDS );

			throw new Exception( __( 'WooCommerce.com API returned an invalid response.', 'woocommerce' ), 422 );
		}

		set_transient( $cache_key, $data, 3 * HOUR_IN_SECONDS );

		// Remove notice after successful API call as it's no longer applicable.
		self::remove_api_error_notice();
		return $data;
	} catch ( Exception $e ) {
		if ( $e->getCode() < 404 ) {
			self::remove_api_error_notice();
		} else {
			// Only show error notice in case there is no proper communication with WCCOM.
			self::log( 'Error getting subscriptions: ' . $e->getMessage(), 'error' );
			self::add_api_error_notice();
		}
	}

	return array();
}