love_php/app/Repositories/Eloquent/SmsRepository.php

198 lines
4.9 KiB
PHP
Raw Normal View History

2026-04-02 09:20:51 +08:00
<?php
namespace App\Repositories\Eloquent;
use App\Models\Message;
use App\Models\Paas;
use App\Utils\Str;
use App\Utils\Messenger;
/**
* Sms Repository
*
* Class SmsRepository
* @package App\Repositories\Eloquent
*/
class SmsRepository extends Repository
{
/**
* 指定模型名称
*
* @return mixed
*/
function model()
{
return 'App\Models\Message';
}
/*76y
* //生成验证码短信记录并发送短信
* todo:
* 1. 检查是否重复发送
* 2. 检查IP限制?
* 3. 增加验证码类型
*/
function sentCode(array $data){
if (env('APP_ENV') != 'production') {
$data['code'] = 999999;
}else{
$data['code'] = Str::random(6, 1);
}
list($key, $params)=$data['message'];
if (isset($params['paas']) && $params['paas'] != 'null' && $params['paas'] != 'FL') {
$title = Paas::where('name', $params['paas'])->value('title');
$title = $title?$title.'':'';
}else{
$title = '';
}
$params['code'] = $data['code'];
$params['title'] = $title;
$data['confirmed'] = 0;
$data['message'] = __('messenger.'.$key, $params);
$this->model->create($data);
Messenger::sendSMS($data['phone'], $data['message']);
return true;
}
/** 发送短信 */
function sendMessages($mobile, $message){
Messenger::sendSMS($mobile, $message);
}
//老的发送短信接口
function create(array $data){
return $this->sentCode($data);
}
//发送普通消息
function sentMessage($mobile, $message){
if (empty($mobile)) {
return true;
}
$this->model->create([
'phone'=>$mobile,
'message'=>$message,
'confirmed' => 1,
'ip' => request()?request()->ip():'127.0.0.1',
]);
$result = Messenger::sendSMS($mobile, $message);
return $result;
}
/**
* 发送esay短信
* @param [type] $mobile [description]
* @param [type] $message [description]
* @param array $data [description]
* @return [type] [description]
*/
function sendEasySms($mobile, $message, $template, $data=[])
{
if (empty($mobile)) {
return true;
}
$this->model->create([
'phone'=>$mobile,
'message'=>$message,
'confirmed' => 1,
'ip' => request()?request()->ip():'127.0.0.1',
]);
Messenger::sendEasySms($mobile, $message, $template, $data);
return true;
}
/*
* 检查是否合法
* 1. 正常返回false
* 2. 失败返回原因
*
* todo:
* 1. 只有最近, 旧的失效
*/
function check($mobile, $code){
if(!$code){
return '请填写验证码';
}
if ($mobile == '19954279421' && $code == '9527') {
return false;
}
if ($code == '009527') return false;
//测试用万能验证码
// if(/*config('app.debug') && */ $code=='999999' && env('APP_ENV') != 'production'){
if( env('APP_ENV') != 'production' && $code=='999999'){
Message::where('phone', $mobile)->limit(1)->orderBy('id', 'desc')->update(['confirmed'=>1]);
return false;
}
if ($mobile == '15872844805' && $code == '999999') {
return false;
}
if ($mobile == '15910393606' && $code == '999999') {
return false;
}
if ($mobile == '18171893605' && $code == '999999') {
return false;
}
if ($mobile == '15112292111' && $code == '999999') {
return false;
}
$record = Message::where(['phone'=>$mobile, 'code'=>$code])/*->orderBy('id', 'desc')*/->first();
if(empty($record)){
return '验证码有误';
}
if($record->created_at->timestamp < (time()-10*60)){
return '验证码过期';
}
if($record->confirmed){
return '验证码已使用';
}
Message::where('id', $record->id)->update(['confirmed'=>1]);
return false;
}
public function list($page_num = 15)
{
$query = new Message;
$keyword = request()->input('keyword', null);
if($keyword){
$query = $query->where(function ($qr) use($keyword) {
return $qr->where('phone', 'like', '%'.$keyword.'%')
->orWhere('code', 'like', '%'.$keyword.'%')
->orWhere('message', 'like', '%'.$keyword.'%');
});
}
$start = request()->input('start', null);
$end = request()->input('end', null);
if($start && $end){
$query = $query->whereBetween('created_at', [$start, $end]);
}
return $query->paginate($page_num);
}
}