Appearance
C++ SDK
T3 网络验证 C++ SDK,面向对象封装,内置 RSA 实现,不依赖 OpenSSL。
适用场景
- C++ 桌面应用、命令行工具
- 游戏客户端、高性能应用
- Android NDK(参见 Android JNI)
无外部依赖
SDK 自带 RSA、Base64、MD5 实现,不依赖 OpenSSL。仅需系统 HTTP 库(libcurl)。
初始化
方式一:Base64 自定义编码集
cpp
#include "t3sdk.h"
T3Verify verify;
verify.init("登录调用码", "公告调用码", "版本号调用码", "心跳调用码",
"你的APPKEY", "你的Base64编码集");方式二:RSA 算法 + HEX 编码 推荐
cpp
#include "t3sdk.h"
T3Verify verify;
verify.initRSA("登录调用码", "公告调用码", "版本号调用码", "心跳调用码",
"你的APPKEY",
"-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----");后台配置
使用 SDK 前,请先完成 后台快速配置。您也可以在后台「SDK 下载与注入」页面一键自动配置并下载已注入配置信息的 SDK,无需手动填写。
返回值类型
SDK 使用结构体返回结果,常用类型:
| 类型 | 用途 | 关键字段 |
|---|---|---|
T3Result | 通用返回 | success, msg, error |
T3LoginResult | 登录 | success, end_time, statecode, amount |
T3NoticeResult | 公告 | success, notice |
T3VersionResult | 版本 | success, version |
T3QueryResult | 查询卡密 | success, end_time, available |
T3UpdateResult | 检查更新 | success, hasUpdate, ver, upurl, uplog |
T3VariableResult | 远程变量 | success, value |
T3CoreResult | 核心数据 | success, core |
T3OnlineResult | 在线数量 | success, count |
T3CloudDocResult | 云文档 | success, content |
T3AppSignResult | 签名比对 | success, match |
推荐调用顺序
API 方法参考
获取机器码
cpp
std::string machineCode = getMachineCode();
std::cout << "机器码: " << machineCode << std::endl;获取程序公告 getNotice()
cpp
auto notice = verify.getNotice();
if (notice.success) {
std::cout << "公告: " << notice.notice << std::endl;
} else {
std::cout << "失败: " << notice.error << std::endl;
}返回值:T3NoticeResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
notice | string | 公告内容 |
error | string | 错误信息(失败时) |
获取最新版本号 getLatestVersion()
cpp
auto version = verify.getLatestVersion();
if (version.success) {
std::cout << "最新版本: " << version.version << std::endl;
}返回值:T3VersionResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
version | string | 最新版本号 |
error | string | 错误信息 |
检查更新 checkUpdate(ver)
cpp
auto update = verify.checkUpdate("1000");
if (update.success && update.hasUpdate) {
std::cout << "需要更新到: " << update.ver << std::endl;
std::cout << "更新公告: " << update.uplog << std::endl;
std::cout << "下载地址: " << update.upurl << std::endl;
} else {
std::cout << "已是最新版本" << std::endl;
}返回值:T3UpdateResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
hasUpdate | bool | 是否有更新 |
ver | string | 最新版本号 |
uplog | string | 更新公告 |
upurl | string | 下载地址 |
error | string | 错误信息 |
单码卡密登录 login(kami, imei)
cpp
auto login = verify.login(card, machineCode);
if (login.success) {
std::cout << "登录成功! 到期时间: " << login.end_time << std::endl;
std::cout << "状态码: " << login.statecode << std::endl;
} else {
std::cout << "登录失败: " << login.error << std::endl;
}返回值:T3LoginResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
end_time | string | 到期时间 |
statecode | string | 状态码(心跳验证用) |
amount | string | 卡密时长 |
error | string | 错误信息 |
单码心跳验证 heartbeat(kami, statecode)
cpp
auto hb = verify.heartbeat(card, login.statecode);
if (hb.success) {
std::cout << "心跳验证成功" << std::endl;
} else {
std::cout << "心跳失败: " << hb.error << std::endl;
}返回值:T3Result
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
msg | string | 成功消息 |
error | string | 错误信息 |
查询卡密信息 queryKami(kami)
cpp
auto query = verify.queryKami(card);
if (query.success) {
std::cout << "到期时间: " << query.end_time << std::endl;
std::cout << "剩余时间: " << query.available << "秒" << std::endl;
}返回值:T3QueryResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
end_time | string | 到期时间 |
available | string | 剩余可用时间(秒) |
error | string | 错误信息 |
用户注册 userRegister(user, pass, email)
cpp
auto reg = verify.userRegister("username", "password", "email@example.com");
if (reg.success) {
std::cout << "注册成功" << std::endl;
}用户登录 userLogin(user, pass, imei)
cpp
auto ulogin = verify.userLogin("username", "password", machineCode);
if (ulogin.success) {
std::cout << "用户登录成功! 到期时间: " << ulogin.end_time << std::endl;
// ulogin.statecode 用于用户心跳
}返回值:同 T3LoginResult
用户心跳验证 userHeartbeat(user, pass, statecode)
cpp
auto uhb = verify.userHeartbeat("username", "password", ulogin.statecode);
if (uhb.success) {
std::cout << "用户心跳成功" << std::endl;
}用户充值 recharge(user, card)
cpp
auto rch = verify.recharge("username", "充值卡密");
if (rch.success) std::cout << "充值成功" << std::endl;用户绑定QQ bindQQ(user, pass, openid, accessToken)
cpp
auto bind = verify.bindQQ("username", "password", "openid", "access_token");用户QQ登录 qqLogin(openid, accessToken)
cpp
auto qqResult = verify.qqLogin("openid", "access_token");
if (qqResult.success) {
std::cout << "QQ登录成功! 到期: " << qqResult.end_time << std::endl;
}返回值:同 T3LoginResult
解绑设备 unbindKami / unbindUser
cpp
// 单码解绑
auto unbind1 = verify.unbindKami(card, machineCode);
std::cout << (unbind1.success ? " " + unbind1.msg : " 失败: " + unbind1.error) << std::endl;
// 用户解绑
auto unbind2 = verify.unbindUser("username", "password", machineCode);
std::cout << (unbind2.success ? " " + unbind2.msg : " 失败: " + unbind2.error) << std::endl;IP 解绑 ipUnbindKami / ipUnbindUser
cpp
// 单码 IP 解绑
auto ipub1 = verify.ipUnbindKami(card);
std::cout << (ipub1.success ? " " + ipub1.msg : " 失败: " + ipub1.error) << std::endl;
// 用户 IP 解绑
auto ipub2 = verify.ipUnbindUser("username", "password");
std::cout << (ipub2.success ? " " + ipub2.msg : " 失败: " + ipub2.error) << std::endl;获取远程变量 getVariableByKami / getVariableByUser
cpp
// 通过卡密获取
auto var1 = verify.getVariableByKami(card, "变量ID", "变量名称");
if (var1.success) std::cout << "变量值: " << var1.value << std::endl;
// 通过用户获取
auto var2 = verify.getVariableByUser("username", "password", "变量ID", "变量名称");返回值:T3VariableResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
value | string | 变量值 |
error | string | 错误信息 |
修改远程变量 modifyVariableByKami / modifyVariableByUser
cpp
// 通过卡密修改
auto mv1 = verify.modifyVariableByKami(card, "变量ID", "新内容");
// 通过用户修改
auto mv2 = verify.modifyVariableByUser("username", "password", "变量ID", "新内容");修改核心数据 modifyCoreByKami / modifyCoreByUser
cpp
// 通过卡密修改
auto mc1 = verify.modifyCoreByKami(card, "核心数据");
// 通过用户修改
auto mc2 = verify.modifyCoreByUser("username", "password", "核心数据");获取核心数据 getCoreByKami / getCoreByUser
cpp
// 通过卡密获取
auto core1 = verify.getCoreByKami(card);
if (core1.success) std::cout << "核心数据: " << core1.core << std::endl;
// 通过用户获取
auto core2 = verify.getCoreByUser("username", "password");
if (core2.success) std::cout << "核心数据: " << core2.core << std::endl;返回值:T3CoreResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
core | string | 核心数据内容 |
error | string | 错误信息 |
获取在线数量 getOnlineKamiCount / getOnlineUserCount
cpp
// 获取在线卡密数量
auto ok = verify.getOnlineKamiCount();
if (ok.success) std::cout << "在线卡密数: " << ok.count << std::endl;
// 获取在线用户数量
auto ou = verify.getOnlineUserCount();
if (ou.success) std::cout << "在线用户数: " << ou.count << std::endl;返回值:T3OnlineResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
count | int | 在线数量 |
error | string | 错误信息 |
获取云文档 getCloudDoc(token)
cpp
auto doc = verify.getCloudDoc("云文档Token");
if (doc.success) std::cout << "内容: " << doc.content << std::endl;返回值:T3CloudDocResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否成功 |
content | string | 文档内容 |
error | string | 错误信息 |
应用签名比对 appSign(autograph)
cpp
auto sign = verify.appSign("应用签名");
if (sign.success) {
std::cout << " " << sign.msg << std::endl;
std::cout << " 后台签名: " << sign.autograph << std::endl;
} else {
std::cout << " 失败: " << sign.error << std::endl;
}用户修改密码 changePassword(user, oldpass, newpass)
cpp
auto cp = verify.changePassword("username", "旧密码", "新密码");
if (cp.success) std::cout << "密码修改成功" << std::endl;禁用 disableKami / disableUser
cpp
// 禁用卡密
auto dis1 = verify.disableKami(card);
// 禁用用户
auto dis2 = verify.disableUser("username", "password");用户注销 userCancel(user, pass)
cpp
auto cancel = verify.userCancel("username", "password");编译
bash
g++ -o t3demo main.cpp t3sdk.cpp -lcurl -lstdc++
./t3demo关于 Android 平台
如需在 Android NDK 环境下使用,请参考 Android JNI SDK 文档。