Import "Cjson.lua"
Import "ShanHai.lua"
Thread.SetShareVar "请求地址", "https://api.yankami.cn/"
Thread.SetShareVar "项目ID", ""
Thread.SetShareVar "项目秘钥", ""
获取版本文件信息()
Function 获取版本文件信息()
Dim timeStamp = Time()
Dim sign = Encode.Md5(Thread.GetShareVar("项目ID")&Thread.GetShareVar("项目秘钥")&timeStamp)
//发送请求
Dim 请求返回 = ""&URL.Get(Thread.GetShareVar("请求地址")&"getVersionDefaultFileSubmit?xmid="&Thread.GetShareVar("项目ID")&"&timeStamp="&timeStamp&"&sign="&sign,5)
TracePrint "获取版本文件信息:"&请求返回
If InStr(1, 请求返回, "{") <> 1 or InStr(1, 请求返回, "code") = 0 Then
TracePrint "获取版本文件信息失败"
EndScript//停止辅助
Else
//JSON字符串转换为Table
Dim json = Cjson.Decode(请求返回)
If json["code"] <> 200 Then
TracePrint "获取版本文件信息失败!"
EndScript//停止辅助
Else
Dim dataText = json["data"]
TracePrint "数据:"&dataText
//服务器返回校验
Dim serviceSign = json["sign"]
Dim localSign = Mid(Encode.Md5(Thread.GetShareVar("项目ID")&Thread.GetShareVar("项目秘钥")&ShanHai.Base64En(dataText)&timeStamp),1,4)
TracePrint "serviceSign:"&serviceSign
TracePrint "localSign:"&localSign
If not localSign = serviceSign Then
TracePrint "非法的返回!"
Dialog.MsgBox("\t\t\t\t\t\t\t\t提示:非法的返回!",0)
EndScript//停止辅助
Else
TracePrint "成功的返回!"
End If
//JSON字符串转换为Table
Dim data = Cjson.Decode(dataText)
TracePrint "获取版本文件信息 上传时间:"&data["uploadDate"]
TracePrint "获取版本文件信息 文件名:"&data["fileName"]
TracePrint "获取版本文件信息 文件大小:"&data["fileSize"]
End If
End If
End Function
Dim 项目ID,项目秘钥
项目ID = ""
项目秘钥 = ""
Call 获取版本文件信息()
Function 获取版本文件信息()
Dim timeStamp,sign,请求地址,请求URL,响应内容,状态,数据,本地校验,服务器校验
timeStamp = getTime()
sign = Plugin.Encrypt.Md5String(项目ID&项目秘钥&timeStamp)
请求地址 = "http://api.yankami.cn/getVersionDefaultFileSubmit"
请求URL = 请求地址&"?xmid="&项目ID&"&timeStamp="&timeStamp&"&sign="&sign
TracePrint "获取版本文件信息 URL:"&请求URL
响应内容 = Lib.网络.获得网页源文件_增强版(请求URL,"utf-8")
TracePrint "响应内容:"&响应内容
If InStr(1, 响应内容, "{") <> 1 or InStr(1, 响应内容, "code") = 0 Then
TracePrint "提示:获取版本文件信息失败!"
MessageBox "提示:获取版本文件信息失败!"
ExitScript//停止辅助
Else
状态 = json解析(响应内容, "code")
TracePrint "状态:"&状态
If 状态 <> 200 Then
TracePrint "提示:获取版本文件信息失败!"
MessageBox "提示:获取版本文件信息失败!"
ExitScript//停止辅助
Else
数据 = json解析(响应内容, "data")
TracePrint "数据:"&数据
//验证码校验
服务器校验 = json解析(响应内容, "sign")
本地校验 = Mid(LCase(Plugin.Encrypt.Md5String(项目ID&项目秘钥&Base64Encode(数据)&timeStamp)),1,4)
TracePrint "本地校验:"&本地校验
TracePrint "服务器校验:"&服务器校验
If not 本地校验 = 服务器校验 Then
MessageBox "非法的返回!"
ExitScript//停止辅助
End If
TracePrint "获取版本文件信息 上传时间:"&json解析(数据, "uploadDate")
TracePrint "获取版本文件信息 文件名:"&json解析(数据, "fileName")
TracePrint "获取版本文件信息 文件大小:"&json解析(数据, "fileSize")
End If
End If
End Function
Function Base64Encode(Str)
Dim BASE64_CHARS
BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim length, modValue, result, i, a, b, c, d
Str = StringToByteArray(Str)
length = UBound(Str) + 1
modValue = length Mod 3
result = ""
For i = 0 To length - modValue - 1 Step 3
a = (Str(i) And &HFC) \ &H4
b = ((Str(i) And &H3) * &H10) Or ((Str(i + 1) And &HF0) \ &H10)
c = ((Str(i + 1) And &HF) * &H4) Or ((Str(i + 2) And &HC0) \ &H40)
d = Str(i + 2) And &H3F
result = result & Mid(BASE64_CHARS, a + 1, 1)
result = result & Mid(BASE64_CHARS, b + 1, 1)
result = result & Mid(BASE64_CHARS, c + 1, 1)
result = result & Mid(BASE64_CHARS, d + 1, 1)
Next
If modValue = 1 Then
a = (Str(length - 1) And &HFC) \ &H4
b = (Str(length - 1) And &H3) * &H10
result = result & Mid(BASE64_CHARS, a + 1, 1)
result = result & Mid(BASE64_CHARS, b + 1, 1)
result = result & "=="
ElseIf modValue = 2 Then
a = (Str(length - 2) And &HFC) \ &H4
b = ((Str(length - 2) And &H3) * &H10) Or ((Str(length - 1) And &HF0) \ &H10)
c = (Str(length - 1) And &HF) * &H4
result = result & Mid(BASE64_CHARS, a + 1, 1)
result = result & Mid(BASE64_CHARS, b + 1, 1)
result = result & Mid(BASE64_CHARS, c + 1, 1)
result = result & "="
End If
Base64Encode = result
End Function
//字符串转数组
Function StringToByteArray(szInput)
Dim i, byteArray, wch, nAsc
byteArray = ""
For i=1 To Len(szInput)
wch = Mid(szInput, i, 1)
nAsc = AscW(wch)
If nAsc < 0 Then
nAsc = nAsc + 65536
End If
If (nAsc And &HFF80) = 0 Then
byteArray = byteArray & "," & AscW(wch)
Else
If (nAsc And &HF000) = 0 Then
byteArray = byteArray & "," & Cint("&H" & Hex(((nAsc \ 2 ^ 6)) Or &HC0)) - 256 & "," & Cint("&H" & Hex(nAsc And &H3F Or &H80))-256
Else
byteArray = byteArray & "," & Cint("&H" & Hex((nAsc \ 2 ^ 12) Or &HE0)) - 256 & "," & Cint("&H" & Hex((nAsc \ 2 ^ 6) And &H3F Or &H80)) - 256 & "," & Cint("&H" & Hex(nAsc And &H3F Or &H80)) - 256
End If
End If
Next
If Left(byteArray, 1) = "," Then
byteArray = Right(byteArray, Len(byteArray) - 1)
End If
StringToByteArray = Split(byteArray, ",")
End Function
Function json解析(resp,json路径)
Set sc = CreateObject("MSScriptControl.ScriptControl")
sc.Language = "JScript"
sc.AddCode "var tmp = " & resp & ";"
json解析 = sc.Eval("tmp." & json路径)
End Function
Function getTime()
Dim 年, 月, 天, 小时, 分钟, 秒, dataTime
dataTime = Plugin.GetSysInfo.GetDateTime()
年 = Year(dataTime)
月 = Month(dataTime) - 2
天 = Day(dataTime) - 1
小时 = Hour(dataTime)
分钟 = Minute(dataTime)
秒 = Second(dataTime)
If 月 < 0 Then
月 = 月 + 12
年 = 年 - 1
End If
getTime = (((((Round((年 - 1) * 365 + 年 / 4 - 年 / 100 + 年 / 400) + Int((((367 * 月) / 12) - 30) + 59) + 天 - 719162) * 24 + (小时 - 8)) * 60) + 分钟) * 60 + 秒)
End Function
local 请求地址 = "https://api.yankami.cn/"
local 项目ID = ""
local 项目秘钥 = ""
function 获取版本文件信息()
local timeout = 5
local headers = {}
local timeStamp = os.time()
local sign = MD5(项目ID .. 项目秘钥 .. timeStamp);
local url = 请求地址 .. "getVersionDefaultFileSubmit" .. "?xmid=" .. 项目ID .. "&timeStamp=" .. timeStamp .. "&sign=" .. sign
local ret = LuaEngine.httpGet(url, headers, timeout)
if ret ~= nil and utf8.mid(ret, 1, 1) == "{" and utf8.mid(ret, utf8.length(ret), 1) == "}" then
local ret = jsonLib.decode(ret)
print(ret)
print(ret.code)
if ret.code ~= 200 then
print("获取版本文件信息 错误code:" .. ret.code)
else
local serviceSign = ret.sign
local localSign = string.sub(MD5(项目ID .. 项目秘钥 .. encodeBase64(ret.data) .. timeStamp), 1, 4)
print("serviceSign:" .. serviceSign)
print("localSign:" .. localSign)
if not (string.lower(serviceSign) == string.lower(localSign)) then
print("非法的返回!")
toast("非法的返回!")
end
local data = ret.data
print(data)
print("获取版本文件信息 上传时间:" .. data.uploadDate)
print("获取版本文件信息 文件名:" .. data.fileName)
print("获取版本文件信息 文件大小:" .. data.fileSize)
end
else
print("获取版本文件信息 错误:nil")
end
end
获取版本文件信息()
import base64
import json
import requests
import hashlib
import time
def 获取版本文件信息(项目ID, 项目秘钥):
timeStamp = int(time.time())
print(f"时间戳: {timeStamp}")
sign = hashlib.md5((str(项目ID) + 项目秘钥 + str(timeStamp)).encode('utf-8')).hexdigest()
params = {"xmid": 项目ID, "timeStamp": timeStamp, "sign": sign}
try:
if False:
result = requests.get('https://api.yankami.cn/getVersionDefaultFileSubmit', params=params).json()
else:
result = requests.post('https://api.yankami.cn/getVersionDefaultFileSubmit', data=params).json()
print("result:", result)
code = result["code"]
if code == 400:
print("获取版本文件信息 错误code:", code)
print("获取版本文件信息 错误message:",result["message"])
elif code != 200:
print("获取版本文件信息 错误code:", code)
else:
data = result["data"]
print("data:", data)
serviceSign = result["sign"]
localSign = hashlib.md5((str(项目ID) + 项目秘钥 + base64.b64encode(str(data).encode('utf-8')).decode('utf-8') + str(timeStamp)).encode('utf-8')).hexdigest()[0:4]
print("serviceSign:", serviceSign)
print("localSign:", localSign)
if serviceSign != localSign:
print("非法的返回!")
else:
print("成功的返回!")
data = json.loads(data)
print("获取版本文件信息 上传时间:", data["uploadDate"])
print("获取版本文件信息 文件名:", data["fileName"])
print("获取版本文件信息 文件大小:", data["fileSize"])
except Exception as e:
print(f"获取版本文件信息失败:{e}")
if __name__ == "__main__":
项目ID = ""
项目秘钥 = ""
获取版本文件信息(项目ID, 项目秘钥)
pom
java
import org.json.JSONException;
import org.json.JSONObject;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class 版本文件 {
public static void main(String[] args) throws Exception {
String xmid = "";
String xmmy = "";
long timeStamp = System.currentTimeMillis() / 1000;
String sign = getMD5(xmid + xmmy + timeStamp);
String url = "https://api.yankami.cn/getVersionDefaultFileSubmit?"
+ "xmid=" + xmid
+ "&timeStamp=" + timeStamp
+ "&sign=" + sign;
JSONObject jsonEntity = getRequest(url);
System.out.println("jsonEntity:" + jsonEntity);
if (jsonEntity != null) {
int code = jsonEntity.getInt("code");
if (code == 200) {
String dataText = jsonEntity.getString("data");
String serviceSign = jsonEntity.getString("sign");
String localSign = getMD5(xmid + xmmy + Base64encodeToString(dataText) + timeStamp).substring(0, 4);
System.out.println("serviceSign:" + serviceSign);
System.out.println("localSign:" + localSign);
boolean check = localSign.equalsIgnoreCase(serviceSign);
if (!check) {
System.out.println("非法的返回!");
} else {
System.out.println("成功的返回!");
JSONObject data = new JSONObject(dataText);
System.out.println("上传时间:" + data.getString("uploadDate"));
System.out.println("文件名:" + data.getString("fileName"));
System.out.println("文件大小:" + data.getString("fileSize"));
}
}
}
}
public static String Base64encodeToString(String text) {
return Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
}
public static String getMD5(String text) throws NoSuchAlgorithmException {
byte[] bytes = MessageDigest.getInstance("MD5").digest(text.getBytes(StandardCharsets.UTF_8));
StringBuilder builder = new StringBuilder(32);
for (byte b : bytes) {
builder.append(String.format("%02x", b));
}
return builder.toString();
}
public static JSONObject getRequest(String url) throws Exception {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setConnectTimeout(10000);
con.setRequestMethod("GET");
if (con.getResponseCode() == 200) {
return getJSON(responseReader(con.getInputStream()));
}
return null;
}
private static String responseReader(InputStream inputStream) throws IOException {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
StringBuilder stringBuilder = new StringBuilder();
int len;
char[] chars = new char[8192];
while ((len = inputStreamReader.read(chars)) != -1) {
stringBuilder.append(chars, 0, len);
}
inputStreamReader.close();
return stringBuilder.toString();
}
private static JSONObject getJSON(String text) throws JSONException {
if (text != null) {
int indexOf = text.indexOf("{");
int lastIndexOf = text.lastIndexOf("}");
if (indexOf != -1 && lastIndexOf != -1) {
return new JSONObject(text.substring(indexOf, lastIndexOf + 1));
}
}
return null;
}
}