fuc-new/src/Services/Subscribe/V2Ray.php
2025-11-29 18:40:35 +08:00

92 lines
3.9 KiB
PHP
Executable File

<?php
declare(strict_types=1);
namespace App\Services\Subscribe;
use App\Models\Config;
use App\Services\Subscribe;
use function base64_encode;
use function json_decode;
use function json_encode;
use const PHP_EOL;
final class V2Ray extends Base
{
public function getContent($user): string
{
$links = '';
//判断是否开启V2Ray订阅
if (! Config::obtain('enable_v2_sub')) {
return $links;
}
$nodes_raw = Subscribe::getUserNodes($user);
foreach ($nodes_raw as $node_raw) {
$node_custom_config = json_decode($node_raw->custom_config, true);
if ((int) $node_raw->sort === 11) {
$v2_port = $node_custom_config['offset_port_user'] ?? ($node_custom_config['offset_port_node'] ?? 443);
$security = $node_custom_config['security'] ?? 'none';
$network = $node_custom_config['network'] ?? '';
$header = $node_custom_config['header'] ?? ['type' => 'none'];
$header_type = $header['type'] ?? '';
$host = $node_custom_config['header']['request']['headers']['Host'][0] ?? $node_custom_config['host'] ?? '';
$path = $node_custom_config['header']['request']['path'][0] ?? $node_custom_config['path'] ?? '/';
$v2rayn_array = [
'v' => '2',
'ps' => $node_raw->name,
'add' => $node_raw->server,
'port' => $v2_port,
'id' => $user->uuid,
'aid' => 0,
'net' => $network,
'type' => $header_type,
'host' => $host,
'path' => $path,
'tls' => $security,
];
$links .= 'vmess://' . base64_encode(json_encode($v2rayn_array)) . PHP_EOL;
} else if ((int) $node_raw->sort === 0) {
// case 0:
// $node = [
// 'protocol' => 'shadowsocks',
// 'settings' => [
// 'address' => $node_raw->server,
// 'port' => (int) $user->port,
// 'method' => $user->method,
// 'password' => $user->passwd,
// ],
// 'tag' => $node_raw->name,
// ];
//
// break;
$ss_array = [
// 'v' => '2',
'ps' => $node_raw->name,
'add' => $node_raw->server,
'port' => (int) $node_custom_config['offset_port_user'],
'encryption' => $user->method,
'password' => $user->passwd,
// 'id' => $user->uuid,
// 'aid' => 0,
// 'net' => $network,
// 'type' => $header_type,
// 'host' => $host,
// 'path' => $path,
// 'tls' => $security,
];
$links .= 'shadowsocks://' . base64_encode(json_encode($ss_array)) . PHP_EOL;
}
}
return $links;
}
}