Skip to content

C 语言 SDK

T3 网络验证 C SDK,内置 RSA 实现,不依赖 OpenSSL。

适用场景

  • C 语言桌面应用、命令行工具
  • 嵌入式设备、IoT 应用
  • Android NDK(参见 Android JNI

无外部依赖

SDK 自带 RSA、Base64、MD5 实现,不依赖 OpenSSL。仅需系统 HTTP 库(libcurl)。

初始化

方式一:Base64 自定义编码集

c
#include "t3sdk.h"

T3Verify verify;

t3verify_init(&verify,
    "登录调用码", "公告调用码", "版本号调用码", "心跳调用码",
    "你的APPKEY", "你的Base64编码集");

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

c
#include "t3sdk.h"

T3Verify verify;

t3verify_init_rsa(&verify,
    "登录调用码", "公告调用码", "版本号调用码", "心跳调用码",
    "你的APPKEY",
    "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----");

后台配置

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

推荐调用顺序

API 方法参考

获取机器码

c
char machine_code[64];
get_machine_code(machine_code);
printf("机器码: %s\n", machine_code);

获取程序公告 t3verify_get_notice()

c
T3NoticeResult notice;
t3verify_get_notice(&verify, &notice);
if (notice.success) {
    printf("公告: %s\n", notice.notice);
} else {
    printf("失败: %s\n", notice.error);
}

返回值T3NoticeResult

字段类型说明
successint是否成功(1/0)
noticechar[]公告内容
errorchar[]错误信息(失败时)

获取最新版本号 t3verify_get_latest_version()

c
T3VersionResult version;
t3verify_get_latest_version(&verify, &version);
if (version.success) {
    printf("最新版本: %s\n", version.version);
}

返回值T3VersionResult

字段类型说明
successint是否成功
versionchar[]最新版本号
errorchar[]错误信息

检查更新 t3verify_check_update(ver)

c
T3UpdateResult update;
t3verify_check_update(&verify, "1000", &update);
if (update.success && update.has_update) {
    printf("需要更新到: %s\n", update.ver);
    printf("更新公告: %s\n", update.uplog);
    printf("下载地址: %s\n", update.upurl);
} else {
    printf("已是最新版本\n");
}

返回值T3UpdateResult

字段类型说明
successint是否成功
has_updateint是否有更新
verchar[]最新版本号
uplogchar[]更新公告
upurlchar[]下载地址
errorchar[]错误信息

单码卡密登录 t3verify_login(kami, imei)

c
T3LoginResult login;
t3verify_login(&verify, card, machine_code, &login);
if (login.success) {
    printf("登录成功! 到期时间: %s\n", login.end_time);
    printf("状态码: %s\n", login.statecode);
} else {
    printf("登录失败: %s\n", login.error);
}

返回值T3LoginResult

字段类型说明
successint是否成功
end_timechar[]到期时间
statecodechar[]状态码(心跳验证用)
amountchar[]卡密时长
errorchar[]错误信息

单码心跳验证 t3verify_heartbeat(kami, statecode)

c
T3Result heartbeat;
t3verify_heartbeat(&verify, card, login.statecode, &heartbeat);
if (heartbeat.success) {
    printf("心跳验证成功\n");
} else {
    printf("心跳失败: %s\n", heartbeat.error);
}

返回值T3Result

字段类型说明
successint是否成功
msgchar[]成功消息
errorchar[]错误信息

查询卡密信息 t3verify_query_kami(kami)

c
T3QueryResult query;
t3verify_query_kami(&verify, card, &query);
if (query.success) {
    printf("到期时间: %s\n", query.end_time);
    printf("剩余时间: %s\n", query.available);
}

返回值T3QueryResult

字段类型说明
successint是否成功
end_timechar[]到期时间
availablechar[]剩余可用时间(秒)
errorchar[]错误信息

用户注册 t3verify_user_register(user, pass, email)

c
T3Result reg;
t3verify_user_register(&verify, "username", "password", "email@example.com", &reg);
if (reg.success) {
    printf("注册成功\n");
}

用户登录 t3verify_user_login(user, pass, imei)

c
T3LoginResult ulogin;
t3verify_user_login(&verify, "username", "password", machine_code, &ulogin);
if (ulogin.success) {
    printf("用户登录成功! 到期时间: %s\n", ulogin.end_time);
}

返回值:同 T3LoginResult


用户心跳验证 t3verify_user_heartbeat(user, pass, statecode)

c
T3Result uhb;
t3verify_user_heartbeat(&verify, "username", "password", ulogin.statecode, &uhb);
if (uhb.success) {
    printf("用户心跳成功\n");
}

用户充值 t3verify_recharge(user, card)

c
T3Result rch;
t3verify_recharge(&verify, "username", "充值卡密", &rch);
if (rch.success) printf("充值成功\n");

用户绑定QQ t3verify_bind_qq(user, pass, openid, access_token)

c
T3Result bind;
t3verify_bind_qq(&verify, "username", "password", "openid", "access_token", &bind);

用户QQ登录 t3verify_qq_login(openid, access_token)

c
T3LoginResult qqlogin;
t3verify_qq_login(&verify, "openid", "access_token", &qqlogin);
if (qqlogin.success) {
    printf("QQ登录成功! 到期: %s\n", qqlogin.end_time);
}

解绑设备 t3verify_unbind_kami / t3verify_unbind_user

c
// 单码解绑
T3Result ub1;
t3verify_unbind_kami(&verify, card, machine_code, &ub1);
printf(ub1.success ? "  %s\n" : "  失败: %s\n", ub1.success ? ub1.msg : ub1.error);

// 用户解绑
T3Result ub2;
t3verify_unbind_user(&verify, "username", "password", machine_code, &ub2);
printf(ub2.success ? "  %s\n" : "  失败: %s\n", ub2.success ? ub2.msg : ub2.error);

IP 解绑 t3verify_ip_unbind_kami / t3verify_ip_unbind_user

c
// 单码 IP 解绑
T3Result ipub1;
t3verify_ip_unbind_kami(&verify, card, &ipub1);
printf(ipub1.success ? "  %s\n" : "  失败: %s\n", ipub1.success ? ipub1.msg : ipub1.error);

// 用户 IP 解绑
T3Result ipub2;
t3verify_ip_unbind_user(&verify, "username", "password", &ipub2);
printf(ipub2.success ? "  %s\n" : "  失败: %s\n", ipub2.success ? ipub2.msg : ipub2.error);

获取远程变量 t3verify_get_variable_by_kami / t3verify_get_variable_by_user

c
// 通过卡密获取
T3VariableResult var1;
t3verify_get_variable_by_kami(&verify, card, "变量ID", "变量名称", &var1);
if (var1.success) printf("变量值: %s\n", var1.value);
else printf("获取变量失败: %s\n", var1.error);

// 通过用户获取
T3VariableResult var2;
t3verify_get_variable_by_user(&verify, "username", "password", "变量ID", "变量名称", &var2);
if (var2.success) printf("变量值: %s\n", var2.value);
else printf("获取变量失败: %s\n", var2.error);

返回值T3VariableResult

字段类型说明
successint是否成功
valuechar[]变量值
errorchar[]错误信息

修改远程变量 t3verify_modify_variable_by_kami / t3verify_modify_variable_by_user

c
// 通过卡密修改
T3Result mv1;
t3verify_modify_variable_by_kami(&verify, card, "变量ID", "新内容", &mv1);
printf(mv1.success ? "  %s\n" : "  失败: %s\n", mv1.success ? mv1.msg : mv1.error);

// 通过用户修改
T3Result mv2;
t3verify_modify_variable_by_user(&verify, "username", "password", "变量ID", "新内容", &mv2);
printf(mv2.success ? "  %s\n" : "  失败: %s\n", mv2.success ? mv2.msg : mv2.error);

修改核心数据 t3verify_modify_core_by_kami / t3verify_modify_core_by_user

c
// 通过卡密修改
T3Result mc1;
t3verify_modify_core_by_kami(&verify, card, "核心数据", &mc1);
printf(mc1.success ? "  %s\n" : "  失败: %s\n", mc1.success ? mc1.msg : mc1.error);

// 通过用户修改
T3Result mc2;
t3verify_modify_core_by_user(&verify, "username", "password", "核心数据", &mc2);
printf(mc2.success ? "  %s\n" : "  失败: %s\n", mc2.success ? mc2.msg : mc2.error);

获取核心数据 t3verify_get_core_by_kami / t3verify_get_core_by_user

c
// 通过卡密获取
T3CoreResult core1;
t3verify_get_core_by_kami(&verify, card, &core1);
if (core1.success) printf("核心数据: %s\n", core1.core);

// 通过用户获取
T3CoreResult core2;
t3verify_get_core_by_user(&verify, "username", "password", &core2);
if (core2.success) printf("核心数据: %s\n", core2.core);

返回值T3CoreResult

字段类型说明
successint是否成功
corechar[]核心数据内容
errorchar[]错误信息

获取在线数量 t3verify_get_online_kami_count / t3verify_get_online_user_count

c
// 获取在线卡密数量
T3OnlineResult ok;
t3verify_get_online_kami_count(&verify, &ok);
if (ok.success) printf("在线卡密数: %d\n", ok.count);

// 获取在线用户数量
T3OnlineResult ou;
t3verify_get_online_user_count(&verify, &ou);
if (ou.success) printf("在线用户数: %d\n", ou.count);

返回值T3OnlineResult

字段类型说明
successint是否成功
countint在线数量
errorchar[]错误信息

获取云文档 t3verify_get_cloud_doc(token)

c
T3CloudDocResult doc;
t3verify_get_cloud_doc(&verify, "云文档Token", &doc);
if (doc.success) printf("内容: %s\n", doc.content);

返回值T3CloudDocResult

字段类型说明
successint是否成功
contentchar[]文档内容
errorchar[]错误信息

应用签名比对 t3verify_app_sign(autograph)

c
T3AppSignResult sign;
t3verify_app_sign(&verify, "应用签名", &sign);
if (sign.success) {
    printf("%s\n", sign.msg);
    printf("后台签名: %s\n", sign.autograph);
} else {
    printf("失败: %s\n", sign.error);
}

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

c
T3Result cp;
t3verify_change_password(&verify, "username", "旧密码", "新密码", &cp);
if (cp.success) printf("密码修改成功\n");

禁用 t3verify_disable_kami / t3verify_disable_user

c
// 禁用卡密
T3Result dis1;
t3verify_disable_kami(&verify, card, &dis1);

// 禁用用户
T3Result dis2;
t3verify_disable_user(&verify, "username", "password", &dis2);

用户注销 t3verify_user_cancel(user, pass)

c
T3Result cancel;
t3verify_user_cancel(&verify, "username", "password", &cancel);

编译

bash
gcc -o t3demo main.c t3sdk.c -lcurl -lm
./t3demo

关于 Android 平台

如需在 Android NDK 环境下使用,请参考 Android JNI SDK 文档。

T3 网络验证 WebAPI 开发文档