修复火箭工单过盾同步问题
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\common\library\scrm;
|
||||
|
||||
/**
|
||||
* 火箭云控 URL 解析:短链(s.url99.me/code)与长链(*.url66.me/gds?link=)动态识别
|
||||
*
|
||||
* 长链域名可能为 v3.url66.me、v4.url66.me 等,禁止写死单一 host。
|
||||
*/
|
||||
final class HuojianUrlHelper
|
||||
{
|
||||
/** 火箭业务页路径特征 */
|
||||
public const BUSINESS_PATH_NEEDLE = '/gds';
|
||||
|
||||
/** 长链 query 中的分享 token 参数名 */
|
||||
public const LINK_QUERY_PARAM = 'link';
|
||||
|
||||
/**
|
||||
* 是否为火箭长链业务页(含 /gds 且带 link=)
|
||||
*/
|
||||
public static function isLongLinkUrl(string $pageUrl): bool
|
||||
{
|
||||
$path = (string) parse_url($pageUrl, PHP_URL_PATH);
|
||||
if ($path === '' || strpos($path, self::BUSINESS_PATH_NEEDLE) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$query = [];
|
||||
parse_str((string) parse_url($pageUrl, PHP_URL_QUERY), $query);
|
||||
|
||||
return trim((string) ($query[self::LINK_QUERY_PARAM] ?? '')) !== '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 从长链 URL 动态解析业务域(如 v3.url66.me)
|
||||
*/
|
||||
public static function extractBusinessHost(string $pageUrl): string
|
||||
{
|
||||
if (!self::isLongLinkUrl($pageUrl)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$host = strtolower(trim((string) parse_url($pageUrl, PHP_URL_HOST)));
|
||||
|
||||
return $host !== '' ? $host : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 提取分享稳定标识:长链 link= 或短链 path 段(如 50q3622j)
|
||||
*/
|
||||
public static function extractShareToken(string $pageUrl): string
|
||||
{
|
||||
if (self::isLongLinkUrl($pageUrl)) {
|
||||
$query = [];
|
||||
parse_str((string) parse_url($pageUrl, PHP_URL_QUERY), $query);
|
||||
|
||||
return trim((string) ($query[self::LINK_QUERY_PARAM] ?? ''));
|
||||
}
|
||||
|
||||
$path = trim((string) parse_url($pageUrl, PHP_URL_PATH), '/');
|
||||
if ($path === '' || strpos($path, '/') !== false) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (preg_match('/^[a-zA-Z0-9]+$/', $path) !== 1) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否为火箭短链入口(单段 path,非 /gds 长链)
|
||||
*/
|
||||
public static function isShortEntryUrl(string $pageUrl): bool
|
||||
{
|
||||
if (self::isLongLinkUrl($pageUrl)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return self::extractShareToken($pageUrl) !== '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 会话 scope:长链用动态业务域;短链用 share.{token}(跨长链域名复用 cookie jar)
|
||||
*/
|
||||
public static function resolveSessionScope(string $pageUrl): string
|
||||
{
|
||||
$businessHost = self::extractBusinessHost($pageUrl);
|
||||
if ($businessHost !== '') {
|
||||
return $businessHost;
|
||||
}
|
||||
|
||||
$token = self::extractShareToken($pageUrl);
|
||||
if ($token !== '') {
|
||||
return 'share.' . $token;
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user