Python 快速接入
华网网络验证提供了官方的 Python 封装库,方便 Python 开发者接入。
接入须知
获取方式
下载地址:https://wwds.lanzouq.com/b058v0xdg 密码:elpz
或者加群839808671在群文件下载SDK,有问题也可在此群交流。
使用方式
将HWSDK文件夹解压放入你的项目中即可,然后在脚本中通过 from HWSDK import * 引入。
压缩包中的main.py是一个示例。
一个完整示例:
from HWSDK import *
import os
import time
# 初始化 app_key 和 app_secret 在开发者后台新建软件获取
hw = HWSDK(appKey='', appSecret='')
hw.debug = True
# 心跳失败回调
def onHeartbeatFailed(hret):
print(hret.message)
if hret.code == 10207:
os._exit(1) # 退出脚本
print("心跳失败,尝试重登...")
loginRet = hw.cardLogin()
if loginRet.code == 0:
print("重登成功")
else:
print(loginRet.message)
os._exit(1)
if __name__ == '__main__':
hw.on_heartbeat_failed = onHeartbeatFailed
hw.setDeviceId('123') # 设置设备唯一ID
hw.setCard('') # 设置卡密
ret = hw.cardLogin() # 卡密登录
if ret.code != 0:
print(ret.message)
os._exit(1)
print("卡密卡类:" + hw.loginRet.cardType)
print("卡密到期时间:" + hw.loginRet.expires)
time.sleep(1)
# 登录成功,后面写你的业务代码
while 1:
print(hw.getHeartbeatResult())
time.sleep(5)
可更改变量
| 变量 | 类型 | 默认值 | 说明 |
|---|---|---|---|
hw.debug | bool | True | 开启后会在控制台输出每次请求的详细信息 |
hw._auto_heartbeat | bool | True | 是否自动开启心跳线程 |
hw._heartbeat_gap | int | 120 | 心跳间隔(秒),请勿低于60 |
hw.on_heartbeat_failed | function | lambda ret: print(ret.message) | 心跳失败回调函数 |
可获取变量
TIP
注意:以下变量都为登录成功后才能取到值的。
| 变量 | 类型 | 说明 |
|---|---|---|
hw.loginRet.cardType | string | 卡密类型,例如:月卡 |
hw.loginRet.expires | string | 过期时间,例如:2024-02-14 19:44:20 |
hw.loginRet.expiresTs | int | 过期时间戳,例如:1702780478 |
hw.loginRet.config | string | 卡密或用户自定义配置 |
hw.is_trial | bool | 是否是试用登录 |
初始化
创建 SDK 实例
hw = HWSDK(appKey='', appSecret='')
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| appKey | 是 | string | 开发者后台新建软件获取 |
| appSecret | 是 | string | 开发者后台新建软件获取 |
设置卡密
hw.setCard(card)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| card | 是 | string | 用户填写的卡密(长度不超过45位) |
设置用户账号
hw.setUser(username, password)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| username | 是 | string | 用户名(长度1-20位) |
| password | 是 | string | 用户密码(长度6-30位) |
设置设备号
hw.setDeviceId(deviceId)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| deviceId | 是 | string | 设备唯一标识 |
设置备用 Host
hw.setBackupHosts(host)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| host | 是 | string | 备用 API 域名 |
工具方法
获取网络时间戳
timestamp = HWSDK.timestamp()
注意:这是静态方法,可直接通过类名调用。
参数:无
返回值:int,例:1703870486
获取心跳结果
ret = hw.getHeartbeatResult()
参数:无
返回值:DotDict,例:{"code": 0, "message": "还未开始验证"}
获取剩余时长
remaining = hw.getTimeRemaining()
参数:无
返回值:int,剩余秒数,例:9000;已过期返回 0
更新 Host 列表
success = hw.updateHost()
从服务器拉取最新 Host 列表并更新。
参数:无
返回值:bool,成功返回 True
卡密相关
卡密登录
TIP
注意:调用此接口前需先调用 hw.setCard(card) 和 hw.setDeviceId(deviceId)。 登录成功后将自动启动心跳线程,开发者无需关注心跳细节,可通过 hw.getHeartbeatResult() 获取当前心跳结果。
ret = hw.cardLogin()
参数:无
返回值:DotDict,参考 卡密登录接口返回
卡密退出登录
ret = hw.cardLogout()
参数:无
返回值:DotDict,例:{"code": 0, "message": "OK"}
卡密解绑设备
TIP
说明:需先在开发者后台配置软件开启设备绑定且可解除绑定。该接口只能在卡密登录后调用。
ret = hw.cardUnbindDevice()
参数:无
返回值:DotDict,例:{"code": 0, "message": "OK"}
卡密设置解绑密码
TIP
说明:需先在开发者后台配置软件开启设备绑定且可解除绑定。该密码用于绑定设备丢失时通过密码解绑。
ret = hw.setCardUnbindPassword(password)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| password | 是 | string | 解绑密码(6-10位数字和字母组合) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
卡密通过密码解绑设备
ret = hw.cardUnbindDeviceByPassword(password)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| password | 是 | string | 解绑密码(6-10位数字和字母组合) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
卡密充值(以卡充卡)
ret = hw.cardRecharge(card, use_card)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| card | 是 | string | 被充值的卡密(长度不超过45位) |
| use_card | 是 | string | 充值使用的卡密(长度不超过45位) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
用户相关
用户注册(通过卡密)
ret = hw.userRegister(username, password, card)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| username | 是 | string | 用户名(长度不超过20位) |
| password | 是 | string | 用户密码(长度6-30位) |
| card | 是 | string | 注册使用的卡密(长度不超过45位) |
返回值:DotDict,例:{"code": 0, "message": "ok"}
用户登录
TIP
注意:调用此接口前需先调用 hw.setUser(username, password)。 登录成功后将自动启动心跳线程。
ret = hw.userLogin()
参数:无
返回值:DotDict,参考 用户登录接口返回
用户退出登录
ret = hw.userLogout()
参数:无
返回值:DotDict,例:{"code": 0, "message": "OK"}
用户修改密码
ret = hw.userChangePassword(username, password, new_password)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| username | 是 | string | 用户名(长度不超过20位) |
| password | 是 | string | 当前密码(长度6-30位) |
| new_password | 是 | string | 新密码(长度6-30位) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
用户充值(通过卡密)
ret = hw.userRecharge(username, card)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| username | 是 | string | 用户名(长度不超过20位) |
| card | 是 | string | 充值使用的卡密(长度不超过45位) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
试用相关
试用登录
TIP
注意:调用此接口前需先调用 hw.setDeviceId(deviceId)。 登录成功后将自动启动心跳线程。
ret = hw.trialLogin()
参数:无
返回值:DotDict,参考 试用登录接口返回
试用退出登录
ret = hw.trialLogout()
注意:试用退出登录不会发送 HTTP 请求,仅清理本地状态。
参数:无
返回值:DotDict,例:{"code": 0, "message": "OK"}
配置相关
获取卡密配置
TIP
注意:调用此接口前需先调用 hw.setCard(card)。
ret = hw.getCardConfig()
参数:无
返回值:DotDict,参考 卡密配置接口返回
更新卡密配置
ret = hw.updateCardConfig(config)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| config | 是 | string | 自定义配置(长度不超过512位) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
获取用户配置
TIP
注意:调用此接口前需先调用 hw.setUser(username, password)。
ret = hw.getUserConfig()
参数:无
返回值:DotDict,参考 用户配置接口返回
更新用户配置
ret = hw.updateUserConfig(config)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| config | 是 | string | 自定义配置(长度不超过512位) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
软件相关
获取软件配置
ret = hw.getSoftwareConfig()
参数:无
返回值:DotDict,参考 软件配置接口返回
获取软件公告
ret = hw.getSoftwareNotice()
参数:无
返回值:DotDict,参考 软件公告接口返回
获取软件最新版本
ret = hw.getSoftwareLatestVersion(current_ver)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| current_ver | 否 | string | 当前本地版本号(长度不超过30位),为空默认返回发布版本 |
返回值:DotDict,参考 软件版本接口返回
远程变量
获取远程变量
ret = hw.getRemoteVar(key)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| key | 是 | string | 远程变量名(长度不超过64位) |
返回值:DotDict,参考 远程变量接口返回
创建远程变量
ret = hw.createRemoteVar(key, value)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| key | 是 | string | 远程变量名(长度不超过64位) |
| value | 是 | string | 远程变量值(长度不超过60000位) |
返回值:DotDict,参考 创建远程变量接口返回
修改远程变量
ret = hw.updateRemoteVar(key, value)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| key | 是 | string | 远程变量名(长度不超过64位) |
| value | 是 | string | 远程变量值(长度不超过60000位) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
删除远程变量
ret = hw.deleteRemoteVar(key)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| key | 是 | string | 远程变量名(长度不超过64位) |
返回值:DotDict,例:{"code": 0, "message": "OK"}
调用远程函数
ret = hw.callRemoteFunc(funName, params)
远程函数示例(在开发者后台定义):
function add(a, b) {
return a + b;
}
脚本中调用:
ret = hw.callRemoteFunc("add", [1, 2])
if ret.code == 0:
print(ret.data) # 远程函数返回值在 data 中
else:
print(ret.message)
| 参数名 | 必传 | 类型 | 参数说明 |
|---|---|---|---|
| funName | 是 | string | 远程函数名(长度不超过64位) |
| params | 是 | list | 参数列表,例:[1, 2] |
返回值:DotDict,例:{"code": 0, "message": "OK", "data": {"result": 3}}
