前些天有朋友问怎么实现这个功能,如下图所示:
这个功能便是给自己的脚本加上一个可以领免费测试卡的功能,要想实现它须要把稳的内容挺多的,下面我们逐个来说一下:
(1)功能上说要实现两个操作:点击按钮获取激活码(测试卡)+写入输入框

①点击按钮获取一个激活码
由于脚本要给别人利用,以是激活码不能是本地的,只能是来自做事器端,那么可以利用post/get办法获取。
激活码的来源,可以是预师长西席成好的一批激活码,也可以是每次点击按钮天生新的激活码,它们各有优缺陷:
预天生的激活码:天生的激活码数量是固定的,用一个少一个,以是要定期补充。
新天生激活码:这种办法哀求脚本具有天生激活码的权限,同时一旦被人破解可以无限制天生激活码,导致验证系统形同虚设了。
选用哪种办法,除了考虑它们优缺陷以外,还要看你的验证系统有没有干系的功能,比如新天生激活码的办法,就哀求验证系统支持用户端注册或者导入激活码。
这期文章中我会用到读取做事器文本的办法,预先把激活码存在做事器文本,读取一个删除一个。
②把激活码写入到输入框中
这边是须要静态页面修正元素的,利用UIP.SetAttribute命令,一行代码而已,稍后看源码就行。
(2)脚本中的逻辑把稳事变:
这个把稳事变是来自于脚本的限定解释:※每天可免费领取3张测试卡,测试韶光为1小时
①限定每天3张测试卡,那么须要有领取记录,记录可以存在脚本运行确当地设备,也可以存在于做事器端,两者比拟的话,存在本地随意马虎些。
②存储的要点:韶光和张数
由于是每天三张,以是过了半夜12点要重新更新可测试数量,记录好当天的日期,防止重复领取。
③限定1小时的测试韶光,这个便是基本的网络验证,没啥可说的。
(3)本地存储的操作流程
选用的存储媒介是数据(.db),由于这种后缀的文件普通人不常用到,没有对应的工具不随意马虎打开,这样就可以达到隐蔽的效果。
存储的格式如下:
在数据库表中有两列数据,分别是time和num,代表日期和次数。
写这部分逻辑框架须要考虑全面,大家随着我一块去想想这个逻辑:
第一步:判断数据库在手机/仿照器上是否存在
不存在:当前设备是首次利用脚本
存在:当前设备已经利用过
第二步:针对上面两种情形分别处理
首次利用:那么新建数据库,写入日期和次数1
非首次利用:要判断当前表格里面的time列中有没有本日的日期数据。
没有:本日还没有利用过
有:本日已经利用。
第三步:连续分情形处理
没有本日的日期数据:在数据库中写入本日日期和次数1
有本日的日期数据:读取数据库中当天日期对应的num列中的次数,判断次数是否小于3次
小于3次:本日还可以连续利用,把本日日期对应的次数+1
不小于3次:本日免费测试次数用完。
这部分写成代码是:
Import "sqlite3.lua" Dim dbpath="/sdcard/pictures/abc.db" Dim t=DateTime.Format("%Y%m%d") If Dir.Exist(dbpath) = 0 Then showmessage "首次利用" sqlite3.SQLCreate(dbpath, "code", {"time","num"}) sqlite3.SQLInsert DBpath, "code", {"time":t, "num":1} Else dim ret=sqlite3.SQLSelect(DBpath, "code", "num", "WHERE time="&t) If Len(ret) = 0 Then showmessage "本日首次利用" sqlite3.SQLInsert DBpath, "code", {"time":t, "num":1} Else showmessage encode.TableToJson(ret) If cint(ret[1]["num"]) < 3 Then sqlite3.SQLUpdate DBpath, "code", {"num":ret[1]["num"]+1}, "WHERE time=" & t showmessage "第"&ret[1]["num"]+1&"次领卡" Else showmessage "本日3次测试卡已经领过了,来日诰日再来" End If End If End If
在以上的代码中,并没有获取测试卡的操作,仅仅是对测试卡须要获取的记录,我们写每次写入/修正数据库内容都是要合营获取测试的操作。
这个中包括建库、当天首次利用、次数小于3等这几种情形。
(4)读取做事器上的文本
这一步须要一个php文件,完成读取文本内容和删除文本内容的操作,把php文件和存有测试卡的文本放到做事器里面,运行下面代码就可以了。
须要这个文件可以加我微信xiaomu86119,备注【做事器文本】
Dim ip="http://192.168.1.3/file" //我建了一个file的文件夹,不是一定有这个目录的Dim 文件名="code" //文本名字TracePrint url.get(ip&"/File.php?uid=6&txtid="&文件名&"&hid=1")
(5)写入输入框
Function 函数名1() Dim 测试卡="abc0001" uip.SetAttribute("输入框1",{"初始文本":测试卡})End Function
=正文完=