Files
links/patches/application/common/library/scrm/HuojianUrlHelper.php
T

104 lines
2.8 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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 '';
}
}