懒人对接
简介
懒人精灵网络验证SDK是专为懒人精灵平台开发的网络验证解决方案,支持卡密登录、账号密码登录、试用登录等多种验证方式,同时提供远程配置、远程变量、远程函数调用等高级功能。
快速开始
1. 下载SDK
首先下载SDK文件: 网盘下载
网盘中有懒人精灵的三个相关的文件
- verifyhub.luaej (插件版本 1.8.0的版本+ 都能用,且插件轻量更小
- 懒人精灵兼容所有版本示例-UTF8.zip (C语言动态库,支持所有的懒人版本 包体积会更大,里面有一个kauth.rc的资源 存放了C的库 不可删除
- 懒人精灵兼容所有版本示例-GBK.zip (C语言动态库,主要是老版本比如1.4.8,还是用的GBK编码,里面有一个kauth.rc的资源 存放了C的库 不可删除
- 他们只是SDK方式实现的加密解密有差异,其他的都一样
快速接入卡密
local verifyhub = require('verifyhub')
-- 配置参数
local paramApiDomain = "https://verifyhub.cn"
local paramProgramId = "222222222" --在后台系统 程序管理-> 程序列表 ->程序ID
local paramProgramSecret = "xxxxxxx" --在后台系统 程序管理-> 程序列表 ->程序密钥
local paramMerchantPublicKey ="xxxxxxx" --在后台系统 系统设置 -> 密钥配置 -> RSA公钥 -> PKCS#8格式
local paramKauthSignType = "RSA"
local platformType = "lanren_mobile"
-- 初始化配置
verifyhub.initConfig(paramApiDomain, paramProgramId, paramMerchantPublicKey, paramProgramSecret, paramKauthSignType)
verifyhub.setDeviceId(verifyhub.getDeviceId())
local loginResult = verifyhub.kaLogin("8dj9t25k",platformType,"","")
print(loginResult)
2. 使用WEB UI接入卡密
效果图

local verifyhub = require('verifyhub')
-- 配置参数
local paramApiDomain = "https://verifyhub.cn"
local paramProgramId = "xxxx" --在后台系统的 程序管理 -> 程序列表 -> 程序id
local paramProgramSecret = "xxxx" --在后台系统的 程序管理 -> 程序列表 -> 程序密钥
local paramMerchantPublicKey ="xxxxx" --在后台系统的 系统设置 -> 密钥设置 -> RSA公钥 -> PKCS#8格式
local paramKauthSignType = "RSA" --默认用RSA即可
local platformType = "lanren_mobile" -- 给平台级开发者专用的,一般用这个默认值即可
local autoLoginSuccess = false -- 是否自动登录成功
-- 初始化配置
verifyhub.initConfig(paramApiDomain, paramProgramId, paramMerchantPublicKey, paramProgramSecret, paramKauthSignType)
local deviceid = verifyhub.getDeviceId()
print("[kauth] deviceid:" .. deviceid)
verifyhub.setDeviceId(deviceid)
-- 一行代码热更新,打包的lrj文件要上传到后台系统
verifyhub.autoUpdateLrj("lanren_1","1.0.0")
-- ==================== 登录成功回调 ====================
-- H5登录成功后调用此函数
function onLoginSuccess(resultJson)
print("[Lua] 登录成功回调:", resultJson)
local msg = "1.0.0登录成功-" .. resultJson.msg
toast(msg, 0, 0, 12)
-- 这里可以做一些登录成功后的操作
ui.dismiss("layout1")
autoLoginSuccess = true --改为true 这样最下面的while循环就会停止
end
-- ==================== 心跳失败回调 ====================
function onPongFail(reason)
print("[Lua] 心跳失败:", reason)
-- 心跳失败回调,你可以在这里自定义处理逻辑,比如重新打开登录窗口 或者退出脚本
toast("即将退出脚本(心跳检测失败):"..reason,0,0,12)
sleep(3000)
exitScript()
end
-- 卡密已经登录过的 自动登录,如果不需要自动登录功能,请删除该代码
local kaPwd = verifyhub.readLocalFile("kaPwd", "")
autoLoginSuccess = false
if kaPwd and kaPwd ~= "" then
print("[Lua] 检测到保存的卡密,开始自动登录尝试")
-- 最多尝试登录10次
local MAX_AUTO_LOGIN_ATTEMPTS = 10
for i = 1, MAX_AUTO_LOGIN_ATTEMPTS do
print("[Lua] 自动登录第 " .. i .. " 次尝试")
toast("自动登录中 第" .. i .. "次", 0, 0, 12)
local result = verifyhub.kaLogin(kaPwd, platformType, "", "")
print("自动登录结果",result)
if result.code == 2000 or result.code == 1000 then
-- 错误码2000 |1000 不用重试了,比如卡密被禁用、被删除 等等
toast("自动登录失败:" .. result.msg, 0, 0, 12)
verifyhub.deleteLocalFile("kaPwd")
break
end
if result.success then
print("[Lua] 自动登录成功!")
autoLoginSuccess = true
onLoginSuccess(result)
break
else
print("[Lua] 自动登录失败,常见错误信息: " .. tostring(result.msg))
end
sleep(500)
end
if not autoLoginSuccess then
print("[Lua] 10次自动登录都失败,求助UI登录")
end
end
-- ==================== 单码体系操作 ====================
-- 卡密登录
function onCardLogin(cardKey)
print("[Lua] 卡密登录:", cardKey)
local result = verifyhub.kaLogin(cardKey, platformType, "", "")
print("[Lua] 卡密登录结果:", result)
-- 回调H5结果
local resultJson = jsonLib.encode(result)
print("[Lua] 回调JSON:", resultJson)
ui.callJs("webId", "javascript:onLuaCallBack('cardLogin', " .. resultJson .. ")")
-- 如果登录成功
if result.success then
verifyhub.writeToLocalFile("kaPwd", cardKey)
onLoginSuccess(result)
end
end
-- 以卡充卡
function onCardRecharge(currentCardKey, rechargeCardKey)
print("[Lua] 以卡充卡:", currentCardKey, rechargeCardKey)
local result = verifyhub.rechargeKa(currentCardKey, rechargeCardKey)
print("[Lua] 以卡充卡结果:", result)
local resultJson = jsonLib.encode(result)
ui.callJs("webId", "javascript:onLuaCallBack('cardRecharge', " .. resultJson .. ")")
end
-- 卡密解绑
function onCardUnbind(cardKey)
print("[Lua] 卡密解绑:", cardKey)
local result = verifyhub.unbindDeviceKaPwd(cardKey)
print("[Lua] 卡密解绑结果:", result)
local resultJson = jsonLib.encode(result)
ui.callJs("webId", "javascript:onLuaCallBack('cardUnbind', " .. resultJson .. ")")
end
-- ==================== 账密体系操作 ====================
-- 账密登录
function onAccountLogin(username, password)
print("[Lua] 账密登录:", username)
local result = verifyhub.pwdLogin(username, password, "", "")
print("[Lua] 账密登录结果:", result)
local resultJson = jsonLib.encode(result)
ui.callJs("webId", "javascript:onLuaCallBack('accountLogin', " .. resultJson .. ")")
if result.success then
onLoginSuccess(result)
end
end
-- 账号注册
function onAccountRegister(username, password, nickName, cardKey)
print("[Lua] 账号注册:", username)
local result = verifyhub.register(username, password, nickName, cardKey, "", "")
print("[Lua] 账号注册结果:", result)
local resultJson = jsonLib.encode(result)
ui.callJs("webId", "javascript:onLuaCallBack('accountRegister', " .. resultJson .. ")")
end
-- 账号改密
function onAccountChangePassword(username, oldPassword, newPassword)
print("[Lua] 账号改密:", username)
local result = verifyhub.changePassword(username, newPassword, oldPassword, newPassword, "", "")
print("[Lua] 账号改密结果:", result)
local resultJson = jsonLib.encode(result)
ui.callJs("webId", "javascript:onLuaCallBack('accountChangePassword', " .. resultJson .. ")")
end
-- 账号充值
function onAccountRecharge(username, cardKey)
print("[Lua] 账号充值:", username)
local result = verifyhub.recharge(username, cardKey, "", "")
print("[Lua] 账号充值结果:", result)
local resultJson = jsonLib.encode(result)
ui.callJs("webId", "javascript:onLuaCallBack('accountRecharge', " .. resultJson .. ")")
end
-- 账号解绑
function onAccountUnbind(username, password)
print("[Lua] 账号解绑:", username)
local result = verifyhub.unbindDevice(username, password, "", "")
print("[Lua] 账号解绑结果:", result)
local resultJson = jsonLib.encode(result)
ui.callJs("webId", "javascript:onLuaCallBack('accountUnbind', " .. resultJson .. ")")
end
-- 试用登录
function onTrial()
print("[Lua] 试用登录")
local trialLoginResult = verifyhub.trialLogin()
print("[Lua] 试用登录结果:", trialLoginResult)
local resultJson = jsonLib.encode(trialLoginResult)
ui.callJs("webId", "javascript:onLuaCallBack('trial', " .. resultJson .. ")")
-- 如果试用登录成功
if trialLoginResult.success then
onLoginSuccess(trialLoginResult)
end
end
if autoLoginSuccess == false then
ui.newLayout("layout1")
ui.addWebView("layout1", "webId", "https://h5.verifyhub.cn/login?platform=lanren")
ui.show("layout1", false, 1, 0, false)
while autoLoginSuccess==false do
sleep(1000)
end
end
-- 开启心跳,,最多允许10次失败,可自定义
verifyhub.pongServer(onPongFail, 10)
--请在下面开始编写您的脚本 不太建议这样裸奔,懒人脚本很容易被hook 不安全
-- 参考防破解方案 : https://blog.csdn.net/s591510922/article/details/155245167
print("要执行脚本了")
verifyhub.autoReptError(function()
--在这里写代码,如果出现错误会自动上报堆栈信息,可在管理后台查看错误日志
local obj = nil
print(obj.method()) -- 访问 nil 的方法
end,"模拟错误脚本")
sleep(100000) --假装执行脚本
toast("脚本执行结束")
3. 热更lrj文件
-- 一行代码热更
-- first_update_lrj 为后台配置的脚本名称
-- currentScriptVersion 为当前脚本版本
verifyhub.autoUpdateLrj("first_update_lrj", "1.0.0")
4. 使用远程脚本执行
local scriptName = "test_script" -- 要个后台创建的脚本名称一致
local scriptInfo = verifyhub.getNewestScript(scriptName)
if scriptInfo.success then
print("脚本名称:" .. scriptInfo.scriptName)
print("版本号:" .. scriptInfo.versionNumber)
print("版本描述:" .. scriptInfo.versionDescription)
local downloadInfo = verifyhub.getScriptDownload(scriptName , scriptInfo.versionNumber)
if downloadInfo.success then
print("下载地址:" .. downloadInfo.downloadUrl)
local ret,code = httpGet(downloadInfo.downloadUrl)
--远程代码加载到lua中 如果有加密要求 请自己上传服务器的时候加密,执行前解密
local func, err = load(ret)
--执行远程代码
func()
else
print("获取下载地址失败:" .. downloadInfo.msg)
end
else
print("获取脚本信息失败:" .. scriptInfo.msg)
end
新增远程脚本 (可以自行加密后上传)

远程脚本执行效果

卡密登录
local loginResp = verifyhub.kaLogin("卡密", platformType, "", "")
if loginResp.success then
print("登录成功,用户ID:" .. loginResp.userId)
else
print("登录失败:" .. loginResp.msg)
end
账号密码登录
local loginResp = verifyhub.pwdLogin("用户名", "密码", "", "")
if loginResp.success then
print("登录成功,用户ID:" .. loginResp.userId)
else
print("登录失败:" .. loginResp.msg)
end
试用登录
local loginResp = verifyhub.trialLogin()
if loginResp.success then
print("试用登录成功,用户ID:" .. loginResp.userId)
else
print("试用登录失败:" .. loginResp.msg)
end
获取用户信息
local userInfo = verifyhub.userInfo()
if userInfo.success then
print("用户ID:" .. userInfo.userId)
print("服务到期时间:" .. userInfo.serverExpireTime)
print("服务类型:" .. userInfo.serverType)
else
print("获取用户信息失败:" .. userInfo.msg)
end
修改密码
local result = verifyhub.changePassword("用户名", "旧密码", "新密码", "确认新密码", "", "")
if result.success then
print("密码修改成功")
else
print("密码修改失败:" .. result.msg)
end
退出登录
local result = verifyhub.loginOut()
if result.success then
print("退出登录成功")
else
print("退出登录失败:" .. result.msg)
end
获取卡密配置
local config = verifyhub.getKaConfig()
if config.success then
print("卡密配置:" .. config.config)
else
print("获取卡密配置失败:" .. config.msg)
end
修改卡密配置
local result = verifyhub.updateKaConfig("新的配置内容")
if result.success then
print("卡密配置更新成功")
else
print("卡密配置更新失败:" .. result.msg)
end
获取用户配置
local config = verifyhub.getUserConfig()
if config.success then
print("用户配置:" .. config.config)
else
print("获取用户配置失败:" .. config.msg)
end
修改用户配置
local result = verifyhub.updateUserConfig("新的用户配置")
if result.success then
print("用户配置更新成功")
else
print("用户配置更新失败:" .. result.msg)
end
添加远程数据
local result = verifyhub.addRemoteData("键名", "值")
if result.success then
print("远程数据添加成功")
else
print("远程数据添加失败:" .. result.msg)
end
获取远程数据
local data = verifyhub.getRemoteData("键名")
if data.success then
print("远程数据值:" .. data.value)
else
print("获取远程数据失败:" .. data.msg)
end
更新远程数据
local result = verifyhub.updateRemoteData("键名", "新值")
if result.success then
print("远程数据更新成功")
else
print("远程数据更新失败:" .. result.msg)
end
删除远程数据
local result = verifyhub.deleteRemoteData("键名")
if result.success then
print("远程数据删除成功")
else
print("远程数据删除失败:" .. result.msg)
end
获取远程变量
local variable = verifyhub.getRemoteVar("变量名")
if variable.success then
print("远程变量值:" .. variable.value)
else
print("获取远程变量失败:" .. variable.msg)
end
调用远程函数
local functionParams = {
{
paramName = "param1",
paramValue = "值1"
},
{
paramName = "param2",
paramValue = "值2"
}
}
local result = verifyhub.callFunction("函数名", functionParams)
if result.success then
print("远程函数返回值:" .. result.result)
else
print("调用远程函数失败:" .. result.msg)
end
获取最新脚本信息
local scriptInfo = verifyhub.getNewestScript("脚本名称")
if scriptInfo.success then
print("脚本名称:" .. scriptInfo.scriptName)
print("版本号:" .. scriptInfo.versionNumber)
print("版本描述:" .. scriptInfo.versionDescription)
else
print("获取脚本信息失败:" .. scriptInfo.msg)
end
获取脚本下载地址
local downloadInfo = verifyhub.getScriptDownload("脚本名称", "版本号")
if downloadInfo.success then
print("下载地址:" .. downloadInfo.downloadUrl)
else
print("获取下载地址失败:" .. downloadInfo.msg)
end
热更新脚本
获取懒人精灵打包的lr脚本下载地址后,可以使用热更新功能更新懒人的脚本代码:
if scriptDownloadResult.success then
-- 下载文件,安装热更新
local lrPath = getSdPath() .. newestResult.versionNumber .. ".lr"
local downloadStatus = downloadFile(scriptDownloadResult, lrPath)
if downloadStatus == 0 then
installLrPkg(lrPath)
end
end
图形验证码
部分接口支持图形验证码功能:
local captchaResult = verifyhub.getCaptcha(verifyhub.generateUUID())
if captchaResult.success then
print("验证码UUID:" .. captchaResult.uuid)
print("验证码图片Base64:" .. captchaResult.captchaBase64)
else
print("获取验证码失败:" .. captchaResult.msg)
end
常见问题
1. 设备ID问题
懒人精灵在某些情况下可能无法正确获取设备ID,SDK提供了自动生成设备ID的方案:
verifyhub.setDeviceId(verifyhub.getDeviceId()) -- 使用SDK自动生成的设备ID
2. 网络请求失败
如果遇到网络请求失败的问题,请检查:
- 网络连接是否正常
- 服务器地址是否正确
- 程序ID和密钥是否正确
- 设备是否被封禁
3. 签名错误
如果出现签名错误,请检查:
- 时间是否同步
- 参数是否正确传递
- 密钥是否正确配置