133 lines
4.4 KiB
PHP
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>';
|
|
}
|
|
}
|
|
}
|