调试的API:
[HTML] 纯文本查看 复制代码 https://api.m.jd.com/api?functionId=jxpp.picksite.queryOpenProvinceCityList&appid=jxpp_miniprogram&t=1625075969787&loginType=undefined&loginWQBiz=&body={"buid":325,"time":1625075969788,"signStr":"a35c0af64d2c50924fc1307fb7634209"}&channel=wxappjxpp&cv=1.15.0&clientVersion=1.15.0&client=wxappjxpp&uuid=3eede30a-87b9-517b-0900-75ba01e26c45113d
程序:微信小程序
众所周知,JD拼拼JDPP获取它的商品需要与https://api.m.jd.com/进行通信,提交的数据中sign需要算法获得,并不是改下表单数值就能完成的,那么可以确定,通过各种抓包分析同于不同知道sign是由functionId、appid、loginType、loginWQBiz、buid、time获得的,
一、首先分析URL
1.functionId大概是函数名字,调用的函数类什么的,参与sign的计算
2.appid 看参数顾名思义,就是给JXPP小程序调用的,参与sign的计算
3.loginType 与登录有关
4.time 调用时间,
5.body 里面的就是提交的参数[buid:325]是固定的,不是用户UID什么的,[time]时间,参与sign的计算
6.剩下那部分,只要sign正确可有可无
二、通过反编译小程序,没错,不难发现,拼装成sing的五个东西channel、cv、clientVersion、client、uuid、body里面的数据
key: "dealParams",
value: function(e) {
var t = {
signKey: "kjylzdcg",
data: {
channel: d["a"].getClient(),
cv: d["a"].getVersion(),
clientVersion: d["a"].getVersion(),
client: d["a"].getClient(),
uuid: Object(B["d"])().uuid
}
};
e.body = e.body || {}, "undefined" == typeof e.body["buid"] && (e.body["buid"] = d["a"].getBusinessId()),
e && Object.assign(t, e), Object.assign(t.body, {
time: new Date().getTime()
});
var a = t.body || "";
"string" != typeof a && (a = JSON.stringify(a));
var n, i = this.getSignString(a);
return e.body.signStr = i, n = Object.assign({}, t.data, e), n;
}
}
这应该就是sign算法的函数了,其他看不懂
2.这个应该是组装成sgin的流程,只看懂AscII和md5加密
[JavaScript] 纯文本查看 复制代码 value: function(e) {
e = JSON.parse(e);
var t = this.orderByAscII(e), a = this.getParamsValue(t);
a = a.toString();
var n = A.md5(a, "xtl_sqg_mall-^&*-damai_(789)_@#$");
return n;
}
最后附上,小程序反编译后的源码,有兴趣的小伙伴一起探讨
|