说明
本文章测试的核心接口为添加购物车的功能。针对Cookie的进行续期。

已知请求方式为:POST
请求地址:https://goods.dd373.com/api/ShopCart/AddCartShop
请求内容:{"ShopNumber":"DB20260228122718-76464","Count":1}
请求头:cookie:goods.dd373.com=b26aca71-a88c-49a6-b90c-c3490441f969;
在请求头中,他的cookie参数还是挺多的,但实际测试下去,goods.dd373.com的参数实效只有一个小时的时间。本文就是来探讨goods.dd373.com参数应该如何来进行续期。
开始
首先进行登陆,登陆时开启开发者工具,勾选保留日志。

登陆成功之后,他的最底部Cookie是这样的:
imagestylewebp=1; dpushPC=true; acw_tc=0a15e18717722685704137087e5194dfd0d261269dddd9fdb78740a24fef17; new_pc_rememberPassword=1; clientId=xxx; loginToken=xxx; refreshToken=xxx; login.dd373.com=xxx; dpush.dd373.com=xxx; newuser.dd373.com=xxx; thirdbind.dd373.com=xxx; goods.dd373.com=xxx; imservice.dd373.com=xxx
在请求中,可以看到有较多的Save请求,根据上下文中的Cookie可以得到, 此请求基本可以肯定,为保存当前的参数至服务端。客户端做请求时,后台均会判断此Cookie是否为失效。
请求体:
请求内容:
而且他们的参数又都是独立,如参数goods.dd373.com,对应的便是此子域名所需要的核心参,其它同理。
dpush.dd373.com=xxx; newuser.dd373.com=xxx; thirdbind.dd373.com=xxx; goods.dd373.com=xxx; imservice.dd373.com=xxx
续期
在Save请求中,点击Initiator(发起程序),可以看到此请求引用了一个js文件。ajax_filter.js
他的具体代码为:https://sta.dd373.com/newfile/common/js/ajax_filter.js?v=202602281521
JS中还带了一些注释。基本大致意思是可以理的通了。
流程
通过JS中,以及我多次试错,基本是发现请求三次请求。
登陆成功之后,自然生成refreshToken,refreshToken为长效token,他最长时间可为30天。
第一个请求,通过此refreshToken来刷新Token值。
第二个请求,通过第一个请求的Token值,来获取ChildToken,此ChildToken为goods.dd373.com=xxx;xxx的这个值。
第三个请求,则是将ChildToken提交到后端。便于接口请求。如果失效,继续执行三次请求进行续期。
第一次请求
//通过refreshToken获取loginToken
function getRefreshToken(refreshToken) {
var dtd = $.Deferred();
var data = { 'RefreshToken': refreshToken, 'ClientType': 1, 'RefreshTokenType': 1, 'ClientId': getTokenCookies("clientId") ? getTokenCookies("clientId") : '' };
if (!getTokenCookies('refreshToken')) {
data['RefreshTokenType'] = 2;
}
//app中打开页面时,需要获取app的ClientType
if (getTokenCookies('tokenClienType')) {
data['ClientType'] = getTokenCookies('tokenClienType');
}
$.ajax({
type: "post",
url: "//login.dd373.com/api/Login/RefreshToken",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function success(data) {
dtd.resolve(data);
}
});
return dtd;
}
请求地址为:https://login.dd373.com/api/Login/RefreshToken
请求内容为:{"RefreshToken":"xxxxx","ClientType":1,"RefreshTokenType":1,"ClientId":"xxxx"}
RefreshToken与ClientId值的来源为登陆成功之后的Cookie中的参数。咱们做的是续期,并非为登陆,所以这个登陆成功之后取Cookie便可。
他的返回为:
{"StatusCode":"0","StatusMsg":"请求成功","StatusData":{"ResultCode":"0","ResultMsg":"操作成功","ResultData":{"Token":"xxx","TokenExpireDate":"2026-02-28 18:23:50","TokenExpireDateForCST":"Sat, 28 Feb 2026 10:23:50 GMT","TokenRelativeExpireTime":3570,"RefreshToken":"xxx","RefreshTokenExpireDate":"2026-03-30 16:59:33","RefreshTokenExpireDateForCST":"Mon, 30 Mar 2026 08:59:33 GMT","RefreshTokenRelativeExpireTime":2590512,"ClientId":"xxx"}}}第一个请求中,得到token值,然后进行第二个请求。
第二次请求
//通过loginToken获取域Token
function getDomainToken(loginToken, domain) {
var dtd = $.Deferred();
$.ajax({
type: "get",
url: '//login.dd373.com/api/Login/GetChildToken',
data: { 'Token': loginToken, 'ServiceType': domain },
dataType: 'jsonp',
success: function success(data) {
dtd.resolve(data);
}
});
return dtd;
}
请求地址:https://login.dd373.com/api/Login/GetChildToken?Token={token}&ServiceType=goods.dd373.com
token值为上一轮请求所得到的token值。
他的返回为:
{"StatusCode":"0","StatusMsg":"请求成功","StatusData":{"ResultCode":"0","ResultMsg":"操作成功","ResultData":{"ChildToken":"xxx","ChildTokenExpireDate":"2026-02-28 18:27:28","ChildTokenExpireDateForCST":"Sat, 28 Feb 2026 10:27:28 GMT","ChildTokenRelativeExpireTime":3570}}}上面返回的JSON中,需要得到ChildToken节点,进行第三次请求。其中ChildTokenRelativeExpireTime节点为token值的失效时间。
第三次请求
//保存域Token
function saveDomainToken(domainToken, domain) {
var dtd = $.Deferred();
$.ajax({
type: 'post',
url: '//' + domain + '/api/Token/Save',
data: JSON.stringify({ 'ChildToken': domainToken }),
dataType: "json",
contentType: "application/json",
success: function success(data) {
if (data.ResultCode == 0) {
dtd.resolve(data);
}
}
});
return dtd;
}
因为我只需要网站的添加购物车的这个协议,而此操作所需要的cookie节点为:goods.dd373.com,所以请求为:https://goods.dd373.com/api/Token/Save
请求内容为:{"ChildToken":"xxx"}
他的返回为:{"StatusCode":"0","StatusMsg":"请求成功","StatusData":{"ResultCode":"0","ResultMsg":"操作成功","ResultData":{}}}
第三个请求成功之后,此续期流程结束。下次如果cookie中的goods.dd373.com参数失效,继续重复上述三次请求,继续进行续期。