101 lines
2.8 KiB
PHP
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;
|
|
}
|
|
} |