开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 174|回复: 4
打印 上一主题 下一主题
收起左侧

[易语言] 求大佬帮忙对接这个网络验证的心跳,有例子但是不完善

[复制链接]
结帖率:20% (1/5)
跳转到指定楼层
楼主
发表于 2025-4-22 10:35:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式   河南省郑州市
25精币
有现成的例子,但是不是很完善,然后我想让大佬帮忙完善一下,例子附上,网站是https://www.timeses.com/
  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 请在本子程序中放置易模块初始化代码
_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
说明  
' 以下是后台加密配置需要设置的东西:
' 加密方式 :AES对称加密
' 加密编码方式 :16进制编码
' 响应加密方式 :全部加密
' 随机数防劫持 :开
' 签名方式 :MD5
' 签名计算规则 :方式二
' 时间戳验证 :5000
' 加密密钥设置 :AES/ECB/PKCS5Padding(无需iv-偏移)
子程序名返回值类型公开备 注
_临时子程序  
变量名类 型静态数组备 注
错误文本文本型 
bool逻辑型 
到期文本文本型 
到期时间戳文本型 
token文本型 
验证_全局初始化 (“https://www.timeses.com”, “应用编号”, “应用密钥”, “AES/ECB密钥”, 5000, 5000, )
' 验证_全局初始化 (“https://www.timeses.com”, “1”, “1”, “1”, 5000, 5000, )
' 举例"应用编号"应用前的编号是什么里面就填什么"1"
bool = 验证_卡密登陆 (“卡密”, “我是机器码”, 到期文本, 到期时间戳, token, 错误文本)
调试输出 (bool, 到期文本, 到期时间戳, token, 错误文本)
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
子程序名返回值类型公开备 注
验证_卡密登陆逻辑型 
参数名类 型参考可空数组备 注
卡密文本型
机器码文本型
到期文本文本型
到期时间戳文本型
token文本型
错误文本文本型
变量名类 型静态数组备 注
ApiClient验证客户端接口实例对象
data文本型响应返回值数据
Json类_json响应返回值数据-解析成json对象
Code文本型接口业务响应码
Msg文本型接口业务响应信息
Api.设置请求接口地址 (“/api/single/login”)  ' 设置接口请求地址
Api.添加请求参数 (“card”, 卡密)  ' 增加一个参数
Api.添加请求参数 (“mac”, 机器码)  ' 增加一个参数
如果真 (Api.发送请求 ())  ' 发送请求,成功返回真(会自动帮您处理好必要参数、签名、参数加密等)
错误文本 = “请求失败”
返回 ()
data = Api.解密data数据 ()  ' 解密aes和解十六进制得到原始未加密的dataJson数据
' 调试输出 (“data”, data)
Json.解析 (data, , )  ' 解析响应数据为json
Code = Json.取通用属性 (“code”, )  ' 得到请求响应返回状态码
Msg = Json.取通用属性 (“msg”, )  ' 得到请求响应返回信息
如果真 (Code ≠ “1”)  ' 接口业务码响应非成功-将服务器返回信息提示
错误文本 = Msg
返回 ()
如果真 (Api.响应数据签名验证 ())  ' 响应数据验签检测未通过
错误文本 = “响应数据验签失败”
返回 ()
如果真 (Api.响应数据防劫持验证 ())  ' 防劫持验证检测未通过
错误文本 = “检测到数据被劫持篡改了”
返回 ()
如果真 (Api.响应数据时差验证 ())  ' 响应数据检测验证不通过
错误文本 = “响应数据异常,与服务器时差相差过多”
返回 ()
到期文本 = Json.取通用属性 (“data.endTime”, )
到期时间戳 = Json.取属性 (“data.endTimestamp”).取数据文本 ()
token = Json.取通用属性 (“data.token”, )
错误文本 = Msg
返回 ()
子程序名返回值类型公开备 注
验证_全局初始化 初始化配置,全局只需要执行一次
参数名类 型参考可空数组备 注
Host文本型站点地址
AppId文本型应用ID
AppKey文本型应用密钥
AesKey文本型算法密钥
时差最小值整数型允许请求时差最小值-单位为毫秒
时差最大值整数型允许请求时差最大值-单位为毫秒
是否输出调试信息逻辑型默认为假
g_Host = Host
g_AppId = AppId
g_AppKey = AppKey
g_AesKey = AesKey
g_时差最小值 = 时差最小值
g_时差最大值 = 时差最大值
g_是否输出调试信息 = 选择 (是否为空 (是否输出调试信息), 假, 是否输出调试信息)


i支持库列表   支持库注释   
spec特殊功能支持库


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:20% (1/5)
沙发
 楼主| 发表于 2025-4-22 10:37:09 | 只看该作者   河南省郑州市
  
窗口程序集名保 留  保 留备 注
Client, , 公开   
变量名类 型数组备 注
集_Api文本型请求接口地址
集_Params文本型请求参数
集_safe_code文本型请求随机安全码-防劫持验证用
集_Data文本型响应数据(发送请求后这里则会被赋值)
集_Json类_json响应数据json对象(发送请求后这里则会被赋值)

子程序名返回值类型公开备 注
_初始化 当基于本类的对象被创建后,此方法会被自动调用
集_safe_code = 获取随机字符串 ()
子程序名返回值类型公开备 注
_销毁 当基于本类的对象被销毁前,此方法会被自动调用

子程序名返回值类型公开备 注
设置请求接口地址 设置请求接口地址
参数名类 型参考可空数组备 注
接口地址文本型接口地址
集_Api = 接口地址
子程序名返回值类型公开备 注
添加请求参数 添加请求参数
参数名类 型参考可空数组备 注
参数名文本型
参数值文本型
如果真 (参数重复检测 (参数名))
判断 (集_Params = “”)
集_Params = 参数名 + “=” + 参数值
集_Params = 集_Params + “&” + 参数名 + “=” + 参数值


子程序名返回值类型公开备 注
发送请求逻辑型 发送请求,若请求成功返回真
变量名类 型静态数组备 注
actualRequestParams文本型 
responseResult逻辑型 
如果真 (g_是否输出调试信息)
调试输出 (“-----------------请求开始-----------------”)
调试输出 (“请求接口地址:” + 集_Api)
调试输出 (“原请求数据:” + 集_Params)
actualRequestParams = 统一参数中转处理 ()
如果真 (g_是否输出调试信息)
调试输出 (“实际请求参数-已加密:” + actualRequestParams)
集_Data = 网页_访问S (g_Host + 集_Api + “?” + actualRequestParams, 0, , , , , , , , , , , , , , , , , , , )
responseResult = 假
如果真 (集_Data ≠ “”)
responseResult = 真
如果真 (g_是否输出调试信息)
调试输出 (“响应返回值:” + 集_Data)
集_Json.解析 (解密data数据 (), , )
如果真 (g_是否输出调试信息)
调试输出 (“-----------------请求结束-----------------”)
返回 (responseResult)
子程序名返回值类型公开备 注
获取响应数据文本型 获取响应数据
返回 (集_Data)
子程序名返回值类型公开备 注
获取响应json对象类_json 获取响应json对象
返回 (集_Json)
子程序名返回值类型公开备 注
解密data数据文本型 解密data数据
变量名类 型静态数组备 注
dataJson文本型 
dataJson = 编码_Utf8到Ansi (对称解密 (字节集_十六进制到字节集 (集_Data), 到字节集 (g_AesKey), #对称算法_AES_256_ECB, #数据填充_PKCS5_PADDING, ))
返回 (dataJson)
子程序名返回值类型公开备 注
解密data_json对象类_json 获取解密后的data json对象
变量名类 型静态数组备 注
dataJson文本型 
json类_json 
dataJson = 解密data数据 ()
json.解析 (dataJson)
返回 (json)
子程序名返回值类型公开备 注
响应数据防劫持验证逻辑型 请求安全码验证-响应数据防劫持验证
变量名类 型静态数组备 注
dataJson文本型 
responseDataJson类_json 
safeCode文本型 
dataJson = 解密data数据 ()
responseDataJson = 解密data_json对象 ()
safeCode = responseDataJson.取通用属性 (“safeCode”, )
如果真 (集_safe_code = safeCode)
返回 ()
返回 ()
子程序名返回值类型公开备 注
响应数据签名验证逻辑型 响应数据签名验证
变量名类 型静态数组备 注
signature文本型 
signature = 集_Json.取通用属性 (“signature”)
如果真 (获取字符串md5值 (_响应数据_排序 (集_Json) + g_AppKey) = signature)
返回 ()
返回 ()
子程序名返回值类型公开备 注
_响应数据_排序文本型 
参数名类 型参考可空数组备 注
json类_json
变量名类 型静态数组备 注
局_属性名_数组文本型0
post文本型 
k文本型 
v文本型 
i整数型 
data文本型 
json_data类_json 
局_属性名_数组_data文本型0
ii整数型 
kk文本型 
vv文本型 
分割文本型0
二次分割文本型0
x  
paramsStr文本型 
json.取所有属性名 (局_属性名_数组, )
计次循环首 (取数组成员数 (局_属性名_数组), i)
k = 局_属性名_数组 [i]
v = json.取通用属性 (k, )
如果真 (k = “code” v = “1”)
data = json.取通用属性 (“data”, )
json_data.解析 (data, , )
json_data.取所有属性名 (局_属性名_数组_data, )
计次循环首 (取数组成员数 (局_属性名_数组_data), ii)
kk = 局_属性名_数组_data [ii]
vv = json_data.取通用属性 (kk, )
post = post + kk + “=” + vv + “&”
计次循环尾 ()

如果真 (k ≠ “signature” k ≠ “data”)
如果 (i = 取数组成员数 (局_属性名_数组))
post = post + k + “=” + v
post = post + k + “=” + v + “&”


计次循环尾 ()
分割 = 分割文本 (post, “&”, )
数组_排序 (分割, 0, )
计次循环首 (取数组成员数 (分割), x)
二次分割 = 分割文本 (分割 [x], “=”, )
如果真 (取数组成员数 (二次分割) ≠ 2)
到循环尾 ()
k = 二次分割 [1]
v = 二次分割 [2]
如果真 (k ≠ “appId” k ≠ “signature” k ≠ “data”)
如果 (x = 取数组成员数 (分割))
paramsStr = paramsStr + k + “=” + v
paramsStr = paramsStr + k + “=” + v + “&”


计次循环尾 ()
返回 (paramsStr)
子程序名返回值类型公开备 注
响应数据时差验证逻辑型 响应数据时差验证
变量名类 型静态数组备 注
server_time长整数型 
allow_time_scope_minimum长整数型 
allow_time_scope_maximum长整数型 
timestamp长整数型 
server_time = 到长整数 (集_Json.取通用属性 (“timestamp”, ))
allow_time_scope_minimum = server_time - g_时差最小值
allow_time_scope_maximum = server_time + g_时差最大值
timestamp = 到长整数 (获取当前时间戳 ())
如果真 (timestamp > allow_time_scope_maximum timestamp < allow_time_scope_minimum)
返回 ()
返回 ()
子程序名返回值类型公开备 注
统一参数中转处理文本型 统一参数中转处理,返回最终处理完的必要参数、签名、加密的参数字符串
变量名类 型静态数组备 注
分割文本型0
x整数型 
k文本型 
v文本型 
paramsStr文本型 
二次分割文本型0
添加请求参数 (“appId”, g_AppId)  ' 增加必要参数-应用ID
添加请求参数 (“timestamp”, 获取当前时间戳 ())  ' 增加签名必要参数-时间戳
添加请求参数 (“safeCode”, 集_safe_code)  ' 增加请求防劫持验证参数
添加请求参数 (“signature”, 获取字符串md5值 (获取签名字符串 (集_Params) + g_AppKey))  ' 增加请求signature验证参数
如果真 (g_是否输出调试信息)
调试输出 (“实际请求参数-未加密:” + 集_Params)
分割 = 分割文本 (集_Params, “&”, )
数组_排序 (分割, 0, )
计次循环首 (取数组成员数 (分割), x)
二次分割 = 分割文本 (分割 [x], “=”, )
如果真 (取数组成员数 (二次分割) ≠ 2)
到循环尾 ()
k = 二次分割 [1]
v = 二次分割 [2]
如果真 (k ≠ “appId”)
如果 (x = 取数组成员数 (分割))
paramsStr = paramsStr + k + “=” + v
paramsStr = paramsStr + k + “=” + v + “&”


计次循环尾 ()
paramsStr = 字节集_字节集到十六进制 (对称加密 (编码_Ansi到Utf8 (paramsStr), 到字节集 (g_AesKey), #对称算法_AES_256_ECB, #数据填充_PKCS5_PADDING, ))
paramsStr = “appId=” + g_AppId + “¶ms=” + paramsStr
返回 (paramsStr)
子程序名返回值类型公开备 注
获取签名字符串文本型 获取计算参数签名字符串
参数名类 型参考可空数组备 注
param文本型
变量名类 型静态数组备 注
signStr文本型 
分割文本型0
x整数型 
k文本型 
v文本型 
二次分割文本型0
如果真 (g_是否输出调试信息)
调试输出 (“参与签名数据:” + param)
分割 = 分割文本 (param, “&”, )
数组_排序 (分割, 0, )
计次循环首 (取数组成员数 (分割), x)
二次分割 = 分割文本 (分割 [x], “=”, )
如果真 (取数组成员数 (二次分割) ≠ 2)
到循环尾 ()
k = 二次分割 [1]
v = 二次分割 [2]
如果真 (k ≠ “signature” k ≠ “appId”)
如果 (x = 取数组成员数 (分割))
signStr = signStr + k + “=” + v
signStr = signStr + k + “=” + v + “&”


计次循环尾 ()
如果真 (g_是否输出调试信息)
调试输出 (“签名字符串:” + signStr)
返回 (signStr)
子程序名返回值类型公开备 注
获取当前时间戳文本型 获取当前时间戳
返回 (时间_取现行时间戳 ())
子程序名返回值类型公开备 注
获取字符串md5值文本型 获取字符串md5值
参数名类 型参考可空数组备 注
str文本型
返回 (校验_取md5 (编码转换 (到字节集 (str), #编码_GB2312, #编码_UTF_8, ), 假, ))
子程序名返回值类型公开备 注
获取随机字符串文本型 获取随机字符串
变量名类 型静态数组备 注
i整数型 
结果文本型 
置随机数种子 ()
计次循环首 (16, i)
结果 = 结果 + 到文本 (取随机数 (0, 9))
计次循环尾 ()
返回 (结果)
子程序名返回值类型公开备 注
参数重复检测逻辑型 
参数名类 型参考可空数组备 注
key文本型
变量名类 型静态数组备 注
分割文本型0
x整数型 
k文本型 
v文本型 
二次分割文本型0
分割 = 分割文本 (集_Params, “&”, )
数组_排序 (分割, 0, )
计次循环首 (取数组成员数 (分割), x)
二次分割 = 分割文本 (分割 [x], “=”, )
如果真 (取数组成员数 (二次分割) ≠ 2)
到循环尾 ()
k = 二次分割 [1]
v = 二次分割 [2]
如果真 (k = key)
返回 ()

计次循环尾 ()
返回 ()


i支持库列表   支持库注释   
spec特殊功能支持库
iconv编码转换支持库

  
全局变量名类 型数组公开备 注
g_Host文本型  
g_AppId文本型  
g_AppKey文本型  
g_AesKey文本型  
g_时差最小值整数型  
g_时差最大值整数型  
g_是否输出调试信息逻辑型  


回复

使用道具 举报

结帖率:88% (7/8)

签到天数: 9 天

板凳
发表于 2025-4-22 15:23:51 | 只看该作者   浙江省宁波市
出门右拐 定制区.
回复

使用道具 举报

结帖率:90% (45/50)

签到天数: 7 天

地板
发表于 2025-4-22 21:05:17 | 只看该作者   山西省太原市
出门右拐,定制区
回复

使用道具 举报

结帖率:0% (0/1)

签到天数: 10 天

地下
发表于 2025-4-23 13:39:35 | 只看该作者   广东省中山市
直接用酷烧云不更爽?直接下载官方提供的源码搞定
RSA算法 在线售卡自动发卡 远程函数......


酷烧云:WWW.KUSHAO.NET





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表