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