Skip to content

网页 JS SDK

T3 网络验证网页 JavaScript SDK,使用 Web Crypto API 实现 RSA 加密,可直接在浏览器中运行。

适用场景

  • 网页应用 / H5 页面
  • Electron 渲染进程
  • 浏览器插件

无额外依赖

SDK 使用浏览器内置 Web Crypto API 和 BigInt,不依赖任何库

浏览器兼容性

需要支持 Web Crypto API 和 BigInt 的现代浏览器(Chrome 67+, Firefox 68+, Safari 14+, Edge 79+)。

初始化

方式一:Base64 自定义编码集

javascript
const verify = new T3Verify();
verify.init({
    loginCode: '你的单码登录调用码',
    noticeCode: '你的公告调用码',
    versionCode: '你的版本号调用码',
    heartbeatCode: '你的心跳调用码',
    appkey: '你的程序APPKEY',
    base64Charset: '你的Base64自定义编码集',
    encodeType: 'base64',
});

方式二:RSA 算法 + HEX 编码 推荐

javascript
const verify = new T3Verify();
verify.init({
    loginCode: '你的单码登录调用码',
    noticeCode: '你的公告调用码',
    versionCode: '你的版本号调用码',
    heartbeatCode: '你的心跳调用码',
    appkey: '你的程序APPKEY',
    rsaPublicKey: `-----BEGIN PUBLIC KEY-----
你的RSA公钥
-----END PUBLIC KEY-----`,
    encodeType: 'rsa',
});

后台配置

使用 SDK 前,请先完成 后台快速配置。您也可以在后台「SDK 下载与注入」页面一键自动配置并下载已注入配置信息的 SDK,无需手动填写。

推荐调用顺序

API 方法参考

异步调用

所有 API 方法均为异步,需使用 await 调用。

获取机器码

javascript
const machineCode = getMachineCode();

提示

网页端机器码基于浏览器指纹生成,精度不如原生应用。


获取程序公告 getNotice() async

javascript
const result = await verify.getNotice();
if (result.success) {
    console.log(`公告: ${result.notice}`);
} else {
    console.log(`失败: ${result.error}`);
}

获取最新版本号 getLatestVersion() async

javascript
const result = await verify.getLatestVersion();
if (result.success) {
    console.log(`最新版本: ${result.version}`);
} else {
    console.log(`失败: ${result.error}`);
}

单码卡密登录 login(kami, imei) async

javascript
const result = await verify.login(card, machineCode);
if (result.success) {
    console.log(`到期时间: ${result.end_time}`);
    const statecode = result.statecode;
} else {
    console.log(`登录失败: ${result.error}`);
}

单码心跳验证 heartbeat(kami, statecode) async

javascript
const result = await verify.heartbeat(card, statecode);
if (result.success) {
    console.log('心跳验证成功');
} else {
    console.log(`心跳失败: ${result.error}`);
}

检查更新 checkUpdate(ver) async

javascript
const result = await verify.checkUpdate('1000');
if (result.success) {
    if (result.hasUpdate) {
        console.log(`最新版本: ${result.ver}`);
        console.log(`更新公告: ${result.uplog || ''}`);
        console.log(`下载地址: ${result.upurl || ''}`);
    }
}

查询卡密信息 queryKami(kami) async

javascript
const result = await verify.queryKami(card);
if (result.success) {
    console.log(`到期时间: ${result.end_time}`);
    console.log(`剩余时间: ${result.available}秒`);
}

用户注册 userRegister(user, password, email) async

javascript
const result = await verify.userRegister('username', 'password', 'email@example.com');
if (result.success) {
    console.log('注册成功');
}

用户登录 userLogin(user, password, imei) async

javascript
const result = await verify.userLogin('username', 'password', machineCode);
if (result.success) {
    console.log(`到期时间: ${result.end_time}`);
    const userStateCode = result.statecode;
}

用户心跳验证 userHeartbeat(user, password, statecode) async

javascript
const result = await verify.userHeartbeat('username', 'password', userStateCode);

用户充值 recharge(user, card) async

javascript
const result = await verify.recharge('username', 'recharge_card');

用户绑定QQ bindQQ(user, password, openid, accessToken) async

javascript
const result = await verify.bindQQ('username', 'password', 'openid', 'access_token');

用户QQ登录 qqLogin(openid, accessToken) async

javascript
const result = await verify.qqLogin('openid', 'access_token');

解绑设备 unbindKami / unbindUser async

javascript
// 单码解绑
const result = await verify.unbindKami(card, machineCode);
console.log(result.success ? `  ${result.msg}` : `  失败: ${result.error}`);
// 用户解绑
const result2 = await verify.unbindUser('username', 'password', machineCode);
console.log(result2.success ? `  ${result2.msg}` : `  失败: ${result2.error}`);

IP 解绑 ipUnbindKami / ipUnbindUser async

