Files
useds/app/common/service/WordpressVisitorService.php
T
2026-02-02 15:24:22 +08:00

101 lines
2.8 KiB
PHP

<?php
namespace app\common\service;
use app\common\model\User;
use app\common\model\UserGroupMembers;
use app\common\validate\WordpressVisitorValidate;
use app\common\traits\crud\CrudServiceTrait;
use app\common\model\WordpressVisitor;
use support\exception\BusinessException;
use support\Redis;
use support\Request;
class WordpressVisitorService
{
use CrudServiceTrait;
/**
* 指定当前要操作的模型
*/
protected string $modelClass = WordpressVisitor::class;
/**
* 验证器
*/
protected $validator = WordpressVisitorValidate::class;
/**
* 获取验证器
*/
public function getValidator()
{
return new $this->validator;
}
public function whatsApp(Request $request){
// $userAgent = $_SERVER['HTTP_USER_AGENT'];
// $acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$userAgent = $request->header('User-Agent','');
$acceptLanguage = $request->header('Accept-Language','');
$referer = $request->header('referer');
$ip = $request->getRealIp();
$md5Hash = md5($userAgent . '-' . $acceptLanguage . '-' . $ip);
$visitor = WordpressVisitor::where('md5_unique', $md5Hash)->first();
if (!empty($visitor)) {
$visitor->updated_at = time();
$visitor->save();
$user = User::where('id',$visitor['user_id'])->first();
return $this->url($user['whatsapp'], $referer);
}
$lastId = Redis::get('wp_whatsApp_user');
if($lastId){
$last = WordpressVisitor::orderBy('id','desc')->first();
$lastId = $last['id']??0;
}
$userIds = User::where('role',1)
->where('whatsapp','!=','')
->orderBy('id','asc')
->get()
->toArray();
if(empty($userIds)){
throw new BusinessException('没有符合条件的whatsApp~');
}
$userIds = array_column($userIds, 'id');
$userIds = array_values($userIds);
$id = 0;
foreach ($userIds as $userId) {
if($userId < $lastId){
$id = $userId;
}
}
if(empty($id)){
$id = array_shift($userIds);
}
Redis::set('wp_whatsApp_user',$id);
$data = [
'user_agent' => $userAgent,
'accept_language' => $acceptLanguage,
'ip' => $ip,
'md5_unique' => $md5Hash,
'user_id' => $id,
];
WordpressVisitor::create($data);
$user = User::where('id',$id)->first();
//return $user['phone'];
return $this->url($user['whatsapp'], $referer);
}
public function url($phone,$referer){
$url = "https://wa.me/" . $phone;
if(!empty($referer)){
$url = $url . "?text=来自%20" . $referer;
}
return $url;
}
}