Appearance
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, ¬ice);
if (notice.success) {
printf("公告: %s\n", notice.notice);
} else {
printf("失败: %s\n", notice.error);
}返回值:T3NoticeResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功(1/0) |
notice | char[] | 公告内容 |
error | char[] | 错误信息(失败时) |
获取最新版本号 t3verify_get_latest_version()
c
T3VersionResult version;
t3verify_get_latest_version(&verify, &version);
if (version.success) {
printf("最新版本: %s\n", version.version);
}返回值:T3VersionResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
version | char[] | 最新版本号 |
error | char[] | 错误信息 |
检查更新 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
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
has_update | int | 是否有更新 |
ver | char[] | 最新版本号 |
uplog | char[] | 更新公告 |
upurl | char[] | 下载地址 |
error | char[] | 错误信息 |
单码卡密登录 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
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
end_time | char[] | 到期时间 |
statecode | char[] | 状态码(心跳验证用) |
amount | char[] | 卡密时长 |
error | char[] | 错误信息 |
单码心跳验证 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
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
msg | char[] | 成功消息 |
error | char[] | 错误信息 |
查询卡密信息 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
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
end_time | char[] | 到期时间 |
available | char[] | 剩余可用时间(秒) |
error | char[] | 错误信息 |
用户注册 t3verify_user_register(user, pass, email)
c
T3Result reg;
t3verify_user_register(&verify, "username", "password", "email@example.com", ®);
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
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
value | char[] | 变量值 |
error | char[] | 错误信息 |
修改远程变量 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
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
core | char[] | 核心数据内容 |
error | char[] | 错误信息 |
获取在线数量 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
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
count | int | 在线数量 |
error | char[] | 错误信息 |
获取云文档 t3verify_get_cloud_doc(token)
c
T3CloudDocResult doc;
t3verify_get_cloud_doc(&verify, "云文档Token", &doc);
if (doc.success) printf("内容: %s\n", doc.content);返回值:T3CloudDocResult
| 字段 | 类型 | 说明 |
|---|---|---|
success | int | 是否成功 |
content | char[] | 文档内容 |
error | char[] | 错误信息 |
应用签名比对 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 文档。