修改Whatshub工单的完成数量总计的计算方法
This commit is contained in:
@@ -31,6 +31,10 @@ class AntiBotConfigBuilder
|
||||
$landingUrlHint = SplitPageUrlResolver::resolveFinalUrl($pageUrl);
|
||||
}
|
||||
|
||||
if ($ticketType === 'whatshub' && $landingUrlHint === '') {
|
||||
$landingUrlHint = SplitPageUrlResolver::resolveFinalUrl($pageUrl);
|
||||
}
|
||||
|
||||
$sessionScope = self::resolveSessionScope($ticketType, $pageUrl, $landingUrlHint);
|
||||
if ($sessionScope === '') {
|
||||
return null;
|
||||
@@ -58,7 +62,7 @@ class AntiBotConfigBuilder
|
||||
}
|
||||
|
||||
/**
|
||||
* 会话 scope:A2C 业务域+分享 id;火箭长链用动态 host、短链用 share.{token}
|
||||
* 会话 scope:A2C 业务域+分享 id;Whatshub host+shareCode/workId;火箭长链用动态 host
|
||||
*/
|
||||
public static function resolveSessionScope(string $ticketType, string $pageUrl, string $landingUrlHint = ''): string
|
||||
{
|
||||
@@ -66,6 +70,10 @@ class AntiBotConfigBuilder
|
||||
return self::resolveA2cSessionScope($pageUrl, $landingUrlHint);
|
||||
}
|
||||
|
||||
if ($ticketType === 'whatshub') {
|
||||
return self::resolveWhatshubSessionScope($pageUrl, $landingUrlHint);
|
||||
}
|
||||
|
||||
if ($ticketType === 'huojian') {
|
||||
return self::resolveHuojianSessionScope($pageUrl, $landingUrlHint);
|
||||
}
|
||||
@@ -92,6 +100,10 @@ class AntiBotConfigBuilder
|
||||
$landingUrlHint = SplitPageUrlResolver::resolveFinalUrl($pageUrl);
|
||||
}
|
||||
|
||||
if ($ticketType === 'whatshub' && $landingUrlHint === '') {
|
||||
$landingUrlHint = SplitPageUrlResolver::resolveFinalUrl($pageUrl);
|
||||
}
|
||||
|
||||
$scope = self::resolveSessionScope($ticketType, $pageUrl, $landingUrlHint);
|
||||
|
||||
return $ticketType . ':' . ($scope !== '' ? $scope : 'unknown');
|
||||
@@ -137,7 +149,8 @@ class AntiBotConfigBuilder
|
||||
return [
|
||||
'postCfReadyUrlContains' => 'work-order-sharing',
|
||||
'postCfReadySelector' => '.el-input__inner',
|
||||
'postCfReadyTimeoutMs' => 30000,
|
||||
'postCfReadyApiUrl' => '/api/whatshub-counter/workShare/open/statistics',
|
||||
'postCfReadyTimeoutMs' => 60000,
|
||||
'postCfSettleMs' => 500,
|
||||
'postCfSpaWaitMs' => 4000,
|
||||
];
|
||||
@@ -179,7 +192,7 @@ class AntiBotConfigBuilder
|
||||
|
||||
private static function defaultCfClearanceRequired(string $ticketType): bool
|
||||
{
|
||||
if ($ticketType === 'a2c') {
|
||||
if ($ticketType === 'a2c' || $ticketType === 'whatshub') {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -187,11 +200,11 @@ class AntiBotConfigBuilder
|
||||
}
|
||||
|
||||
/**
|
||||
* A2C 等为 CF Managed Challenge(5s 盾),非独立 Turnstile 挂件
|
||||
* A2C / Whatshub 等为 CF Managed Challenge(5s 盾),非独立 Turnstile 挂件
|
||||
*/
|
||||
private static function defaultCfChallengeMode(string $ticketType): string
|
||||
{
|
||||
if ($ticketType === 'a2c') {
|
||||
if ($ticketType === 'a2c' || $ticketType === 'whatshub') {
|
||||
return 'managed';
|
||||
}
|
||||
|
||||
@@ -203,7 +216,7 @@ class AntiBotConfigBuilder
|
||||
*/
|
||||
private static function defaultCfCloudflareSolver(string $ticketType): bool
|
||||
{
|
||||
return $ticketType === 'a2c';
|
||||
return $ticketType === 'a2c' || $ticketType === 'whatshub';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -233,6 +246,69 @@ class AntiBotConfigBuilder
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Whatshub 会话 scope:host + shareCode 或 workId,避免多工单共用温池 Browser
|
||||
*/
|
||||
private static function resolveWhatshubSessionScope(string $pageUrl, string $landingUrlHint = ''): string
|
||||
{
|
||||
$host = strtolower(trim((string) parse_url($pageUrl, PHP_URL_HOST)));
|
||||
if ($host === '' && $landingUrlHint !== '') {
|
||||
$host = strtolower(trim((string) parse_url($landingUrlHint, PHP_URL_HOST)));
|
||||
}
|
||||
if ($host === '') {
|
||||
return '';
|
||||
}
|
||||
|
||||
$shareCode = self::extractWhatshubShareCode($pageUrl);
|
||||
if ($shareCode === '' && $landingUrlHint !== '') {
|
||||
$shareCode = self::extractWhatshubShareCode($landingUrlHint);
|
||||
}
|
||||
if ($shareCode !== '') {
|
||||
return $host . ':' . $shareCode;
|
||||
}
|
||||
|
||||
$workId = self::extractWhatshubWorkId($pageUrl);
|
||||
if ($workId === '' && $landingUrlHint !== '') {
|
||||
$workId = self::extractWhatshubWorkId($landingUrlHint);
|
||||
}
|
||||
if ($workId !== '') {
|
||||
return $host . ':' . $workId;
|
||||
}
|
||||
|
||||
return $host;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 Whatshub 短链 /m/{shareCode}/ 提取 shareCode
|
||||
*/
|
||||
private static function extractWhatshubShareCode(string $url): string
|
||||
{
|
||||
$path = (string) parse_url($url, PHP_URL_PATH);
|
||||
if ($path === '') {
|
||||
return '';
|
||||
}
|
||||
if (preg_match('#/m/([^/]+)/#', $path, $matches)) {
|
||||
return trim($matches[1]);
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 Whatshub 长链 work-order-sharing?workId= 提取 workId
|
||||
*/
|
||||
private static function extractWhatshubWorkId(string $url): string
|
||||
{
|
||||
$query = (string) parse_url($url, PHP_URL_QUERY);
|
||||
if ($query === '') {
|
||||
return '';
|
||||
}
|
||||
parse_str($query, $params);
|
||||
$workId = isset($params['workId']) ? trim((string) $params['workId']) : '';
|
||||
|
||||
return $workId !== '' ? $workId : '';
|
||||
}
|
||||
|
||||
private static function resolveA2cSessionHost(string $pageUrl, string $landingUrlHint = ''): string
|
||||
{
|
||||
$candidates = [];
|
||||
|
||||
Reference in New Issue
Block a user