javascript
// 单码 IP 解绑
const result = await verify.ipUnbindKami(card);
console.log(result.success ? `  ${result.msg}` : `  失败: ${result.error}`);
// 用户 IP 解绑
const result2 = await verify.ipUnbindUser('username', 'password');
console.log(result2.success ? `  ${result2.msg}` : `  失败: ${result2.error}`);

获取远程变量 getVariableByKami / getVariableByUser async

javascript
// 通过卡密获取
const result = await verify.getVariableByKami(card, '变量ID', '变量名称');
if (result.success) console.log(`变量值: ${result.value}`);
else console.log(`失败: ${result.error}`);
// 通过用户获取
const result2 = await verify.getVariableByUser('username', 'password', '变量ID', '变量名称');
if (result2.success) console.log(`变量值: ${result2.value}`);
else console.log(`失败: ${result2.error}`);

修改远程变量 modifyVariableByKami / modifyVariableByUser async

javascript
// 通过卡密修改
const result = await verify.modifyVariableByKami(card, '变量ID', '新内容');
console.log(result.success ? `  ${result.msg}` : `  失败: ${result.error}`);
// 通过用户修改
const result2 = await verify.modifyVariableByUser('username', 'password', '变量ID', '新内容');
console.log(result2.success ? `  ${result2.msg}` : `  失败: ${result2.error}`);

修改核心数据 modifyCoreByKami / modifyCoreByUser async

javascript
// 通过卡密修改
const result = await verify.modifyCoreByKami(card, '核心数据');
console.log(result.success ? `  ${result.msg}` : `  失败: ${result.error}`);
// 通过用户修改
const result2 = await verify.modifyCoreByUser('username', 'password', '核心数据');
console.log(result2.success ? `  ${result2.msg}` : `  失败: ${result2.error}`);

获取核心数据 getCoreByKami / getCoreByUser async

javascript
// 通过卡密获取
const result = await verify.getCoreByKami(card);
if (result.success) console.log('核心数据:', result.core);

// 通过用户获取
const result2 = await verify.getCoreByUser('username', 'password');
if (result2.success) console.log('核心数据:', result2.core);

返回值Object

字段类型说明
successboolean是否成功
corestring核心数据内容
errorstring错误信息

获取在线数量 getOnlineKamiCount / getOnlineUserCount async

javascript
// 获取在线卡密数量
const result = await verify.getOnlineKamiCount();
if (result.success) console.log('在线卡密数:', result.count);

// 获取在线用户数量
const result2 = await verify.getOnlineUserCount();
if (result2.success) console.log('在线用户数:', result2.count);

返回值Object

字段类型说明
successboolean是否成功
countnumber在线数量
errorstring错误信息

获取云文档 getCloudDoc(token) async

javascript
const result = await verify.getCloudDoc('云文档Token');
if (result.success) {
    console.log(`内容: ${result.content}`);
}

应用签名比对 appSign(autograph) async

javascript
const result = await verify.appSign('应用签名');
if (result.success) {
    console.log(`  ${result.msg}`);
    console.log(`  后台签名: ${result.autograph}`);
} else {
    console.log(`  失败: ${result.error}`);
}

用户修改密码 changePassword(user, oldpass, newpass) async

javascript
const result = await verify.changePassword('username', '旧密码', '新密码');

禁用 disableKami / disableUser async

javascript
// 禁用卡密
const result = await verify.disableKami(card);
console.log(result.success ? `  ${result.msg}` : `  失败: ${result.error}`);
// 禁用用户
const result2 = await verify.disableUser('username', 'password');
console.log(result2.success ? `  ${result2.msg}` : `  失败: ${result2.error}`);

用户注销 userCancel(user, password) async

javascript
const result = await verify.userCancel('username', 'password');

完整示例

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>T3验证 - 网页示例</title>
</head>
<body>
    <button onclick="main()">开始验证</button>

    <script src="t3sdk.js"></script>
    <script>
        async function main() {
            const verify = new T3Verify();
            verify.init({
                loginCode: 'F2FA89AD46C050B2',
                noticeCode: '3512425FE75AE73A',
                versionCode: 'F119CF1323743DBC',
                heartbeatCode: 'B1D2263C3702177F',
                appkey: '5d116108006a454d538839ccff2d32f9',
                rsaPublicKey: `-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----`,
                encodeType: 'rsa',
            });

            const card = '你的卡密';
            const machineCode = getMachineCode();

            // 1. 获取公告
            let result = await verify.getNotice();
            if (result.success) console.log(`公告: ${result.notice}`);

            // 2. 获取版本号
            result = await verify.getLatestVersion();
            if (result.success) console.log(`最新版本: ${result.version}`);

            // 3. 单码登录
            result = await verify.login(card, machineCode);
            if (result.success) {
                console.log(`到期时间: ${result.end_time}`);
                // 4. 心跳
                result = await verify.heartbeat(card, result.statecode);
                if (result.success) console.log('心跳验证成功');
            }
        }
    </script>
</body>
</html>

调试

打开浏览器控制台(F12)查看输出结果。

T3 网络验证 WebAPI 开发文档