43 lines
1.1 KiB
PHP
43 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace app\common\service\qywx;
|
|
|
|
/** 企业微信获客助手链接校验。 */
|
|
class QywxCustomerAcquisitionLinkService
|
|
{
|
|
private const HOST = 'work.weixin.qq.com';
|
|
|
|
/**
|
|
* 只接受企业微信获客助手生成的 https://work.weixin.qq.com/ca/... 链接。
|
|
*/
|
|
public static function isAllowed(string $url, bool $allowEmpty = false): bool
|
|
{
|
|
$url = trim($url);
|
|
if ($url === '') {
|
|
return $allowEmpty;
|
|
}
|
|
|
|
$parts = parse_url($url);
|
|
if (!is_array($parts)
|
|
|| strtolower((string) ($parts['scheme'] ?? '')) !== 'https'
|
|
|| strtolower((string) ($parts['host'] ?? '')) !== self::HOST
|
|
|| isset($parts['user'])
|
|
|| isset($parts['pass'])
|
|
|| (isset($parts['port']) && (int) $parts['port'] !== 443)
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
$path = (string) ($parts['path'] ?? '');
|
|
|
|
return preg_match('#^/ca/[A-Za-z0-9_-]+/?$#', $path) === 1;
|
|
}
|
|
|
|
public static function example(): string
|
|
{
|
|
return 'https://work.weixin.qq.com/ca/xxxxxxxx';
|
|
}
|
|
}
|