Java对接
本文档介绍如何在 Java 环境中使用 Kauth SDK 实现网络验证功能。
1. 准备工作
1.1 下载 SDK
重要提示 首先下载SDK文件: 网盘下载
将下载的 SDK JAR 包添加到项目中。
1.2 Maven 依赖
在 pom.xml 中添加以下依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.11</version>
</dependency>
1.3 获取必要的参数
在使用 SDK 之前,你需要从 Kauth 管理后台获取以下信息:
- API 域名(
apiDomain):验证服务器地址,默认为 https://kauth.cn,独立部署版本需要设置为你的域名 - 程序ID(
programId):登录后在"程序管理->程序列表"中查看 - 程序密钥(
programSecret):登录后在"程序管理->程序列表"中查看 - 商户公钥(
merchantPublicKey):登录后在"系统配置"中查看 - 签名类型(
signType):支持SIGN_TYPE_RSA或SIGN_TYPE_HMAC_SHA256
2. 初始化 SDK
2.1 配置服务参数
初始化 SDK 配置:
import cn.kauth.sdk.IKauthService;
import cn.kauth.sdk.IKAppService;
import cn.kauth.sdk.enums.KauthSignEnums;
import cn.kauth.sdk.impl.KauthServiceImpl;
import cn.kauth.sdk.info.config.ServiceConfig;
// 创建服务实例
IKauthService kauthService = new KauthServiceImpl();
// 配置服务参数
ServiceConfig serviceConfig = new ServiceConfig();
serviceConfig.setApiDomain("https://kauth.cn"); // 如果独立部署,设置为你的域名
serviceConfig.setMerchantPublicKey("你的商户公钥");
serviceConfig.setProgramSecret("你的程序密钥");
serviceConfig.setProgramId(你的程序ID);
serviceConfig.setKauthSignEnums(KauthSignEnums.SIGN_TYPE_RSA); // 或 SIGN_TYPE_HMAC_SHA256
kauthService.setServiceConfig(serviceConfig);
2.2 获取设备ID
SDK 提供了 DeviceTools.getDeviceId() 方法来获取设备ID:
import cn.kauth.sdk.tools.DeviceTools;
String deviceId = DeviceTools.getDeviceId();
3. 登录功能
3.1 密码登录
使用用户名和密码进行登录:
import cn.kauth.sdk.info.req.PwdLoginRequest;
import cn.kauth.sdk.info.resp.ApiResult;
import cn.kauth.sdk.info.resp.LoginResponse;
PwdLoginRequest pwdLoginRequest = new PwdLoginRequest();
pwdLoginRequest.setLoginName("用户名");
pwdLoginRequest.setPassword("密码");
pwdLoginRequest.setDeviceId(DeviceTools.getDeviceId());
pwdLoginRequest.setCaptchaCode("");
pwdLoginRequest.setCaptchaUuid("");
ApiResult<LoginResponse> apiResult = kauthService.pwdLogin(pwdLoginRequest);
if (apiResult.isSuccess()) {
// 登录成功
String token = apiResult.getData().getToken();
// 使用 token 获取应用服务
IKAppService kAppService = kauthService.getKAppService(token);
}
3.2 卡密登录
使用卡密进行登录:
import cn.kauth.sdk.info.req.KaLoginRequest;
KaLoginRequest kaLoginRequest = new KaLoginRequest();
kaLoginRequest.setKaPwd("卡密");
kaLoginRequest.setDeviceId(DeviceTools.getDeviceId());
kaLoginRequest.setPlatformType("windows"); // 平台类型
kaLoginRequest.setCaptchaCode("");
kaLoginRequest.setCaptchaUuid("");
ApiResult<LoginResponse> loginResponse = kauthService.kaLogin(kaLoginRequest);
if (loginResponse.isSuccess()) {
String token = loginResponse.getData().getToken();
IKAppService kAppService = kauthService.getKAppService(token);
}
3.2.1 次卡登录
次卡按次数扣费的卡密登录:
KaLoginRequest kaLoginRequest = new KaLoginRequest();
kaLoginRequest.setKaPwd("次卡卡密");
kaLoginRequest.setDeviceId(DeviceTools.getDeviceId());
kaLoginRequest.setPlatformType("windows");
kaLoginRequest.setCaptchaCode("");
kaLoginRequest.setCaptchaUuid("");
ApiResult<LoginResponse> result = kauthService.kaLogin(kaLoginRequest);
3.2.2 时卡登录
时卡按时长使用的卡密登录:
KaLoginRequest kaLoginRequest = new KaLoginRequest();
kaLoginRequest.setKaPwd("时卡卡密");
kaLoginRequest.setDeviceId(DeviceTools.getDeviceId());
kaLoginRequest.setPlatformType("windows");
kaLoginRequest.setCaptchaCode("");
kaLoginRequest.setCaptchaUuid("");
ApiResult<LoginResponse> result = kauthService.kaLogin(kaLoginRequest);
3.3 试用登录
使用试用功能登录:
import cn.kauth.sdk.info.req.TrialLoginReq;
TrialLoginReq trialLoginReq = new TrialLoginReq();
trialLoginReq.setDeviceId(DeviceTools.getDeviceId());
ApiResult<LoginResponse> trialResult = kauthService.trialLogin(trialLoginReq);
if (trialResult.isSuccess()) {
String token = trialResult.getData().getToken();
IKAppService kAppService = kauthService.getKAppService(token);
}
3.4 获取验证码
获取登录验证码(可选):
import cn.kauth.sdk.info.req.CaptchaRequest;
import cn.kauth.sdk.info.resp.CaptchaResponse;
import java.util.UUID;
CaptchaRequest captchaRequest = new CaptchaRequest();
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
captchaRequest.setUuid(uuid);
ApiResult<CaptchaResponse> captcha = kauthService.getCaptcha(captchaRequest);
if (captcha.isSuccess()) {
String captchaBase64 = captcha.getData().getCaptchaBase64();
// 需要自己把base64图片转为字节输出到本地才能看到图片
// 或者使用在线的base64图片查看器
}
4. 获取登录后的服务
登录成功后,使用返回的 token 获取应用服务:
// 登录后获取 token
ApiResult<LoginResponse> loginResult = kauthService.kaLogin(kaLoginRequest);
String token = loginResult.getData().getToken();
// 获取应用服务
IKAppService kAppService = kauthService.getKAppService(token);
// 之后可以使用 kAppService 调用登录后的接口
5. 用户信息管理
5.1 获取用户信息
获取当前登录用户的详细信息:
import cn.kauth.sdk.info.resp.UserInfo;
ApiResult<UserInfo> userInfo = kAppService.userInfo();
if (userInfo.isSuccess()) {
UserInfo user = userInfo.getData();
System.out.println("用户ID: " + user.getUserId());
System.out.println("服务类型: " + user.getServerType()); // time(时长) 或 ci(次数)
System.out.println("到期时间: " + user.getServerExpireTime());
System.out.println("剩余次数: " + user.getServerRemainNum());
System.out.println("是否试用: " + user.isTrial());
}
5.2 退出登录
退出当前登录状态:
ApiResult<Void> loginOut = kAppService.loginOut();
if (loginOut.isSuccess()) {
System.out.println("退出登录成功");
}
6. 程序信息
6.1 获取程序详情
获取程序的详细信息(无需登录):
import cn.kauth.sdk.info.resp.ProgramDetailResponse;
ApiResult<ProgramDetailResponse> programDetail = kauthService.getProgramDetail();
if (programDetail.isSuccess()) {
ProgramDetailResponse detail = programDetail.getData();
System.out.println("程序名称: " + detail.getName());
System.out.println("程序状态: " + detail.isStatus());
System.out.println("是否强制更新: " + detail.isForceUpdateDict());
System.out.println("是否允许注册: " + detail.isEnableRegisterDict());
System.out.println("程序公告: " + detail.getNotice());
// 当前版本信息
System.out.println("版本号: " + detail.getCurrentVersion().getVersionNo());
System.out.println("版本名称: " + detail.getCurrentVersion().getVersionName());
}
6.2 获取服务器时间
获取服务器当前时间:
import cn.kauth.sdk.info.resp.ServerTimeResp;
ApiResult<ServerTimeResp> serverTime = kAppService.getServerTime();
if (serverTime.isSuccess()) {
ServerTimeResp time = serverTime.getData();
System.out.println("服务器时间字符串: " + time.getServerTimeStr());
System.out.println("服务器时间毫秒: " + time.getServerTimeMill());
System.out.println("服务器时间秒: " + time.getServerTimeSec());
}
7. 用户管理
7.1 用户注册
注册新用户:
import cn.kauth.sdk.info.req.RegisterRequest;
import cn.kauth.sdk.info.resp.RegisterResponse;
RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setLoginName("用户名");
registerRequest.setPassword("密码");
registerRequest.setKaPassword("注册卡密"); // 可选
registerRequest.setNickName("昵称");
registerRequest.setDeviceId(DeviceTools.getDeviceId());
registerRequest.setCaptchaCode("");
registerRequest.setCaptchaUuid("");
ApiResult<RegisterResponse> register = kauthService.register(registerRequest);
7.2 修改密码
修改用户密码:
import cn.kauth.sdk.info.req.ResetPwdRequest;
ResetPwdRequest resetPwdRequest = new ResetPwdRequest();
resetPwdRequest.setLoginName("用户名");
resetPwdRequest.setOldPassword("旧密码");
resetPwdRequest.setNewPassword("新密码");
resetPwdRequest.setConfirmPassword("确认新密码");
resetPwdRequest.setCaptchaCode("");
resetPwdRequest.setCaptchaUuid("");
ApiResult<Void> result = kauthService.changePassword(resetPwdRequest);
7.3 账号充值
使用卡密为账号充值:
import cn.kauth.sdk.info.req.RechargeRequest;
RechargeRequest rechargeRequest = new RechargeRequest();
rechargeRequest.setLoginName("用户名");
rechargeRequest.setKaPassword("充值卡密");
rechargeRequest.setDeviceId(DeviceTools.getDeviceId());
rechargeRequest.setCaptchaUuid("");
rechargeRequest.setCaptchaCode("");
ApiResult<Void> result = kauthService.recharge(rechargeRequest);
7.4 以卡充卡
使用卡密A为卡密B充值:
import cn.kauth.sdk.info.req.KaRechargeKaReq;
KaRechargeKaReq kaRechargeKaReq = new KaRechargeKaReq();
kaRechargeKaReq.setCardPwd("卡密A");
kaRechargeKaReq.setRechargeCardPwd("卡密B");
ApiResult<Void> result = kauthService.rechargeKa(kaRechargeKaReq);
8. 设备管理
8.1 解绑设备(登录前)
在未登录状态下解绑设备:
import cn.kauth.sdk.info.req.UnbindDeviceRequest;
UnbindDeviceRequest unbindDeviceRequest = new UnbindDeviceRequest();
unbindDeviceRequest.setLoginName("用户名");
unbindDeviceRequest.setPassword("密码");
unbindDeviceRequest.setDeviceId(DeviceTools.getDeviceId());
unbindDeviceRequest.setCaptchaCode("");
unbindDeviceRequest.setCaptchaUuid("");
ApiResult<Void> result = kauthService.unbindDevice(unbindDeviceRequest);
8.2 解绑设备(登录后)
登录后解绑当前设备:
// 卡密只允许绑定一个设备,如果已绑定其他设备,则需要解绑其他设备后才能绑定当前设备
ApiResult<Void> result = kAppService.unbindDevice();
9. 自定义配置
9.1 用户配置
更新用户自定义配置:
import cn.kauth.sdk.info.req.UpdateCustomConfigReq;
import cn.kauth.sdk.info.resp.GetCustomConfigResp;
import java.util.HashMap;
import java.util.Map;
// 更新用户配置
UpdateCustomConfigReq updateUserConfigReq = new UpdateCustomConfigReq();
Map<String, String> config = new HashMap<>();
config.put("name", "张三");
config.put("age", "18");
config.put("uuid", UUID.randomUUID().toString());
updateUserConfigReq.setConfig(new Gson().toJson(config));
ApiResult<Void> updateResult = kAppService.updateUserConfig(updateUserConfigReq);
// 获取用户配置
ApiResult<GetCustomConfigResp> getUserConfig = kAppService.getUserConfig();
if (getUserConfig.isSuccess()) {
String config = getUserConfig.getData().getConfig();
System.out.println("用户配置: " + config);
}
9.2 卡密配置
更新卡密自定义配置:
// 更新卡密配置
UpdateCustomConfigReq updateKaConfigReq = new UpdateCustomConfigReq();
Map<String, String> config = new HashMap<>();
config.put("name", "李四");
config.put("age", "21");
updateKaConfigReq.setConfig(new Gson().toJson(config));
ApiResult<Void> updateResult = kAppService.updateKaConfig(updateKaConfigReq);
// 获取卡密配置
ApiResult<GetCustomConfigResp> getKaConfig = kAppService.getKaConfig();
if (getKaConfig.isSuccess()) {
String config = getKaConfig.getData().getConfig();
System.out.println("卡密配置: " + config);
}
10. 远程数据管理
10.1 添加远程数据
import cn.kauth.sdk.info.req.RemoteDataAddReq;
RemoteDataAddReq addReq = new RemoteDataAddReq();
addReq.setKey("data_test_1");
addReq.setValue("data_1_value");
ApiResult<Void> result = kAppService.addRemoteData(addReq);
10.2 获取远程数据
import cn.kauth.sdk.info.req.GetRemoteVarReq;
import cn.kauth.sdk.info.resp.RemoteNormalVarResp;
GetRemoteVarReq getReq = new GetRemoteVarReq();
getReq.setKey("data_test_1");
ApiResult<RemoteNormalVarResp> result = kAppService.getRemoteData(getReq);
if (result.isSuccess()) {
System.out.println("远程数据值: " + result.getData().getValue());
}
10.3 更新远程数据
import cn.kauth.sdk.info.req.RemoteDataUpdateReq;
RemoteDataUpdateReq updateReq = new RemoteDataUpdateReq();
updateReq.setKey("data_test_1");
updateReq.setValue("data_1_value_updated");
ApiResult<Void> result = kAppService.updateRemoteData(updateReq);
10.4 删除远程数据
import cn.kauth.sdk.info.req.RemoteDataDeleteReq;
RemoteDataDeleteReq deleteReq = new RemoteDataDeleteReq();
deleteReq.setKey("data_test_1");
ApiResult<Void> result = kAppService.deleteRemoteData(deleteReq);
11. 远程变量
获取远程变量(无需登录):
GetRemoteVarReq getRemoteVarReq = new GetRemoteVarReq();
getRemoteVarReq.setKey("var_1");
ApiResult<RemoteNormalVarResp> result = kAppService.getRemoteVar(getRemoteVarReq);
if (result.isSuccess()) {
System.out.println("远程变量值: " + result.getData().getValue());
}
12. 远程函数
调用远程函数:
import cn.kauth.sdk.info.req.CallFunctionReq;
import cn.kauth.sdk.info.resp.CallFunctionResp;
import java.util.Arrays;
import java.util.List;
CallFunctionReq req = new CallFunctionReq();
req.setFunctionName("test_function");
// 设置函数参数
List<CallFunctionReq.CallFunctionParamsReq> params = Arrays.asList(
new CallFunctionReq.CallFunctionParamsReq("a", "11"),
new CallFunctionReq.CallFunctionParamsReq("b", "22")
);
req.setFunctionParams(params);
ApiResult<CallFunctionResp> result = kAppService.callFunction(req);
if (result.isSuccess()) {
System.out.println("函数执行结果: " + result.getData().getResult());
}
13. 脚本更新
13.1 获取最新脚本信息
import cn.kauth.sdk.info.req.GetNewestScriptReq;
import cn.kauth.sdk.info.resp.GetNewestScriptResp;
GetNewestScriptReq req = new GetNewestScriptReq();
req.setScriptName("script_1");
ApiResult<GetNewestScriptResp> newestScript = kAppService.getNewestScript(req);
if (newestScript.isSuccess()) {
GetNewestScriptResp script = newestScript.getData();
System.out.println("脚本名称: " + script.getScriptName());
System.out.println("版本号: " + script.getVersionNumber());
System.out.println("版本描述: " + script.getVersionDescription());
System.out.println("脚本类型: " + script.getScriptType());
System.out.println("发布时间: " + script.getScriptReleaseTime());
}
13.2 获取脚本下载地址
import cn.kauth.sdk.info.req.ScriptDownloadReq;
import cn.kauth.sdk.info.resp.RemoteScriptDownloadResp;
ScriptDownloadReq req = new ScriptDownloadReq();
req.setScriptName("script_1");
req.setVersionNumber("1.0.2");
ApiResult<RemoteScriptDownloadResp> result = kAppService.getScriptDownload(req);
if (result.isSuccess()) {
String downloadUrl = result.getData().getDownloadUrl();
System.out.println("脚本下载地址: " + downloadUrl);
// 使用下载地址下载脚本内容
}
14. 完整示例
import cn.kauth.sdk.IKauthService;
import cn.kauth.sdk.IKAppService;
import cn.kauth.sdk.enums.KauthSignEnums;
import cn.kauth.sdk.impl.KauthServiceImpl;
import cn.kauth.sdk.info.config.ServiceConfig;
import cn.kauth.sdk.info.req.*;
import cn.kauth.sdk.info.resp.*;
import cn.kauth.sdk.tools.DeviceTools;
import com.google.gson.Gson;
public class KauthExample {
private static IKauthService kauthService;
private static final Gson gson = new Gson();
public static void main(String[] args) {
// 1. 初始化 SDK
kauthService = new KauthServiceImpl();
ServiceConfig serviceConfig = new ServiceConfig();
serviceConfig.setApiDomain("https://kauth.cn");
serviceConfig.setMerchantPublicKey("你的商户公钥");
serviceConfig.setProgramSecret("你的程序密钥");
serviceConfig.setProgramId(你的程序ID);
serviceConfig.setKauthSignEnums(KauthSignEnums.SIGN_TYPE_RSA);
kauthService.setServiceConfig(serviceConfig);
// 2. 卡密登录
KaLoginRequest kaLoginRequest = new KaLoginRequest();
kaLoginRequest.setKaPwd("你的卡密");
kaLoginRequest.setDeviceId(DeviceTools.getDeviceId());
kaLoginRequest.setPlatformType("windows");
kaLoginRequest.setCaptchaCode("");
kaLoginRequest.setCaptchaUuid("");
ApiResult<LoginResponse> loginResult = kauthService.kaLogin(kaLoginRequest);
if (loginResult.isSuccess()) {
System.out.println("登录成功!");
// 3. 获取应用服务
String token = loginResult.getData().getToken();
IKAppService kAppService = kauthService.getKAppService(token);
// 4. 获取用户信息
ApiResult<UserInfo> userInfo = kAppService.userInfo();
if (userInfo.isSuccess()) {
UserInfo user = userInfo.getData();
System.out.println("用户ID: " + user.getUserId());
System.out.println("服务类型: " + user.getServerType());
System.out.println("剩余次数: " + user.getServerRemainNum());
}
// 5. 使用远程数据
RemoteDataAddReq addReq = new RemoteDataAddReq();
addReq.setKey("my_data");
addReq.setValue("Hello World");
kAppService.addRemoteData(addReq);
GetRemoteVarReq getReq = new GetRemoteVarReq();
getReq.setKey("my_data");
ApiResult<RemoteNormalVarResp> data = kAppService.getRemoteData(getReq);
if (data.isSuccess()) {
System.out.println("远程数据: " + data.getData().getValue());
}
// 6. 退出登录
kAppService.loginOut();
} else {
System.out.println("登录失败: " + loginResult.getMsg());
}
}
}
15. 注意事项
SDK 下载:SDK 下载请登录后台管理系统,在系统首页进行下载。
需要登录的功能:登录后的功能需要通过
IKAppService调用,该实例通过kauthService.getKAppService(token)获取。设备ID:使用
DeviceTools.getDeviceId()获取设备ID,该方法会自动生成一个设备标识。配置存储:卡密配置和用户配置是分别独立的存储空间。
远程功能:远程函数和远程数据需要登录后才能使用。
脚本更新:脚本更新功能可以用于实现脚本在线更新。
验证码:验证码为可选功能,用于增强安全性。
并发登录:通过测试代码可以看到 SDK 支持并发登录处理。
设备绑定:卡密只允许绑定一个设备,如果已绑定其他设备,需要先解绑。
心跳机制:建议定时调用
userInfo()接口来保持登录状态。
16. 错误处理
所有 API 调用都会返回 ApiResult<T> 对象:
public class ApiResult<T> {
private Integer code; // 状态码,200表示成功
private String msg; // 提示信息
private Boolean success; // 是否成功
private T data; // 响应数据
}
// 使用示例
ApiResult<LoginResponse> result = kauthService.kaLogin(request);
if (result.isSuccess()) {
// 操作成功
LoginResponse loginResponse = result.getData();
} else {
// 操作失败
System.err.println("失败: " + result.getMsg());
}
17. 更多信息
- 更多 API 接口说明请参考 API 文档
- 如有问题,请联系技术支持:admin@verifyhub.cn 或 QQ: 5027954