Appearance
C# SDK
T3 网络验证 C# SDK,纯 .NET 标准库实现,兼容 .NET Framework 4.6+ 和 .NET Core/.NET 5+。
适用场景
- C# 桌面应用(WinForms / WPF / 控制台)
- Unity 游戏
无额外依赖
SDK 仅使用 .NET 标准库(System.Net, System.Security.Cryptography),无需 NuGet 包。
初始化
方式一:Base64 自定义编码集
csharp
var verify = new T3Verify();
verify.Init(
loginCode: "你的单码登录调用码",
noticeCode: "你的公告调用码",
versionCode: "你的版本号调用码",
heartbeatCode: "你的心跳调用码",
appkey: "你的程序APPKEY",
base64Charset: "你的Base64自定义编码集"
);方式二:RSA 算法 + HEX 编码 推荐
csharp
var verify = new T3Verify();
verify.InitRsa(
loginCode: "你的单码登录调用码",
noticeCode: "你的公告调用码",
versionCode: "你的版本号调用码",
heartbeatCode: "你的心跳调用码",
appkey: "你的程序APPKEY",
rsaPublicKey: @"-----BEGIN PUBLIC KEY-----
你的RSA公钥
-----END PUBLIC KEY-----"
);后台配置
使用 SDK 前,请先完成 后台快速配置。您也可以在后台「SDK 下载与注入」页面一键自动配置并下载已注入配置信息的 SDK,无需手动填写。
推荐调用顺序
API 方法参考
获取机器码
csharp
string machineCode = T3Verify.GetMachineCode();获取程序公告 GetNotice()
csharp
var result = verify.GetNotice();
if (result.Success)
Console.WriteLine($"公告: {result.Notice}");
else
Console.WriteLine($"失败: {result.Error}");获取最新版本号 GetLatestVersion()
csharp
var result = verify.GetLatestVersion();
if (result.Success)
Console.WriteLine($"最新版本: {result.Version}");单码卡密登录 Login(kami, imei)
csharp
var result = verify.Login(card, machineCode);
if (result.Success) {
Console.WriteLine($"到期时间: {result.EndTime}");
string statecode = result.Statecode; // 保存用于心跳
}单码心跳验证 Heartbeat(kami, statecode)
csharp
var result = verify.Heartbeat(card, statecode);
if (result.Success)
Console.WriteLine("心跳验证成功");检查更新 CheckUpdate(ver)
csharp
var result = verify.CheckUpdate("1000");
if (result.Success) {
if (result.HasUpdate) {
Console.WriteLine($"最新版本: {result.Ver}");
Console.WriteLine($"更新公告: {result.Uplog}");
Console.WriteLine($"下载地址: {result.Upurl}");
}
}查询卡密信息 QueryKami(kami)
csharp
var result = verify.QueryKami(card);
if (result.Success) {
Console.WriteLine($"到期时间: {result.EndTime}");
Console.WriteLine($"剩余时间: {result.Available}秒");
}用户注册 UserRegister(user, password, email)
csharp
var result = verify.UserRegister("username", "password", "email@example.com");
if (result.Success)
Console.WriteLine("注册成功");用户登录 UserLogin(user, password, imei)
csharp
var result = verify.UserLogin("username", "password", machineCode);
if (result.Success) {
Console.WriteLine($"到期时间: {result.EndTime}");
string userStatecode = result.Statecode;
}用户心跳验证 UserHeartbeat(user, password, statecode)
csharp
var result = verify.UserHeartbeat("username", "password", userStatecode);用户充值 Recharge(user, card)
csharp
var result = verify.Recharge("username", "recharge_card");用户绑定QQ BindQQ(user, password, openid, accessToken)
csharp
var result = verify.BindQQ("username", "password", "openid", "access_token");用户QQ登录 QQLogin(openid, accessToken)
csharp
var result = verify.QQLogin("openid", "access_token");解绑设备 UnbindKami / UnbindUser
csharp
// 单码解绑
var result = verify.UnbindKami(card, machineCode);
if (result.Success) Console.WriteLine($" {result.Msg}");
else Console.WriteLine($" 失败: {result.Error}");
// 用户解绑
var result2 = verify.UnbindUser("username", "password", machineCode);
if (result2.Success) Console.WriteLine($" {result2.Msg}");
else Console.WriteLine($" 失败: {result2.Error}");IP 解绑 IpUnbindKami / IpUnbindUser
csharp
// 单码 IP 解绑
var result = verify.IpUnbindKami(card);
if (result.Success) Console.WriteLine($" {result.Msg}");
else Console.WriteLine($" 失败: {result.Error}");
// 用户 IP 解绑
var result2 = verify.IpUnbindUser("username", "password");
if (result2.Success) Console.WriteLine($" {result2.Msg}");
else Console.WriteLine($" 失败: {result2.Error}");获取远程变量 GetVariableByKami / GetVariableByUser
csharp
// 通过卡密获取
var result = verify.GetVariableByKami(card, "变量ID", "变量名称");
if (result.Success) Console.WriteLine($"变量值: {result.Value}");
else Console.WriteLine($"失败: {result.Error}");
// 通过用户获取
var result2 = verify.GetVariableByUser("username", "password", "变量ID", "变量名称");
if (result2.Success) Console.WriteLine($"变量值: {result2.Value}");
else Console.WriteLine($"失败: {result2.Error}");修改远程变量 ModifyVariableByKami / ModifyVariableByUser
csharp
// 通过卡密修改
var result = verify.ModifyVariableByKami(card, "变量ID", "新内容");
if (result.Success) Console.WriteLine($" {result.Msg}");
else Console.WriteLine($" 失败: {result.Error}");
// 通过用户修改
var result2 = verify.ModifyVariableByUser("username", "password", "变量ID", "新内容");
if (result2.Success) Console.WriteLine($" {result2.Msg}");
else Console.WriteLine($" 失败: {result2.Error}");修改核心数据 ModifyCoreByKami / ModifyCoreByUser
csharp
// 通过卡密修改
var result = verify.ModifyCoreByKami(card, "核心数据");
if (result.Success) Console.WriteLine($" {result.Msg}");
else Console.WriteLine($" 失败: {result.Error}");
// 通过用户修改
var result2 = verify.ModifyCoreByUser("username", "password", "核心数据");
if (result2.Success) Console.WriteLine($" {result2.Msg}");
else Console.WriteLine($" 失败: {result2.Error}");获取核心数据 GetCoreByKami / GetCoreByUser
csharp
// 通过卡密获取
var core1 = verify.GetCoreByKami(card);
if (core1.Success) Console.WriteLine($"核心数据: {core1.Core}");
// 通过用户获取
var core2 = verify.GetCoreByUser("username", "password");
if (core2.Success) Console.WriteLine($"核心数据: {core2.Core}");返回值:T3CoreResult
| 字段 | 类型 | 说明 |
|---|---|---|
Success | bool | 是否成功 |
Core | string | 核心数据内容 |
Error | string | 错误信息 |
获取在线数量 GetOnlineKamiCount / GetOnlineUserCount
csharp
// 获取在线卡密数量
var ok = verify.GetOnlineKamiCount();
if (ok.Success) Console.WriteLine($"在线卡密数: {ok.Count}");
// 获取在线用户数量
var ou = verify.GetOnlineUserCount();
if (ou.Success) Console.WriteLine($"在线用户数: {ou.Count}");返回值:T3OnlineResult
| 字段 | 类型 | 说明 |
|---|---|---|
Success | bool | 是否成功 |
Count | int | 在线数量 |
Error | string | 错误信息 |
获取云文档 GetCloudDoc(token)
csharp
var result = verify.GetCloudDoc("云文档Token");
if (result.Success)
Console.WriteLine($"内容: {result.Content}");应用签名比对 AppSign(autograph)
csharp
var result = verify.AppSign("应用签名");
if (result.Success) {
Console.WriteLine($" {result.Msg}");
Console.WriteLine($" 后台签名: {result.Autograph}");
} else {
Console.WriteLine($" 失败: {result.Error}");
}用户修改密码 ChangePassword(user, oldpass, newpass)
csharp
var result = verify.ChangePassword("username", "旧密码", "新密码");禁用 DisableKami / DisableUser
csharp
// 禁用卡密
var result = verify.DisableKami(card);
if (result.Success) Console.WriteLine($" {result.Msg}");
else Console.WriteLine($" 失败: {result.Error}");
// 禁用用户
var result2 = verify.DisableUser("username", "password");
if (result2.Success) Console.WriteLine($" {result2.Msg}");
else Console.WriteLine($" 失败: {result2.Error}");用户注销 UserCancel(user, password)
csharp
var result = verify.UserCancel("username", "password");完整示例
csharp
using System;
using T3SDK;
class Program {
static void Main(string[] args) {
var verify = new T3Verify();
verify.InitRsa(
loginCode: "F2FA89AD46C050B2",
noticeCode: "3512425FE75AE73A",
versionCode: "F119CF1323743DBC",
heartbeatCode: "B1D2263C3702177F",
appkey: "5d116108006a454d538839ccff2d32f9",
rsaPublicKey: @"-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----"
);
var card = "你的卡密";
var machineCode = T3Verify.GetMachineCode();
// 1. 获取公告
var notice = verify.GetNotice();
if (notice.Success) Console.WriteLine($"公告: {notice.Notice}");
// 2. 获取版本号
var ver = verify.GetLatestVersion();
if (ver.Success) Console.WriteLine($"最新版本: {ver.Version}");
// 3. 单码登录
var login = verify.Login(card, machineCode);
if (login.Success) {
Console.WriteLine($"到期时间: {login.EndTime}");
// 4. 心跳验证
var hb = verify.Heartbeat(card, login.Statecode);
if (hb.Success) Console.WriteLine("心跳验证成功");
}
}
}编译运行
bash
# .NET CLI
dotnet run
# 或使用 csc 编译器
csc /out:T3Demo.exe T3Verify.cs Program.cs
T3Demo.exe