Skip to content

Instantly share code, notes, and snippets.

@voicon
Last active October 15, 2021 01:46
Show Gist options
  • Save voicon/6e7c3a981c860c6dc0960eef77d342fe to your computer and use it in GitHub Desktop.
Save voicon/6e7c3a981c860c6dc0960eef77d342fe to your computer and use it in GitHub Desktop.
mtopsdk.security.ISign
.版本 2
.子程序 getApiData, 文本型, , 简单传一些差异些的数据即可
.参数 api, 文本型
.参数 data, 文本型
.参数 v, 文本型, 可空, 1.0
.参数 t, 文本型, 可空
.参数 deviceId, 文本型, 可空, AoGs1YpVFee2wZlirN9fiW_Klp0DJEBewwUQwxakwKVo
.参数 appKey, 文本型, 可空, 21549244
.参数 sid, 文本型, 可空, 130d701871ee49e82c179dcfe6e640d6
.参数 uid, 文本型, 可空, 2804168909
.参数 utdid, 文本型, 可空, XJswASY2BcMDAESPz9P1rUFa
.参数 ttid, 文本型, 可空, 600000@moon_android_6.3.3
.局部变量 getsignurl, 文本型
.局部变量 webText, 文本型
.局部变量 apiurl, 文本型
.局部变量 header, 文本型
.局部变量 sign, 文本型
.局部变量 json, 类_json
.如果真 (t = “”)
t = 时间_取现行时间戳 (真)
.如果真结束
.如果真 (deviceId = “”)
' deviceId = “AoGs1YpVFee2wZlirN9fiW_Klp0DJEBewwUQwxakwKVo” ' AoGs1YpVFee2wZlirN9fiW_Klp0DJEBewwUQwxakwKVo
deviceId = “Xk” + 文本_取随机字符 (42)
.如果真结束
.如果真 (appKey = “”)
appKey = “21549244”
.如果真结束
.如果真 (ttid = “”)
ttid = “600000@moon_android_6.3.3” ' "ttid" -> "600000@moon_android_6.3.3"
.如果真结束
.如果真 (utdid = “”)
utdid = “Xk” + 文本_取随机字符 (22)
.如果真结束
.如果真 (v = “”)
v = “1.0”
.如果真结束
json.置属性 (“api”, api)
json.置属性 (“v”, v)
json.置属性 (“data”, 编码_URL编码 (data))
json.置属性 (“t”, t)
json.置属性 (“ttid”, ttid)
json.置属性 (“utdid”, utdid)
json.置属性 (“appkey”, appKey)
json.置属性 (“appkey”, appKey)
json.置属性 (“deviceId”, deviceId)
json.置属性 (“x-features”, “27”)
json.置属性 (“sid”, sid)
getsignurl = “http://a.neibujia666.com:888/getxsign?type=moon&key=testkey&data=” + 编码_URL编码 (json.取数据文本 (), 真, 真)
.计次循环首 (3, ) ' 有时候签名会失败。最多重试3次
webText = 到文本 (网页_访问_对象 (getsignurl))
.如果真 (json.解析 (webText))
.如果真 (json.取通用属性 (“code”) = “1”)
sign = json.取通用属性 (“data[0].sign”)
.如果真结束
.如果真结束
.如果 (sign = “” 或 sign = “null”)
延时 (50) ' 如果获取失败。那么稍等一会重试
.否则
跳出循环 ()
.如果结束
.计次循环尾 ()
.如果真 (sid = “”)
sid = json.取通用属性 (“data[0].sid”)
.如果真结束
' 如果还是失败。那就说失败了
.如果真 (sign = “” 或 sign = “null”)
返回 (“获取签名出错了:” + webText)
.如果真结束
' 构建API的请求头部
header = “x-utdid: [utdid]/hxf/x-devid: [devid]/hxf/x-ttid: [ttid]/hxf/x-t: [t]/hxf/x-features: 27/hxf/x-pv: 5.1/hxf/x-sign: [sign]/hxf/x-appkey: [appkey]/hxf/”
header = 子文本替换 (header, “/hxf/”, #换行符, , , 真)
header = 子文本替换 (header, “[utdid]”, utdid, , , 真)
header = 子文本替换 (header, “[devid]”, deviceId, , , 真)
header = 子文本替换 (header, “[ttid]”, ttid, , , 真)
header = 子文本替换 (header, “[t]”, t, , , 真)
header = 子文本替换 (header, “[appkey]”, appKey, , , 真)
header = 子文本替换 (header, “[sign]”, sign, , , 真)
.如果真 (uid ≠ “”)
header = header + “x-uid:” + uid + #换行符
.如果真结束
.如果真 (sid ≠ “”)
header = header + “x-sid:” + sid + #换行符
.如果真结束
apiurl = getMtopUrl (api, v, data)
webText = 编码_Utf8到Ansi (网页_访问_对象 (apiurl, , , , , header))
返回 (webText)
.子程序 getMtopUrl, 文本型
.参数 api, 文本型
.参数 v, 文本型
.参数 data, 文本型
.局部变量 Url, 文本型
Url = “https://acs.m.taobao.com/gw/” + api + “/” + v + “/?data=” + 编码_URL编码 (data, 真, 真) ' 这个应该不同地方获取不同的
返回 (Url)
.版本 2
.子程序 mtop_taobao_wireless_share_password_get, 文本型, , 淘口令信息 mtop.taobao.wireless.share.password.get
.参数 tkl, 文本型
.局部变量 data, 文本型
.局部变量 api, 文本型
data = “{#passwordType#:#tao#,#passwordText#:#[tkl]#}”
data = 子文本替换 (data, “#”, #引号, , , 真)
data = 子文本替换 (data, “[tkl]”, tkl, , , 真)
api = “mtop.taobao.wireless.share.password.get” ' API 的调用地址
返回 (getApiData (api, data))
public String getMtopApiSign(HashMap<String, String> params, String appKey, String authCode) {
String instanceId = getInstanceId();
if (params == null) {
TBSdkLog.e("mtopsdk.InnerSignImpl", instanceId + " [getMtopApiSign] params is null.appKey=" + appKey);
return null;
} else if (appKey == null) {
params.put("SG_ERROR_CODE", "AppKey is null");
TBSdkLog.e("mtopsdk.InnerSignImpl", instanceId + " [getMtopApiSign] AppKey is null.");
return null;
} else if (this.sgMgr == null) {
params.put("SG_ERROR_CODE", "SGManager is null");
TBSdkLog.e("mtopsdk.InnerSignImpl", instanceId + " [getMtopApiSign]SecurityGuardManager is null,please call ISign init()");
return null;
} else {
try {
SecurityGuardParamContext sgContext = new SecurityGuardParamContext();
sgContext.appKey = appKey;
sgContext.requestType = 7;
Map<String, String> paramsMap = convertInnerBaseStrMap(params, appKey);
if (paramsMap != null && 2 == getEnv()) {
paramsMap.put("ATLAS", "daily");
}
sgContext.paramMap = paramsMap;
return this.sgMgr.getSecureSignatureComp().signRequest(sgContext, authCode);
} catch (SecException e) {
int errorCode = e.getErrorCode();
kPt.commitStats("SignMtopRequest", String.valueOf(errorCode), "");
params.put("SG_ERROR_CODE", String.valueOf(errorCode));
TBSdkLog.e("mtopsdk.InnerSignImpl", instanceId + " [getMtopApiSign] ISecureSignatureComponent signRequest error,errorCode=" + errorCode, e);
return null;
} catch (Exception e2) {
TBSdkLog.e("mtopsdk.InnerSignImpl", instanceId + " [getMtopApiSign] ISecureSignatureComponent signRequest error", e2);
return null;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment