Skip to content

Node.js SDK

T3 网络验证 Node.js SDK,支持 Base64 自定义编码集和 RSA 两种加密算法。所有 API 方法均为异步(返回 Promise)。

适用场景

  • Node.js 服务端 / 桌面应用(Electron)
  • 适用于 Node.js 12+

包管理器安装

bash
npm install t3-verify-sdk
javascript
const { T3Verify, getMachineCode } = require('t3-verify-sdk');

手动下载

依赖说明

使用 Node.js 内置 crypto 模块,无需额外安装依赖。

初始化

方式一:Base64 自定义编码集

javascript
const { T3Verify, getMachineCode } = require('./t3sdk/t3sdk');

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

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

javascript
const { T3Verify, getMachineCode } = require('./t3sdk/t3sdk');

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.then() 调用。

获取机器码

javascript
const machineCode = getMachineCode();

获取程序公告 getNotice() async

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

获取最新版本号 getLatestVersion() async

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

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

javascript
const result = await verify.login(card, machineCode);
if (result.success) {
    console.log(`到期时间: ${result.end_time}`);
    const statecode = result.statecode;  // 保存用于心跳
}

参数

参数类型说明
kamistring卡密值
imeistring机器码

返回值字段success, id, end_time, statecode, error


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

javascript
const result = await verify.heartbeat(card, statecode);
if (result.success) {
    console.log('心跳验证成功');
}

检查更新 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');

完整示例

javascript
const { T3Verify, getMachineCode } = require('./t3sdk/t3sdk');

async function main() {
    const verify = new T3Verify();

    // 初始化(RSA 模式)
    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('心跳验证成功');
    }
}

main().catch(console.error);

T3 网络验证 WebAPI 开发文档