OwlCyberSecurity - MANAGER
Edit File: PaymentUtils.php
<?php declare(strict_types=1); namespace Automattic\WooCommerce\StoreApi\Utilities; /** * PaymentUtils * * Utility class for payment methods. */ class PaymentUtils { /** * Callback for woocommerce_payment_methods_list_item filter to add token id * to the generated list. * * @param array $list_item The current list item for the saved payment method. * @param \WC_Token $token The token for the current list item. * * @return array The list item with the token id added. */ public static function include_token_id_with_payment_methods( $list_item, $token ) { $list_item['tokenId'] = $token->get_id(); $brand = ! empty( $list_item['method']['brand'] ) ? strtolower( $list_item['method']['brand'] ) : ''; if ( ! empty( $brand ) && esc_html__( 'Credit card', 'woocommerce' ) !== $brand ) { $list_item['method']['brand'] = wc_get_credit_card_type_label( $brand ); } return $list_item; } /** * Get enabled payment gateways. * * @return array */ public static function get_enabled_payment_gateways() { $payment_gateways = WC()->payment_gateways->payment_gateways(); return array_filter( $payment_gateways, function ( $payment_gateway ) { return 'yes' === $payment_gateway->enabled; } ); } /** * Returns enabled saved payment methods for a customer and the default method if there are multiple. * * @return array */ public static function get_saved_payment_methods() { if ( ! is_user_logged_in() ) { return; } add_filter( 'woocommerce_payment_methods_list_item', [ self::class, 'include_token_id_with_payment_methods' ], 10, 2 ); $enabled_payment_gateways = self::get_enabled_payment_gateways(); $saved_payment_methods = wc_get_customer_saved_methods_list( get_current_user_id() ); $payment_methods = [ 'enabled' => [], 'default' => null, ]; // Filter out payment methods that are not enabled. foreach ( $saved_payment_methods as $payment_method_group => $saved_payment_methods ) { $payment_methods['enabled'][ $payment_method_group ] = array_values( array_filter( $saved_payment_methods, function ( $saved_payment_method ) use ( $enabled_payment_gateways, &$payment_methods ) { if ( true === $saved_payment_method['is_default'] && null === $payment_methods['default'] ) { $payment_methods['default'] = $saved_payment_method; } return in_array( $saved_payment_method['method']['gateway'], array_keys( $enabled_payment_gateways ), true ); } ) ); } remove_filter( 'woocommerce_payment_methods_list_item', [ self::class, 'include_token_id_with_payment_methods' ], 10, 2 ); return $payment_methods; } /** * Returns the default payment method for a customer. * * @return string */ public static function get_default_payment_method() { $saved_payment_methods = self::get_saved_payment_methods(); // A saved payment method exists, set as default. if ( $saved_payment_methods && ! empty( $saved_payment_methods['default'] ) ) { return $saved_payment_methods['default']['method']['gateway'] ?? ''; } $chosen_payment_method = WC()->session->get( 'chosen_payment_method' ); // If payment method is already stored in session, use it. if ( $chosen_payment_method ) { return $chosen_payment_method; } // If no saved payment method exists, use the first enabled payment method. $enabled_payment_gateways = self::get_enabled_payment_gateways(); $first_key = array_key_first( $enabled_payment_gateways ); $first_payment_method = $enabled_payment_gateways[ $first_key ]; return $first_payment_method->id ?? ''; } }