love_php/app/Repositories/Eloquent/SmsRepository.php
2026-04-02 09:20:51 +08:00

198 lines
4.9 KiB
PHP
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
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);
}
}