Java 快速接入
华网网络验证提供了官方的 Jar 封装库,方便 Java 开发者接入。
接入须知
获取方式
下载地址:https://wwds.lanzouq.com/b00oc98uid 密码:5rqo 或者加群839808671在群文件下载SDK,有问题也可在此群交流。
鸣谢
作者:wiki 提供基础验证包源码,由官方调整优化发布
使用方式
将 hwsdk.jar 放入你的项目中即可,然后在代码中通过 import com.hwsdk.hw; 引入。 压缩包中的 Main.java 是一个示例。
一个完整的示例:
package com.hw.test;
import com.hwsdk.hw;
import com.alibaba.fastjson.JSONObject;
public class Main {
public static void main(String[] args) throws Exception {
// 初始化 SDK
hw.init("APPKEY", "APPSECRET");
// 设置心跳失败回调(可选,但建议设置)
hw.setCallback(jsonObject -> {
System.out.println("心跳回调: " + jsonObject.toJSONString());
if (jsonObject.getInteger("code") == 10207) {
System.out.println("心跳下线");
System.exit(0);
}
try {
System.out.println("心跳失败,2s后尝试重登...");
Thread.sleep(2000);
JSONObject ret1 = hw.cardLogin();
if (ret1.getInteger("code") == 0) {
System.out.println("重新登录成功");
} else {
System.out.println(ret1.getString("message"));
System.exit(0);
}
} catch (Exception e) {
e.printStackTrace();
}
});
// 开启调试模式(默认关闭)
hw.setDebug(true);
// 设置卡密
hw.setCard("your_card");
// 设置设备ID
hw.setDeviceId("javaTest");
// 卡密登录
JSONObject ret = hw.cardLogin();
if (ret.getInteger("code") != 0) {
System.out.println(ret.getString("message"));
System.exit(0);
}
JSONObject loginRet = hw.getLoginRet();
System.out.println("卡密类型:" + loginRet.getString("cardType"));
System.out.println("卡密到期时间:" + loginRet.getString("expires"));
// hold 主线程不要退出(实际项目中替换为你的业务代码)
while (true) {
System.out.print("卡密到期剩余:");
System.out.print(hw.getTimeRemaining());
System.out.println(" s");
System.out.print("心跳结果(非零则心跳异常):");
System.out.println(hw.getHeartbeatResult().getInteger("code"));
Thread.sleep(5000);
}
}
}
SDK 配置方法
这些方法应在调用 hw.init() 之后、登录之前调用。
setDebug
设置调试模式,开启后控制台会输出每次请求的详细信息。
hw.setDebug(debug)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| debug | 是 | Boolean | 是否开启调试,默认 false |
setDeviceId
设置设备唯一标识码。
hw.setDeviceId(deviceId)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| deviceId | 是 | String | 设备码 |
setCallback
设置心跳失败回调。当自动心跳检测失败时(如卡密过期、被顶号等),SDK 会通过此回调通知你。
hw.setCallback(callBack)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| callBack | 否 | HeartbeatCallBack | 实现 void onHeartbeatFailed(JSONObject hret) 的接口实例 |
setAutoHeartbeat
设置登录成功后是否自动启动心跳线程。默认为 true。
hw.setAutoHeartbeat(autoHeartbeat)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| autoHeartbeat | 是 | Boolean | 是否自动心跳,默认 true |
setHeartbeatTime
设置心跳间隔时长。
hw.setHeartbeatTime(heartbeatTime)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| heartbeatTime | 是 | int | 心跳间隔(单位:分钟),默认 2 |
setBackupHosts
添加备用服务器域名。当主域名连通性异常时 SDK 会自动切换。
hw.setBackupHosts(host)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| host | 是 | String | 备用域名,如 backup.hwwlyz.com |
初始化
init
初始化 SDK,必须在调用其他接口之前执行。
hw.init("appKey", "appSecret");
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| appKey | 是 | String | 开发者后台获取的 AppKey |
| appSecret | 是 | String | 开发者后台获取的 AppSecret |
初始化卡密
setCard
hw.setCard(card)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| card | 是 | String | 用户填写的卡密(长度不超过45位) |
初始化用户账号
setUser
hw.setUser(username, password)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| username | 是 | String | 用户名(长度1-20位) |
| password | 是 | String | 用户密码(长度6-30位) |
获取时间戳(网络时间)
getTimestamp
long timestamp = hw.getTimestamp()
无参数。
返回值:long 类型,秒级时间戳,例:1703870486
获取登录信息
getLoginRet
获取登录成功后返回的数据,包含卡密类型、过期时间、自定义配置等。
JSONObject ret = hw.getLoginRet()
无参数。
返回值:JSONObject。常用字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| cardType | String | 卡密类型,例如 "月卡" |
| expires | String | 过期时间,例如 "2024-02-14 19:44:20" |
| expiresTs | long | 过期时间戳(秒),例如 1702780478 |
| config | String | 卡密或用户自定义配置 |
获取心跳结果
getHeartbeatResult
获取最近一次自动心跳的结果。配合 setCallback 使用可实时感知心跳异常。
JSONObject ret = hw.getHeartbeatResult()
无参数。
返回值:JSONObject,例:{"code": 0, "message": ""}
获取剩余时长
getTimeRemaining
获取当前登录态剩余有效时长。需在登录成功后调用。
long ret = hw.getTimeRemaining()
无参数。
返回值:long 类型,剩余秒数,例:9000。未登录返回 0。
卡密类
cardLogin
卡密登录。调用前需先 hw.setCard(card) 和 hw.setDeviceId(deviceId)。 登录成功后,如果 autoHeartbeat 为 true(默认),SDK 会自动启动心跳线程。
JSONObject ret = hw.cardLogin()
无参数。
返回值:JSONObject,code 为 "0" 表示成功。
cardHeartbeat
手动执行一次卡密心跳。通常情况下 SDK 会自动心跳,无需手动调用。
JSONObject ret = hw.cardHeartbeat()
无参数。
返回值:JSONObject
cardLogout
卡密退出登录,会自动关闭心跳线程。
JSONObject ret = hw.cardLogout()
无参数。
返回值:JSONObject,例:{"code": 0, "message": "OK"}
cardUnbindDevice
解绑当前卡密绑定的设备。需在卡密登录后调用,且开发者后台需开启设备绑定功能。
JSONObject ret = hw.cardUnbindDevice()
无参数。
返回值:JSONObject,例:{"code": 0, "message": "OK"}
cardSetUnbindPassword
设置解绑密码。用于设备丢失等场景下通过密码解绑设备。需在卡密登录后调用。
JSONObject ret = hw.cardSetUnbindPassword(password)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| password | 是 | String | 解绑密码(6-10位数字和字母组合) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
cardUnbindPassword
通过解绑密码解绑设备。适用于无法在原设备登录时的情况,无需登录即可调用。
JSONObject ret = hw.cardUnbindPassword(password)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| password | 是 | String | 解绑密码(6-10位数字和字母组合) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
cardRecharge
用充值卡给卡密充值。
JSONObject ret = hw.cardRecharge(rechargeCard, usedCard)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| rechargeCard | 是 | String | 被充值的卡密(长度不超过45位) |
| usedCard | 是 | String | 充值使用的卡密(长度不超过45位) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
getCardConfig
获取卡密的自定义配置。
JSONObject ret = hw.getCardConfig()
无参数。
返回值:JSONObject
setCardConfig
修改卡密的自定义配置。
JSONObject ret = hw.setCardConfig(config)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| config | 是 | String | 自定义配置(长度不超过512位) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
用户类
userRegister
通过卡密注册用户账号。
JSONObject ret = hw.userRegister(username, password, card)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| username | 是 | String | 用户名(长度不超过20位) |
| password | 是 | String | 用户密码(长度6-30位) |
| card | 是 | String | 注册使用的卡密(长度不超过45位) |
返回值:JSONObject,例:{"code": 0, "message": "ok"}
userLogin
用户登录。调用前需先 hw.setUser(username, password)。 登录成功后,如果 autoHeartbeat 为 true(默认),SDK 会自动启动心跳线程。
JSONObject ret = hw.userLogin()
无参数。
返回值:JSONObject,code 为 "0" 表示成功。
userHeartbeat
手动执行一次用户心跳。通常情况下 SDK 会自动心跳,无需手动调用。
JSONObject ret = hw.userHeartbeat()
无参数。
返回值:JSONObject
userLogout
用户退出登录,会自动关闭心跳线程。
JSONObject ret = hw.userLogout()
无参数。
返回值:JSONObject,例:{"code": 0, "message": "OK"}
userChangePassword
修改用户密码。
JSONObject ret = hw.userChangePassword(username, oldPassword, newPassword)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| username | 是 | String | 用户名(长度不超过20位) |
| oldPassword | 是 | String | 当前密码(长度6-30位) |
| newPassword | 是 | String | 新密码(长度6-30位) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
userRecharge
用充值卡给用户充值。
JSONObject ret = hw.userRecharge(username, usedCard)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| username | 是 | String | 用户名(长度不超过20位) |
| usedCard | 是 | String | 充值使用的卡密(长度不超过45位) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
getUserConfig
获取用户的自定义配置。
JSONObject ret = hw.getUserConfig()
无参数。
返回值:JSONObject
setUserConfig
修改用户的自定义配置。
JSONObject ret = hw.setUserConfig(config)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| config | 是 | String | 自定义配置(长度不超过512位) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
试用类
trialLogin
试用登录。需先 hw.setDeviceId(deviceId)。 登录成功后,如果 autoHeartbeat 为 true(默认),SDK 会自动启动心跳线程。
JSONObject ret = hw.trialLogin()
无参数。
返回值:JSONObject,code 为 "0" 表示成功。
trialHeartbeat
手动执行一次试用心跳。通常情况下 SDK 会自动心跳,无需手动调用。
JSONObject ret = hw.trialHeartbeat()
无参数。
返回值:JSONObject
注意:试用登录没有独立的退出登录接口,可以调用
cardLogout()或userLogout()使用相同的退出逻辑,或者直接重启应用。
远程变量
createRemoteVar
创建远程变量。
JSONObject ret = hw.createRemoteVar(key, value)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| key | 是 | String | 远程变量名(长度不超过64位) |
| value | 是 | String | 远程变量值(长度不超过60000位) |
返回值:JSONObject
updateRemoteVar
更新远程变量。
JSONObject ret = hw.updateRemoteVar(key, value)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| key | 是 | String | 远程变量名(长度不超过64位) |
| value | 是 | String | 远程变量值(长度不超过60000位) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
getRemoteVar
获取远程变量。
JSONObject ret = hw.getRemoteVar(key)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| key | 是 | String | 远程变量名(长度不超过64位) |
返回值:JSONObject
deleteRemoteVar
删除远程变量。
JSONObject ret = hw.deleteRemoteVar(key)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| key | 是 | String | 远程变量名(长度不超过64位) |
返回值:JSONObject,例:{"code": 0, "message": "OK"}
callRemoteFun
调用远程函数。
JSONObject ret = hw.callRemoteFun(funName, params)
示例 — 假设远程函数为:
function add(a, b) {
return a + b;
}
Java 中调用:
import com.alibaba.fastjson.JSONArray;
JSONArray params = new JSONArray();
params.add(1);
params.add(2);
JSONObject ret = hw.callRemoteFun("add", params);
if ("0".equals(ret.getString("code"))) {
System.out.println(ret.getJSONObject("data").getString("result"));
} else {
System.out.println(ret.getString("message"));
}
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| funName | 是 | String | 远程函数名(长度不超过64位) |
| params | 是 | JSONArray | 参数列表,例:[1, 2] |
返回值:JSONObject,例:{"code": 0, "message": "OK", "data": {"result": 3}}
软件类
getSoftwareConfig
获取软件配置。
JSONObject ret = hw.getSoftwareConfig()
无参数。
返回值:JSONObject
getSoftwareNotice
获取软件公告。
JSONObject ret = hw.getSoftwareNotice()
无参数。
返回值:JSONObject
setSoftwareVersion
设置当前软件的本地版本号,用于后续调用 getSoftwareVersion() 检查更新。
hw.setSoftwareVersion(version)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| version | 是 | String | 当前本地版本号,如 "v1.0.0" |
getSoftwareVersion
检查软件最新版本。需先调用 hw.setSoftwareVersion(version)。
JSONObject ret = hw.getSoftwareVersion()
无参数。
返回值:JSONObject
