Files
2026-07-29 22:52:47 +05:00

133 lines
4.4 KiB
PHP

<?php
/**
* Режим отладки: проверка подключения к AI-провайдерам.
*
* @package AI_Proxy_Manager
*/
defined( 'ABSPATH' ) || exit;
/**
* Класс отладочной проверки подключения.
*
* @since 1.0.0
*/
class AIPMSP_Debug {
/**
* Конструктор: регистрирует вывод admin_notices.
*
* @since 1.0.0
*/
public function __construct() {
add_action( 'admin_notices', array( $this, 'render_notices' ) );
}
/**
* Выводит результат проверки подключения к каждому провайдеру.
*
* @since 1.0.0
*
* @return void
*/
public function render_notices() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
$settings = AIPMSP_Proxy::get_settings();
if ( empty( $settings['debug_enabled'] ) ) {
return;
}
// Показываем отладку только на странице плагина, чтобы не засорять всю админку.
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
if ( $screen && false === strpos( (string) $screen->id, 'aipmsp-settings' ) ) {
return;
}
// Расшифровываем ключи только в память.
$openai_key = AIPMSP_Crypto::decrypt( $settings['keys']['openai'] );
$anthropic_key = AIPMSP_Crypto::decrypt( $settings['keys']['anthropic'] );
$google_key = AIPMSP_Crypto::decrypt( $settings['keys']['google'] );
$providers = array(
'OpenAI' => array(
'slug' => 'openai',
'key' => $openai_key,
'url' => 'https://api.openai.com/v1/models',
'headers' => array( 'Authorization' => 'Bearer ' . $openai_key ),
),
'Anthropic' => array(
'slug' => 'anthropic',
'key' => $anthropic_key,
'url' => 'https://api.anthropic.com/v1/models',
'headers' => array(
'x-api-key' => $anthropic_key,
'anthropic-version' => '2023-06-01',
),
),
'Google' => array(
'slug' => 'google',
'key' => $google_key,
'url' => 'https://generativelanguage.googleapis.com/v1beta/models',
'headers' => array( 'x-goog-api-key' => $google_key ),
),
);
echo '<div class="notice notice-info"><p><strong>'
. esc_html__( 'AI Proxy Manager — проверка подключения к AI-провайдерам:', 'ai-proxy-manager' )
. '</strong></p></div>';
foreach ( $providers as $name => $cfg ) {
// Пропускаем провайдера, если его переключатель проверки выключен — без уведомления.
if ( empty( $settings['key_enabled'][ $cfg['slug'] ] ) ) {
continue;
}
// Пропускаем провайдера без ключа.
if ( '' === $cfg['key'] ) {
echo '<div class="notice notice-warning"><pre>';
echo esc_html( $name ) . ":\n";
echo esc_html__( '⏭ Ключ не задан — проверка пропущена', 'ai-proxy-manager' );
echo '</pre></div>';
continue;
}
$response = wp_remote_get(
$cfg['url'],
array(
'timeout' => 20,
'headers' => $cfg['headers'],
)
);
echo '<div class="notice notice-info"><pre>';
echo esc_html( $name ) . ":\n";
if ( is_wp_error( $response ) ) {
echo esc_html__( '❌ ОШИБКА СОЕДИНЕНИЯ (вероятно прокси или сеть):', 'ai-proxy-manager' ) . "\n";
echo esc_html( $response->get_error_message() );
} else {
$code = (int) wp_remote_retrieve_response_code( $response );
echo esc_html__( 'HTTP CODE:', 'ai-proxy-manager' ) . ' ' . esc_html( $code ) . "\n";
if ( 200 === $code ) {
echo esc_html__( '✅ Соединение успешно установлено', 'ai-proxy-manager' );
} elseif ( 401 === $code ) {
echo esc_html__( '❌ Неверный API-ключ', 'ai-proxy-manager' );
} elseif ( 403 === $code ) {
echo esc_html__( '❌ Доступ запрещён (регион или IP заблокирован — проверьте прокси)', 'ai-proxy-manager' );
} elseif ( 429 === $code ) {
echo esc_html__( '⚠️ Превышен лимит запросов (rate limit)', 'ai-proxy-manager' );
} else {
echo esc_html__( '⚠️ Неожиданный код ответа', 'ai-proxy-manager' );
}
}
echo '</pre></div>';
}
}
}