多个A2C任务时防止同时同步引起错误
This commit is contained in:
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace app\common\library\scrm;
|
||||
|
||||
use app\common\service\SplitPageUrlResolver;
|
||||
use think\Config;
|
||||
|
||||
/**
|
||||
@@ -26,6 +27,10 @@ class AntiBotConfigBuilder
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($ticketType === 'a2c' && $landingUrlHint === '') {
|
||||
$landingUrlHint = SplitPageUrlResolver::resolveFinalUrl($pageUrl);
|
||||
}
|
||||
|
||||
$sessionScope = self::resolveSessionScope($ticketType, $pageUrl, $landingUrlHint);
|
||||
if ($sessionScope === '') {
|
||||
return null;
|
||||
@@ -83,6 +88,10 @@ class AntiBotConfigBuilder
|
||||
*/
|
||||
public static function resolveSessionKey(string $ticketType, string $pageUrl, string $landingUrlHint = ''): string
|
||||
{
|
||||
if ($ticketType === 'a2c' && $landingUrlHint === '') {
|
||||
$landingUrlHint = SplitPageUrlResolver::resolveFinalUrl($pageUrl);
|
||||
}
|
||||
|
||||
$scope = self::resolveSessionScope($ticketType, $pageUrl, $landingUrlHint);
|
||||
|
||||
return $ticketType . ':' . ($scope !== '' ? $scope : 'unknown');
|
||||
@@ -244,18 +253,41 @@ class AntiBotConfigBuilder
|
||||
|
||||
/**
|
||||
* A2C 会话 scope:业务域 + 分享 id(避免多工单共用温池 Browser 互相干扰)
|
||||
*
|
||||
* 短链先 HTTP 预解析再提取 ?id=,确保不同分享页不会落到同一 sessionKey。
|
||||
*/
|
||||
private static function resolveA2cSessionScope(string $pageUrl, string $landingUrlHint = ''): string
|
||||
{
|
||||
$host = self::resolveA2cSessionHost($pageUrl, $landingUrlHint);
|
||||
$resolvedUrl = self::resolveA2cResolvedUrl($pageUrl, $landingUrlHint);
|
||||
$host = self::resolveA2cSessionHost($pageUrl, $resolvedUrl);
|
||||
$shareId = self::extractA2cShareId($pageUrl);
|
||||
if ($shareId === '' && $landingUrlHint !== '') {
|
||||
$shareId = self::extractA2cShareId($landingUrlHint);
|
||||
if ($shareId === '') {
|
||||
$shareId = self::extractA2cShareId($resolvedUrl);
|
||||
}
|
||||
|
||||
return $shareId !== '' ? $host . ':' . $shareId : $host;
|
||||
}
|
||||
|
||||
/**
|
||||
* A2C 短链 HTTP 预解析:优先已有 landingUrlHint,否则跟随重定向得到长链
|
||||
*/
|
||||
private static function resolveA2cResolvedUrl(string $pageUrl, string $landingUrlHint = ''): string
|
||||
{
|
||||
if ($landingUrlHint !== '' && self::extractA2cShareId($landingUrlHint) !== '') {
|
||||
return $landingUrlHint;
|
||||
}
|
||||
if (self::extractA2cShareId($pageUrl) !== '') {
|
||||
return $pageUrl;
|
||||
}
|
||||
|
||||
$resolved = SplitPageUrlResolver::resolveFinalUrl($pageUrl);
|
||||
if ($resolved !== '') {
|
||||
return $resolved;
|
||||
}
|
||||
|
||||
return $landingUrlHint !== '' ? $landingUrlHint : $pageUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 A2C 分享 URL 提取 id 查询参数
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user