|
@@ -225,6 +225,39 @@ namespace molilian.core
|
|
|
return new APIResult(info, code);
|
|
return new APIResult(info, code);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private static TkDataDTO CreateTaobaoFailureResult(TkDataDTO result)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 转链前保存失败返回所需的字段,避免成功后的商品信息、淘口令、推广文案进入隐藏号响应。
|
|
|
|
|
+ return new TkDataDTO
|
|
|
|
|
+ {
|
|
|
|
|
+ success = false,
|
|
|
|
|
+ message = "转链失败",
|
|
|
|
|
+ reason = "无法转链",
|
|
|
|
|
+ commercial = false,
|
|
|
|
|
+ channel = result.channel,
|
|
|
|
|
+ channel_type = result.channel_type,
|
|
|
|
|
+ link_type = result.link_type,
|
|
|
|
|
+ accountId = result.accountId,
|
|
|
|
|
+ itemId = result.itemId,
|
|
|
|
|
+ mktId = result.mktId,
|
|
|
|
|
+ itemName = "点击打开淘宝APP",
|
|
|
|
|
+ content = result.content,
|
|
|
|
|
+ shortLinkurl = result.shortLinkurl,
|
|
|
|
|
+ parse_type = result.parse_type,
|
|
|
|
|
+ riskStrategy = result.riskStrategy,
|
|
|
|
|
+ launchScene = result.launchScene,
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static TkDataDTO ResolveTaobaoOutputResult(TkDataDTO result, TkDataDTO? hiddenAccountFailure)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!result.success || hiddenAccountFailure == null) return result;
|
|
|
|
|
+
|
|
|
|
|
+ // 只替换对外响应;隐藏号的日志、统计由 TkLogCore.ParseLogAsync 统一跳过。
|
|
|
|
|
+ hiddenAccountFailure.deeplink_url = result.deeplink_url;
|
|
|
|
|
+ return hiddenAccountFailure;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private static ActionResult? TryRejectBusyLimitedRequest(UnionParseRequest request)
|
|
private static ActionResult? TryRejectBusyLimitedRequest(UnionParseRequest request)
|
|
|
{
|
|
{
|
|
|
if (!"pdd".Equals(request.Channel, StringComparison.OrdinalIgnoreCase))
|
|
if (!"pdd".Equals(request.Channel, StringComparison.OrdinalIgnoreCase))
|
|
@@ -417,6 +450,7 @@ namespace molilian.core
|
|
|
{
|
|
{
|
|
|
bool other_aff = false;
|
|
bool other_aff = false;
|
|
|
AlimamaPlus alimama = null;
|
|
AlimamaPlus alimama = null;
|
|
|
|
|
+ TkDataDTO? hiddenAccountFailure = null;
|
|
|
//content = content.UrlDecode();
|
|
//content = content.UrlDecode();
|
|
|
var result = AlimamaPlus.GetFormattedObject(request);
|
|
var result = AlimamaPlus.GetFormattedObject(request);
|
|
|
|
|
|
|
@@ -717,7 +751,11 @@ namespace molilian.core
|
|
|
}
|
|
}
|
|
|
result.accountId = account.id;
|
|
result.accountId = account.id;
|
|
|
result.accountName = account.company;
|
|
result.accountName = account.company;
|
|
|
- if (request.AccountId <= 0)
|
|
|
|
|
|
|
+ if (account.is_hide)
|
|
|
|
|
+ {
|
|
|
|
|
+ _ = TracksCore.RevertParseRequestAsync(request);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (request.AccountId <= 0)
|
|
|
{
|
|
{
|
|
|
_ = TracksCore.RecordParseAccountRequestAsync(
|
|
_ = TracksCore.RecordParseAccountRequestAsync(
|
|
|
request.Channel,
|
|
request.Channel,
|
|
@@ -728,6 +766,7 @@ namespace molilian.core
|
|
|
|
|
|
|
|
|
|
|
|
|
alimama = new AlimamaPlus(account);
|
|
alimama = new AlimamaPlus(account);
|
|
|
|
|
+ hiddenAccountFailure = account.is_hide ? CreateTaobaoFailureResult(result) : null;
|
|
|
|
|
|
|
|
|
|
|
|
|
int timeout = alimama._config.rt_max;
|
|
int timeout = alimama._config.rt_max;
|
|
@@ -801,71 +840,74 @@ namespace molilian.core
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ var output = ResolveTaobaoOutputResult(result, hiddenAccountFailure);
|
|
|
|
|
+ // 隐藏号不输出埋点
|
|
|
|
|
+ bool hiddenAccount = hiddenAccountFailure != null;
|
|
|
if ("brwsimilar".Equals(request.RiskStrategy))
|
|
if ("brwsimilar".Equals(request.RiskStrategy))
|
|
|
{
|
|
{
|
|
|
- bool clearGoodsFields = !result.success;
|
|
|
|
|
|
|
+ bool clearGoodsFields = !output.success;
|
|
|
return TaobaoParseOutput(result, swData, new
|
|
return TaobaoParseOutput(result, swData, new
|
|
|
{
|
|
{
|
|
|
- success = ValidateDeeplinkIfRequired(result.success, result.deeplink_url),
|
|
|
|
|
- result.commercial,
|
|
|
|
|
- exposeTracks = TracksCore.BuildBrwSimilarPath(TrackType.Expose, result),
|
|
|
|
|
- clickTracks = TracksCore.BuildBrwSimilarPath(TrackType.Click, result),
|
|
|
|
|
- result.with_middle_page,
|
|
|
|
|
- result.message,
|
|
|
|
|
- sub_message = result.reason,
|
|
|
|
|
- home_page = "tbopen://m.taobao.com/tbopen/index.html".Equals(result.deeplink_url),
|
|
|
|
|
- link_type = result.link_type.ToString(),
|
|
|
|
|
- channel = result?.channel.ToString(),
|
|
|
|
|
- result.channel_type,
|
|
|
|
|
- shopTitle = clearGoodsFields ? string.Empty : result.shopTitle,
|
|
|
|
|
- itemId = clearGoodsFields ? string.Empty : result.itemId,
|
|
|
|
|
- itemName = clearGoodsFields ? string.Empty : result.itemName,
|
|
|
|
|
- pic = clearGoodsFields ? string.Empty : result.pic,
|
|
|
|
|
- price = clearGoodsFields ? string.Empty : (object)result.reservePrice,
|
|
|
|
|
- zkFinalPrice = clearGoodsFields ? string.Empty : (object)result.zkFinalPrice,
|
|
|
|
|
- promotionPrice = clearGoodsFields ? string.Empty : (object)result.promotionPrice,
|
|
|
|
|
- couponAmount = clearGoodsFields ? string.Empty : (object)result.couponAmount,
|
|
|
|
|
- couponEffectiveStartTime = clearGoodsFields ? string.Empty : result.couponEffectiveStartTime,
|
|
|
|
|
- couponEffectiveEndTime = clearGoodsFields ? string.Empty : result.couponEffectiveEndTime,
|
|
|
|
|
- result.shortLinkurl,
|
|
|
|
|
- result.deeplink_url,
|
|
|
|
|
- result.riskStrategy,
|
|
|
|
|
- result.launchScene,
|
|
|
|
|
- result.content,
|
|
|
|
|
- result.taoToken,
|
|
|
|
|
|
|
+ success = ValidateDeeplinkIfRequired(output.success, output.deeplink_url),
|
|
|
|
|
+ output.commercial,
|
|
|
|
|
+ exposeTracks = hiddenAccount ? string.Empty : TracksCore.BuildBrwSimilarPath(TrackType.Expose, output),
|
|
|
|
|
+ clickTracks = hiddenAccount ? string.Empty : TracksCore.BuildBrwSimilarPath(TrackType.Click, output),
|
|
|
|
|
+ output.with_middle_page,
|
|
|
|
|
+ output.message,
|
|
|
|
|
+ sub_message = output.reason,
|
|
|
|
|
+ home_page = "tbopen://m.taobao.com/tbopen/index.html".Equals(output.deeplink_url),
|
|
|
|
|
+ link_type = output.link_type.ToString(),
|
|
|
|
|
+ channel = output?.channel.ToString(),
|
|
|
|
|
+ output.channel_type,
|
|
|
|
|
+ shopTitle = clearGoodsFields ? string.Empty : output.shopTitle,
|
|
|
|
|
+ itemId = clearGoodsFields ? string.Empty : output.itemId,
|
|
|
|
|
+ itemName = clearGoodsFields ? string.Empty : output.itemName,
|
|
|
|
|
+ pic = clearGoodsFields ? string.Empty : output.pic,
|
|
|
|
|
+ price = clearGoodsFields ? string.Empty : (object)output.reservePrice,
|
|
|
|
|
+ zkFinalPrice = clearGoodsFields ? string.Empty : (object)output.zkFinalPrice,
|
|
|
|
|
+ promotionPrice = clearGoodsFields ? string.Empty : (object)output.promotionPrice,
|
|
|
|
|
+ couponAmount = clearGoodsFields ? string.Empty : (object)output.couponAmount,
|
|
|
|
|
+ couponEffectiveStartTime = clearGoodsFields ? string.Empty : output.couponEffectiveStartTime,
|
|
|
|
|
+ couponEffectiveEndTime = clearGoodsFields ? string.Empty : output.couponEffectiveEndTime,
|
|
|
|
|
+ output.shortLinkurl,
|
|
|
|
|
+ output.deeplink_url,
|
|
|
|
|
+ output.riskStrategy,
|
|
|
|
|
+ output.launchScene,
|
|
|
|
|
+ output.content,
|
|
|
|
|
+ output.taoToken,
|
|
|
other_aff,
|
|
other_aff,
|
|
|
- promotionImg = clearGoodsFields ? string.Empty : (object)result.PromotionImg
|
|
|
|
|
|
|
+ promotionImg = clearGoodsFields ? string.Empty : (object)output.PromotionImg
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
return TaobaoParseOutput(result, swData, new
|
|
return TaobaoParseOutput(result, swData, new
|
|
|
{
|
|
{
|
|
|
- success = ValidateDeeplinkIfRequired(result.success, result.deeplink_url),
|
|
|
|
|
- result.commercial,
|
|
|
|
|
- exposeTracks = TracksCore.BuildPath(TrackType.Expose, result),
|
|
|
|
|
- clickTracks = TracksCore.BuildPath(TrackType.Click, result),
|
|
|
|
|
- result.with_middle_page,
|
|
|
|
|
- result.message,
|
|
|
|
|
- sub_message = result.reason,
|
|
|
|
|
- home_page = "tbopen://m.taobao.com/tbopen/index.html".Equals(result.deeplink_url),
|
|
|
|
|
- link_type = result.link_type.ToString(),
|
|
|
|
|
- channel = result?.channel.ToString(),
|
|
|
|
|
- result.channel_type,
|
|
|
|
|
- result.shopTitle,
|
|
|
|
|
- result.itemId,
|
|
|
|
|
- result.itemName,
|
|
|
|
|
- result.pic,
|
|
|
|
|
- result.zkFinalPrice,
|
|
|
|
|
- price = result.reservePrice,
|
|
|
|
|
- result.promotionPrice,
|
|
|
|
|
- result.couponAmount,
|
|
|
|
|
- result.couponEffectiveStartTime,
|
|
|
|
|
- result?.couponEffectiveEndTime,
|
|
|
|
|
- result.shortLinkurl,
|
|
|
|
|
- result.deeplink_url,
|
|
|
|
|
- result.riskStrategy,
|
|
|
|
|
- result.launchScene,
|
|
|
|
|
- result.content,
|
|
|
|
|
- result.taoToken,
|
|
|
|
|
|
|
+ success = ValidateDeeplinkIfRequired(output.success, output.deeplink_url),
|
|
|
|
|
+ output.commercial,
|
|
|
|
|
+ exposeTracks = hiddenAccount ? string.Empty : TracksCore.BuildPath(TrackType.Expose, output),
|
|
|
|
|
+ clickTracks = hiddenAccount ? string.Empty : TracksCore.BuildPath(TrackType.Click, output),
|
|
|
|
|
+ output.with_middle_page,
|
|
|
|
|
+ output.message,
|
|
|
|
|
+ sub_message = output.reason,
|
|
|
|
|
+ home_page = "tbopen://m.taobao.com/tbopen/index.html".Equals(output.deeplink_url),
|
|
|
|
|
+ link_type = output.link_type.ToString(),
|
|
|
|
|
+ channel = output?.channel.ToString(),
|
|
|
|
|
+ output.channel_type,
|
|
|
|
|
+ output.shopTitle,
|
|
|
|
|
+ output.itemId,
|
|
|
|
|
+ output.itemName,
|
|
|
|
|
+ output.pic,
|
|
|
|
|
+ output.zkFinalPrice,
|
|
|
|
|
+ price = output.reservePrice,
|
|
|
|
|
+ output.promotionPrice,
|
|
|
|
|
+ output.couponAmount,
|
|
|
|
|
+ output.couponEffectiveStartTime,
|
|
|
|
|
+ output?.couponEffectiveEndTime,
|
|
|
|
|
+ output.shortLinkurl,
|
|
|
|
|
+ output.deeplink_url,
|
|
|
|
|
+ output.riskStrategy,
|
|
|
|
|
+ output.launchScene,
|
|
|
|
|
+ output.content,
|
|
|
|
|
+ output.taoToken,
|
|
|
other_aff,
|
|
other_aff,
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -1491,7 +1533,11 @@ namespace molilian.core
|
|
|
result.accountId = account.id;
|
|
result.accountId = account.id;
|
|
|
result.accountName = account.name;
|
|
result.accountName = account.name;
|
|
|
result.proxy_node = account.nodeName;
|
|
result.proxy_node = account.nodeName;
|
|
|
- if (request.AccountId <= 0)
|
|
|
|
|
|
|
+ if (account.is_hide)
|
|
|
|
|
+ {
|
|
|
|
|
+ _ = TracksCore.RevertParseRequestAsync(request);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (request.AccountId <= 0)
|
|
|
{
|
|
{
|
|
|
_ = TracksCore.RecordParseAccountRequestAsync(
|
|
_ = TracksCore.RecordParseAccountRequestAsync(
|
|
|
request.Channel,
|
|
request.Channel,
|
|
@@ -1688,7 +1734,11 @@ namespace molilian.core
|
|
|
result.accountId = account.id;
|
|
result.accountId = account.id;
|
|
|
result.accountName = account.name;
|
|
result.accountName = account.name;
|
|
|
result.proxy_node = account.nodeName;
|
|
result.proxy_node = account.nodeName;
|
|
|
- if (request.AccountId <= 0)
|
|
|
|
|
|
|
+ if (account.is_hide)
|
|
|
|
|
+ {
|
|
|
|
|
+ _ = TracksCore.RevertParseRequestAsync(request);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (request.AccountId <= 0)
|
|
|
{
|
|
{
|
|
|
_ = TracksCore.RecordParseAccountRequestAsync(
|
|
_ = TracksCore.RecordParseAccountRequestAsync(
|
|
|
request.Channel,
|
|
request.Channel,
|
|
@@ -1761,9 +1811,11 @@ namespace molilian.core
|
|
|
|
|
|
|
|
private static APIResult PddParseOutput(PddDataDTO result, APIResultCodeEnum code = APIResultCodeEnum.OK, PddDataDTO? hiddenAccountFailure = null)
|
|
private static APIResult PddParseOutput(PddDataDTO result, APIResultCodeEnum code = APIResultCodeEnum.OK, PddDataDTO? hiddenAccountFailure = null)
|
|
|
{
|
|
{
|
|
|
|
|
+ // 隐藏号不输出埋点
|
|
|
|
|
+ bool hiddenAccount = hiddenAccountFailure != null;
|
|
|
if (result.success && hiddenAccountFailure != null)
|
|
if (result.success && hiddenAccountFailure != null)
|
|
|
{
|
|
{
|
|
|
- // 只替换对外响应,保留真实转链结果供日志和统计使用。
|
|
|
|
|
|
|
+ // 只替换对外响应;隐藏号的日志、统计由 TkLogCore.ParseLogAsync 统一跳过。
|
|
|
hiddenAccountFailure.deeplink_url = result.deeplink_url;
|
|
hiddenAccountFailure.deeplink_url = result.deeplink_url;
|
|
|
result = hiddenAccountFailure;
|
|
result = hiddenAccountFailure;
|
|
|
}
|
|
}
|
|
@@ -1783,8 +1835,8 @@ namespace molilian.core
|
|
|
success = ValidateDeeplinkIfRequired(result.success, result.deeplink_url),
|
|
success = ValidateDeeplinkIfRequired(result.success, result.deeplink_url),
|
|
|
result.message,
|
|
result.message,
|
|
|
result.commercial,
|
|
result.commercial,
|
|
|
- exposeTracks = TracksCore.BuildPath(TrackType.Expose, result),
|
|
|
|
|
- clickTracks = TracksCore.BuildPath(TrackType.Click, result),
|
|
|
|
|
|
|
+ exposeTracks = hiddenAccount ? string.Empty : TracksCore.BuildPath(TrackType.Expose, result),
|
|
|
|
|
+ clickTracks = hiddenAccount ? string.Empty : TracksCore.BuildPath(TrackType.Click, result),
|
|
|
sub_message = result.reason,
|
|
sub_message = result.reason,
|
|
|
home_page = "pinduoduo://com.xunmeng.pinduoduo/".Equals(result.deeplink_url),
|
|
home_page = "pinduoduo://com.xunmeng.pinduoduo/".Equals(result.deeplink_url),
|
|
|
link_type = result.link_type.ToString(),
|
|
link_type = result.link_type.ToString(),
|