├── Plugin └── V2raySocks │ ├── config.php │ ├── templates │ ├── error.tpl │ ├── static │ │ ├── js │ │ │ ├── clipboard.min.js │ │ │ ├── html5-qrcode.js │ │ │ ├── script.js │ │ │ ├── layui.js │ │ │ └── qrcode.js │ │ ├── skin │ │ │ └── default │ │ │ │ ├── icon.png │ │ │ │ ├── icon-ext.png │ │ │ │ ├── loading-0.gif │ │ │ │ ├── loading-1.gif │ │ │ │ ├── loading-2.gif │ │ │ │ └── layer.css │ │ ├── css │ │ │ ├── layer.css │ │ │ ├── style.css │ │ │ └── layui.css │ │ ├── mobile │ │ │ ├── layer.js │ │ │ └── need │ │ │ │ └── layer.css │ │ ├── layer.css │ │ └── layer.js │ └── details.tpl │ ├── lib │ └── functions.php │ ├── osubscribe.php │ ├── subscribe.php │ ├── lang │ ├── chinese.php │ └── english.php │ ├── api.php │ ├── hooks.php │ └── V2raySocks.php ├── Sql └── MyV2Ray.sql └── README.md /Plugin/V2raySocks/config.php: -------------------------------------------------------------------------------- 1 | 2 |
{$usefulErrorHelper}
3 | -------------------------------------------------------------------------------- /Plugin/V2raySocks/templates/static/js/clipboard.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JerryChii/V2raySocks/HEAD/Plugin/V2raySocks/templates/static/js/clipboard.min.js -------------------------------------------------------------------------------- /Plugin/V2raySocks/templates/static/skin/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JerryChii/V2raySocks/HEAD/Plugin/V2raySocks/templates/static/skin/default/icon.png -------------------------------------------------------------------------------- /Plugin/V2raySocks/templates/static/skin/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JerryChii/V2raySocks/HEAD/Plugin/V2raySocks/templates/static/skin/default/icon-ext.png -------------------------------------------------------------------------------- /Plugin/V2raySocks/templates/static/skin/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JerryChii/V2raySocks/HEAD/Plugin/V2raySocks/templates/static/skin/default/loading-0.gif -------------------------------------------------------------------------------- /Plugin/V2raySocks/templates/static/skin/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JerryChii/V2raySocks/HEAD/Plugin/V2raySocks/templates/static/skin/default/loading-1.gif -------------------------------------------------------------------------------- /Plugin/V2raySocks/templates/static/skin/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JerryChii/V2raySocks/HEAD/Plugin/V2raySocks/templates/static/skin/default/loading-2.gif -------------------------------------------------------------------------------- /Plugin/V2raySocks/lib/functions.php: -------------------------------------------------------------------------------- 1 | mysql_real_escape_string($_SESSION[$field]))); 30 | if($data = mysql_fetch_row($sqlresult)){ 31 | return reset($data); 32 | } 33 | return false; 34 | }catch(Exception $e){ 35 | logModuleCall('V2raySocks', 'V2raySocks_MultiLanguageSupport', $field, $e->getMessage(), $e->getTraceAsString()); 36 | return false; 37 | } 38 | } 39 | 40 | function V2raySocks_get_lang($var){ 41 | global $_VLANG; 42 | return isset($_VLANG[$var]) ? $_VLANG[$var] : $var . '(Missing Language)' ; 43 | } 44 | -------------------------------------------------------------------------------- /Plugin/V2raySocks/osubscribe.php: -------------------------------------------------------------------------------- 1 | where('id', $sid)->where('username', $token)->first(); 8 | if (empty($service)){ 9 | die('Unisset or Uncorrect Token'); 10 | } 11 | if ($service->domainstatus != 'Active' ) { 12 | die('Not Active'); 13 | } 14 | $package = Capsule::table('tblproducts')->where('id', $service->packageid)->first(); 15 | $server = Capsule::table('tblservers')->where('id', $service->server)->first(); 16 | 17 | $dbhost = $server->ipaddress ? $server->ipaddress : 'localhost'; 18 | $dbname = $package->configoption1; 19 | $dbuser = $server->username; 20 | $dbpass = decrypt($server->password); 21 | $db = new PDO('mysql:host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass); 22 | $usage = $db->prepare('SELECT * FROM `user` WHERE `sid` = :sid'); 23 | $usage->bindValue(':sid', $sid); 24 | $usage->execute(); 25 | $usage = $usage->fetch(); 26 | $servers = $package->configoption4; 27 | $noder = explode("\n",$servers); 28 | $results = ""; 29 | foreach($noder as $nodee){ 30 | $nodee = explode('|', $nodee); 31 | $results .= make_vmess($nodee,$usage['uuid']) . PHP_EOL; 32 | } 33 | echo(str_replace('=','',base64_encode($results))); 34 | }else{ 35 | die('Invaild'); 36 | } 37 | 38 | function make_vmess($nodee,$uuid){ 39 | $atr1 = array( 40 | "add" => $nodee[1], 41 | "host"=> $nodee[5], 42 | "id" => $uuid, 43 | "net" => $nodee[7], 44 | "path"=> $nodee[6], 45 | "port"=> $nodee[2], 46 | "ps" => $nodee[0], 47 | "tls" => $nodee[4], 48 | "v" => 2 49 | ); 50 | if ($nodee[9]){ 51 | $atr1['aid'] = intval($nodee[9]); 52 | }else{ 53 | $atr1['aid'] = 64; 54 | } 55 | if($nodee[3]){ 56 | $atr1['type'] = $nodee[3]; 57 | }else{ 58 | $atr1['type'] = "none"; 59 | } 60 | return "vmess://".base64_encode(json_encode($atr1)); 61 | } -------------------------------------------------------------------------------- /Plugin/V2raySocks/subscribe.php: -------------------------------------------------------------------------------- 1 | where('id', $sid)->where('username', $token)->first(); 8 | if (empty($service)){ 9 | die('Unisset or Uncorrect Token'); 10 | } 11 | if ($service->domainstatus != 'Active' ) { 12 | die('Not Active'); 13 | } 14 | $package = Capsule::table('tblproducts')->where('id', $service->packageid)->first(); 15 | $server = Capsule::table('tblservers')->where('id', $service->server)->first(); 16 | 17 | $dbhost = $server->ipaddress ? $server->ipaddress : 'localhost'; 18 | $dbname = $package->configoption1; 19 | $dbuser = $server->username; 20 | $dbpass = decrypt($server->password); 21 | $db = new PDO('mysql:host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass); 22 | $usage = $db->prepare('SELECT * FROM `user` WHERE `sid` = :sid'); 23 | $usage->bindValue(':sid', $sid); 24 | $usage->execute(); 25 | $usage = $usage->fetch(); 26 | $servers = $package->configoption4; 27 | $noder = explode("\n",$servers); 28 | $results = ""; 29 | foreach($noder as $nodee){ 30 | $nodee = explode('|', $nodee); 31 | $results .= make_vmess($nodee,$usage['uuid']) . PHP_EOL; 32 | } 33 | echo(str_replace('=','',base64_encode($results))); 34 | }else{ 35 | die('Invaild'); 36 | } 37 | 38 | function make_vmess($nodee,$uuid){ 39 | $atr2 = array( 40 | "add" => $nodee[1], 41 | "file"=> $nodee[5], 42 | "id" => $uuid, 43 | "net" => $nodee[7], 44 | "host"=> $nodee[6], 45 | "port"=> $nodee[2], 46 | "ps" => $nodee[0], 47 | "tls" => $nodee[4], 48 | "v" => 2 49 | ); 50 | if ($nodee[9]){ 51 | $atr2['aid'] = intval($nodee[9]); 52 | }else{ 53 | $atr2['aid'] = 64; 54 | } 55 | if($nodee[3]){ 56 | $atr2['type'] = $nodee[3]; 57 | }else{ 58 | $atr2['type'] = "none"; 59 | } 60 | return "vmess://".base64_encode(json_encode($atr2)); 61 | } -------------------------------------------------------------------------------- /Sql/MyV2Ray.sql: -------------------------------------------------------------------------------- 1 | -- phpMyAdmin SQL Dump 2 | -- version 4.4.15.6 3 | -- http://www.phpmyadmin.net 4 | -- 5 | -- Host: localhost 6 | -- Generation Time: 2018-05-22 14:14:35 7 | -- 服务器版本: 5.5.56-log 8 | -- PHP Version: 7.0.19 9 | 10 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 11 | SET time_zone = "+00:00"; 12 | 13 | 14 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 15 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 16 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 17 | /*!40101 SET NAMES utf8mb4 */; 18 | 19 | -- 20 | -- Database: `MyV2Ray` 21 | -- 22 | 23 | -- -------------------------------------------------------- 24 | 25 | -- 26 | -- 表的结构 `user` 27 | -- 28 | 29 | CREATE TABLE IF NOT EXISTS `user` ( 30 | `id` int(11) NOT NULL, 31 | `uuid` varchar(36) NOT NULL, 32 | `t` int(11) NOT NULL DEFAULT '0', 33 | `u` bigint(20) NOT NULL, 34 | `d` bigint(20) NOT NULL, 35 | `transfer_enable` bigint(20) NOT NULL, 36 | `enable` tinyint(4) NOT NULL DEFAULT '1', 37 | `created_at` int(10) NOT NULL, 38 | `updated_at` int(10) NOT NULL, 39 | `need_reset` tinyint(1) NOT NULL DEFAULT '1', 40 | `sid` int(11) NOT NULL 41 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 42 | 43 | -- -------------------------------------------------------- 44 | 45 | -- 46 | -- 表的结构 `user_usage` 47 | -- 48 | 49 | CREATE TABLE IF NOT EXISTS `user_usage` ( 50 | `sid` int(11) NOT NULL, 51 | `date` int(11) NOT NULL, 52 | `upload` text NOT NULL, 53 | `download` text NOT NULL, 54 | `tupload` text NOT NULL, 55 | `tdownload` text NOT NULL 56 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; 57 | 58 | -- 59 | -- Indexes for dumped tables 60 | -- 61 | 62 | -- 63 | -- Indexes for table `user` 64 | -- 65 | ALTER TABLE `user` 66 | ADD PRIMARY KEY (`id`); 67 | 68 | -- 69 | -- AUTO_INCREMENT for dumped tables 70 | -- 71 | 72 | -- 73 | -- AUTO_INCREMENT for table `user` 74 | -- 75 | ALTER TABLE `user` 76 | MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 77 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 78 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 79 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 80 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # V2RaySocks 2 | ## 一个售卖v2Ray的whmcs插件 3 | * 当前版本 0.8.2 4 | 5 | ## 支持的功能: 6 | * 流量图表(已修复自动任务过于频繁导致记录过多的问题(目前记录频率:3小时一次(已经改为跟随WHMCS系统的自动任务进行,不需要手动设置))) 7 | * 流量重置(每月开始,每月底,由结算日计算(已经改为跟随WHMCS系统的自动任务进行,不需要手动设置)) 8 | * 公告信息(已修复HTML问题) 9 | * VMESS 二维码(已更新多端兼容) 10 | * VMESS URL复制功能 11 | * VMESS 订阅功能 12 | * 随机UUID,重置UUID,复制UUID 13 | * tls,伪装类型,Host,传输协议,路径,流量倍率,额外ID可在服务器设置中设置(不支持则留空) 14 | * 线路列表格式修改,请还是注意修正!!!! 15 | * 添加了API支持(V0.2) 16 | * 修正了部分情况下API异常 17 | * 优化了流量图表的显示(Tab显示) 18 | 19 | ## API 20 | * API的校验密码可在api.php中修改 21 | * API返回数据格式: 22 | ``` 23 | { 24 | "result" : "success", 25 | "email" : "123@123.moe", 26 | "name" : "1234", 27 | "package": [ 28 | "0" : [ 29 | "package": "40g套餐", 30 | "uuid" : "09FD9959-5F82-41F7-967F-87AFDF31AFF6", 31 | "usage" : "1000", 32 | "traffic": "40960000000", 33 | "nodes" : [ 34 | "0" : "hk1|127.0.0.1|8300|none|tls|233.233.com|/233|ws|1", 35 | "1" : "hk2|127.0.0.1|8300|none|tls|233.233.com|/233|ws|1" 36 | ] 37 | ], 38 | "1" : [ 39 | "package": "100g套餐", 40 | "uuid" : "41DA057F-A3E6-424F-BEEC-38E0D58A6536", 41 | "usage" : "10000", 42 | "traffic": "1099511627776", 43 | "nodes" : [ 44 | "0" : "hk1|127.0.0.1|8300|none|tls|233.233.com|/233|ws|1" 45 | ] 46 | ] 47 | } 48 | ``` 49 | 50 | ## 注意事项 51 | * 已更新自动流量更新功能以及自动重置流量功能。请注意刷新hook以保证模块正常运行! 52 | * 需要更多支持,请开issue或者给我发邮件 53 | 54 | ## 当前适配的Manager版本以及支持的功能 55 | * 版本 Gold - 1.1.2.3 56 | * 拉取V2raySocks的数据库 57 | * 通过数据库信息添加用户 58 | * 通过数据库信息删除用户 59 | * 上传流量至数据库 60 | * 自动关闭超出流量的用户 61 | * 支持流量倍率功能 62 | * UUID重置自动更新 63 | * 支持命令行参数启动 64 | * 支持后台运行 65 | * 支持日志保存 66 | * 检测V2Ray进程并自动重启V2Ray 67 | * 开启时检测V2Ray更新 68 | * 自动检测并安装V2ray 69 | * 获取系统内存状态 70 | * 进程超时状态检测 71 | * 远程状态监控 72 | 73 | ## Manager远程状态监控返回示例 74 | * 访问 127.0.0.1:8888/status 75 | ``` 76 | { 77 | "LoadMin1":"0.00", 78 | "LoadMin5":"0.00", 79 | "LoadMin15":"0.00", 80 | "M2Version":"Gold - V1.1.2.3", 81 | "RX":"7332", 82 | "SelfMemoryUsed":"2", 83 | "Status":"Success", 84 | "SystemMemoryAll":"996", 85 | "SystemMemoryUsed":"684", 86 | "TX":"7444", 87 | "Timestamp":"1531112247", 88 | "Uptime":"93", 89 | "V2RayUsers":"7" 90 | } 91 | ``` 92 | 93 | ## 捐赠 94 | ETH钱包 0xaD8ABb15e4B8B58f5FbEE9CAb42096c1d640C234 95 | 链克钱包 0x4cfa7215324f2cc521beeb35c8a85c9afdbcda7e -------------------------------------------------------------------------------- /Plugin/V2raySocks/templates/static/js/html5-qrcode.js: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------- 2 | // JavaScript-HTML5 QRCode Generator 3 | // 4 | // Copyright (c) 2011 Amanuel Tewolde 5 | // 6 | // Licensed under the MIT license: 7 | // http://www.opensource.org/licenses/mit-license.php 8 | // 9 | //--------------------------------------------------------------------- 10 | 11 | // Generates a QRCode of text provided. 12 | // First QRCode is rendered to a canvas. 13 | // The canvas is then turned to an image PNG 14 | // before being returned as an'+(n.content||"")+"
"),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"':"")+'{$infos|unescape:"html"}
82 || {V2raySocks_get_lang('uuid')} | 108 | 109 | 110 | 111 |
|---|
| {$usage.uuid} 116 | 120 | | 121 | 122 | 123 | 136 |
| {V2raySocks_get_lang('subscribe')} | 144 | 145 | 146 ||
|---|---|
| IOS | 151 |152 | 156 | | 157 | 159 |
| Android/Win | 162 |163 | 167 | | 168 | 170 |
{V2raySocks_get_lang('used')} ({$usage.s_MB_GB})
194 |{V2raySocks_get_lang('upload')} ({$usage.u_MB_GB})
200 |{V2raySocks_get_lang('download')} ({$usage.d_MB_GB})
206 || {V2raySocks_get_lang('name')} | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 |{V2raySocks_get_lang('action')} | 233 |
|---|---|
| {$node[0]} | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 |250 | 254 | 258 | 262 | {$yy = $yy + 1} 263 | | 264 |