EasyClick参考代码复制修改即可
//在主方法开头调用此方法
function yanKaMi() {
//请求地址
var 请求地址 = "https://api.yankami.cn/"
//卡密后台登录账号 获取自己项目的信息
var 开发者账号 = ""
//卡密后台项目的ID
var 项目ID = 0
//如果当前版本与服务器返回的版本不一致则提示更新
var 项目版本 = 0
//卡密后台项目的项目秘钥
var 项目秘钥 = ""
//卡密后台登录账号 用户输入
var 账号 = ""
//获取界面输入的卡密 用户输入
var 卡密 = ""
//首次验证会保存到期时间,首次验证失败会停止!
var 验证超时分钟 = 1440//可调整
var 验证心跳频秒 = 10//可调整
var 验证时间 = false//变量需要 不要调整
var 获取卡密到期时间 = false//变量需要 不要调整
var 设备编号 = DeviceWrapper.prototype.getAndroidId()
获取项目信息()
获取卡密信息()
//开启一个线程(多线程方式,主线程必须在运行)
setTimeout(function () {
while (true) {
sleep(验证心跳频秒 * 1000);
获取卡密信息()
}
}, 0)
function 获取项目信息() {
var 验证码 = new Date().getTime()
var 请求返回 = sendGet(请求地址 + "xm?phone=" + 开发者账号 + "&xmid=" + 项目ID + "&yzm=" + 验证码);
console.log("获取项目信息:" + 请求返回)
if (!请求返回.startsWith("{") || !请求返回.endsWith("}")) {
toast("获取项目信息失败!")
sleep(1000)
exit()//停止辅助
} else {
//解析JSON
var json = JSON.parse(请求返回)
if (json["code"] == 201) {
toast("项目不存在!")
sleep(1000)
exit()//停止辅助
} else if (json["code"] != 200) {
toast("获取项目信息失败!")
sleep(1000)
exit()//停止辅助
}else {
var md5 = UtilsWrapper.prototype.dataMd5((项目秘钥 + base64(json["data"]) + 验证码));
if (md5.indexOf(json["md5"]) != 0) {
toast("非法的返回!")
sleep(1000)
exit()//停止辅助
}
//解析JSON
var data = JSON.parse(json["data"])
//项目状态 1启用 0停用
console.log("项目状态:" + data["xmzt"])
//版本状态 1启用 0停用
console.log("版本状态:" + data["bbzt"])
//项目版本
console.log("项目版本:" + data["xmbb"])
//下载地址
console.log("下载地址:" + data["xzdz"])
//最低状态 1启用 0停用
console.log("最低状态:" + data["zdzt"])
//最低版本
console.log("最低版本:" + data["zdbb"])
//更新地址
console.log("更新地址:" + data["gxdz"])
//公告状态 1启用 0停用
console.log("公告状态:" + data["ggzt"])
//项目公告
console.log("项目公告:" + data["xmgg"])
//试用状态 1启用 0停用
console.log("试用状态:" + data["syzt"])
//试用时长
console.log("试用时长:" + data["sysc"])
if (data["xmzt"] == 0) {
toast("项目已停用!")
sleep(1000)
exit()//停止辅助
}
if (data["bbzt"] == 1) {
if (data["xmbb"] != 项目版本) {
toast("项目有更新!")
//sleep(1000)
//exit()//停止辅助
}
}
}
}
}
function 获取卡密信息() {
var 验证码 = new Date().getTime()
验证心跳频秒 = 验证心跳频秒 < 1 ? 1 : 验证心跳频秒
if (!验证时间 || new Date().getTime() - 验证时间 >= 验证心跳频秒 * 1000 || 验证码 && 验证码 > 获取卡密到期时间 * 1000) {
var 请求返回 = sendGet(请求地址 + "km?phone=" + 账号 + "&xmid=" + 项目ID + "&km=" + 卡密 + "&jqm=" + 设备编号 + "&yzm=" + 验证码);
console.log("获取卡密信息:" + 请求返回)
if (!请求返回.startsWith("{") || !请求返回.endsWith("}")) {
if (!获取卡密到期时间 || parseInt((验证码 - 验证时间) / 1000) >= 验证超时分钟 * (1000 * 60)) {
toast("验证失败,请重新运行!")
sleep(1000)
exit()//停止辅助
}
if (验证码 > 获取卡密到期时间 * 1000) {
toast("卡密已经到期!")
sleep(1000)
exit()//停止辅助
}
} else {
//解析JSON
json = JSON.parse(请求返回)
if (json["code"] == 201) {
toast("卡密不存在!")
sleep(1000)
exit()//停止辅助
} else if (json["code"] == 202) {
toast("项目已停用!")
sleep(1000)
exit()//停止辅助
} else if (json["code"] == 203) {
toast("卡密已经到期!")
sleep(1000)
exit()//停止辅助
} else if (json["code"] == 204) {
toast("已经绑定其他设备!")
sleep(1000)
//换绑机器码
请求返回 = sendGet(请求地址 + "jqm?phone=" + 账号 + "&xmid=" + 项目ID + "&km=" + 卡密 + "&jqm=" + 设备编号);
if (!请求返回.startsWith("{") || !请求返回.endsWith("}")) {
toast("换绑失败!")
} else {
var json = JSON.parse(请求返回)
if (json["code"] != 200) {
toast("换绑失败!")
} else {
toast("换绑成功!")
sleep(1000)
toast("请重新运行!")
}
}
sleep(1000)
exit()//停止辅助
} else if (json["code"] == 200) {
var md5 = UtilsWrapper.prototype.dataMd5((项目秘钥 + base64(json["data"]) + 验证码));
if (md5.indexOf(json["md5"]) != 0) {
toast("非法的返回!")
sleep(1000)
exit()//停止辅助
}
//解析JSON
var data = JSON.parse(json["data"])
//首次验证提示
if (!获取卡密到期时间) {
toast("卡密到期日期:" + dateFormat("YYYY-mm-dd HH:MM", new Date(data["dqsj"] * 1000)))
sleep(1000)
}
验证时间 = new Date().getTime();
获取卡密到期时间 = data["dqsj"];
} else {
toast("获取卡密信息失败!")
sleep(1000)
exit()//停止辅助
}
}
}
}
//编码
function base64(str) {
return java.lang.String(android.util.Base64.encode(java.lang.String(str).getBytes(), 2));
}
//发送Get请求
function sendGet(target) {
return "" + HttpWrapper.prototype.httpGet(target, null, 30000, null);
}
//解析时间格式
function dateFormat(fmt, date) {
let ret;
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
}
}
return fmt;
}
}