*/ public static function build(): array { $available_gateways = self::available_gateways(); $block_methods = self::active_block_payment_methods(); $checkout_page = CheckoutPageInspector::inspect(); $portal_compatibility = CheckoutPortalCompatibilityGate::build(); $unsupported = []; foreach ( $available_gateways as $gateway ) { $id = (string) ( $gateway['id'] ?? '' ); if ( '' !== $id && ! in_array( $id, $block_methods, true ) ) { $unsupported[] = $gateway; } } return [ 'storeApiAvailable' => CheckoutStoreApiClient::is_available(), 'blocksPaymentRegistryAvailable' => class_exists( '\Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry' ), 'checkoutPage' => $checkout_page, 'checkoutPageStatus' => $checkout_page['status'] ?? CheckoutPageInspector::STATUS_UNKNOWN, 'canUseReactPortal' => CheckoutPageInspector::STATUS_BLOCK_CHECKOUT === ( $checkout_page['status'] ?? '' ) && ! empty( $portal_compatibility['canUsePortal'] ), 'portalCapability' => (string) ( $portal_compatibility['capability'] ?? 'native_woo_fallback' ), 'portalFallbackReason' => (string) ( $portal_compatibility['reason'] ?? '' ), 'portalCompatibility' => $portal_compatibility, 'availableGateways' => $available_gateways, 'activeBlockPaymentMethods' => $block_methods, 'possiblyUnsupportedGateways' => $unsupported, ]; } /** * @return array */ private static function available_gateways(): array { if ( ! function_exists( 'WC' ) || ! WC()->payment_gateways() ) { return []; } $gateways = []; foreach ( WC()->payment_gateways()->get_available_payment_gateways() as $gateway ) { if ( ! is_object( $gateway ) || empty( $gateway->id ) ) { continue; } $title = (string) ( $gateway->title ?? '' ); if ( '' === $title && isset( $gateway->method_title ) ) { $title = (string) $gateway->method_title; } $gateways[] = [ 'id' => (string) $gateway->id, 'title' => wp_strip_all_tags( '' !== $title ? $title : (string) $gateway->id ), ]; } return $gateways; } /** * @return array */ private static function active_block_payment_methods(): array { return CheckoutPaymentMethodContextResolver::active_block_payment_method_ids(); } }