跳到主要内容

修改V2Board与Karing实现互通

物料

方案A 通过咒语绑定karing

视频案例

  • 咒语: v2board
  • 机场连接页: http://v2board.local/karing-connect.html
  • 演示:

思路

  • 先叠个甲: 本人对v2board不熟悉, 非前端, 仅按个人思路做的案例.
    • 如果有更好的方法, 麻烦不吝啬赐教, 提交connect issue 或联系本人@elon
  • 首先,karing APP进入一个中间页 karing-connect.html
    • 设置cookie karing=connect 作为karing连接入口的标记
    • 跳转至 /#/login
  • 然后, 进入v2board前台页面, 载入自定义js文件 custom.js
    • 1 判断是否正在karing webview容器中, 并且存在cookie标记
    • 2 判断当前用户是否登录
    • 3 载入对接js文件 karing.js
    • 4 调用后台api /api/v1/user/getSubscribe 获取用户信息和订阅链接
    • 5 调用 _karing 方法导入用户信息
  • 最后, Karing APP 接到信息, 验证并完成机场绑定.

第一步 v2board 系统

custom.js 说明

  • custom会载入一个远程文件 karing.min.js
  • 文件中参数 debug 默认false, 设置为true时:
    • 终端打印日志
    • 不判断 window.karing 对象是否存在, 直接模拟走一遍流程
      • 最终会报错: 导入配置失败.

第二步 harry.karing.app 后台

方法1 快捷设置咒语

  • 进入harry后台, 机场列表, 点击设置咒语按钮.
    • button
  • 设置咒语和连接url
    • setting

方法2 修改配置文件 base.json

  • connect 字段
  • 咒语 spells 字段, 推荐使用机场名称.
{
"pid": 123456,
...

"connet": "https://your-domain/karing-connect.html",
"spells": [
'急速云',
'RapidNetwork',
],
...
}

最后 测试绑定

  • Karing APP -> 设置 -> ISP/机场绑定 -> 填入咒语 -> 登录v2board -> 完成绑定
  • 提醒 如果您已经完成与karing的连接, 比如配置了 base.json 文件, 则以下订阅链接的修改并不是必要的.

  • 通过添加isp信息 karing会为您:

    • 设置页展示机场信息(入口)
    • 订阅服务到期提醒

修改代码

  • karing支持clash、clash.meta、v2ray、shadowsocks等订阅格式

    • 这里偷懒, 仅修改ClientController.php一个文件
  • 文件:

    • app/Http/Controllers/Client/ClientController.php
  • 在调用handle并die之前添加三行isp-开头的信息

app/Http/Controllers/Client/ClientController.php
class ClientController extends Controller
{
public function subscribe(Request $request)
{
// ...

$userService = new UserService();
if ($userService->isAvailable($user)) {
$serverService = new ServerService();
$servers = $serverService->getAvailableServers($user);
$this->setSubscribeInfoToServers($servers, $user);

// for karing
$appName = config('v2board.app_name', 'V2Board');
$appURL = config('v2board.app_url');
header("isp-name: " . urlencode($appName));
header("isp-url: " . urlencode($appURL . '/#/plan'));
header("isp-faq: " . urlencode($appURL . '/#/knowledge'));

// ...

die($class->handle());
}
}

  • 提示:
    • 代码修改保存之后, 请reload php-fpm进程, 防止opcode缓存影响调试
    • 一定要通过调试工具检查一下 isp-url 和 isp-faq 是您设置的地址
    • 如果app_name包含中文, 必须使用urlencode

最终效果

  • 调试信息:

    • debug
  • 设置菜单

    • menu