代码初始化
This commit is contained in:
99
application/api/controller/Sms.php
Normal file
99
application/api/controller/Sms.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\controller;
|
||||
|
||||
use app\common\controller\Api;
|
||||
use app\common\model\User;
|
||||
use think\Db;
|
||||
use think\Env;
|
||||
|
||||
/**
|
||||
* 手机短信接口
|
||||
*/
|
||||
class Sms extends Api
|
||||
{
|
||||
protected $noNeedLogin = '*';
|
||||
protected $noNeedRight = '*';
|
||||
|
||||
/**
|
||||
* 发送验证码
|
||||
*
|
||||
* @ApiMethod (POST)
|
||||
* @ApiParams (name="mobile", type="string", required=true, description="手机号")
|
||||
* @ApiParams (name="event", type="string", required=true, description="事件名称")
|
||||
*/
|
||||
public function send()
|
||||
{
|
||||
$mobile = $this->request->post("mobile");
|
||||
$event = $this->request->post("event" , 'default');
|
||||
|
||||
if (!checkMobile($mobile)) {
|
||||
return V(0, '手机号不正确');
|
||||
}
|
||||
//频率控制
|
||||
$last = db::name('sms')->where(['mobile' => $mobile, 'event' => $event])->order('id', 'DESC')->find();
|
||||
if ($last && time() - $last['createtime'] < 60) {
|
||||
return V(0, '发送频繁');
|
||||
}
|
||||
$ipSendTotal = db::name('sms')->where(['ip' => $this->request->ip()])->whereTime('createtime', '-1 hours')->count();
|
||||
if ($ipSendTotal >= 7) {
|
||||
return V(0, '发送频繁');
|
||||
}
|
||||
//发送短信
|
||||
$ret = $this->send_smsbao_msg($mobile, $event);
|
||||
if ($ret['code'] == 1) {
|
||||
return V($ret['code'], $ret['msg'],$ret['data']);
|
||||
} else {
|
||||
return V(0, '系统错误,请检查短信配置!');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测验证码
|
||||
*
|
||||
* @ApiMethod (POST)
|
||||
* @ApiParams (name="mobile", type="string", required=true, description="手机号")
|
||||
* @ApiParams (name="event", type="string", required=true, description="事件名称")
|
||||
* @ApiParams (name="captcha", type="string", required=true, description="验证码")
|
||||
*/
|
||||
public function check($mobile, $code, $event = 'default')
|
||||
{
|
||||
if (!checkMobile($mobile)) {
|
||||
return V(0, '手机号不正确');
|
||||
}
|
||||
$is_code = db::name('sms')->where(['mobile' => $mobile, 'event' => $event])->find();
|
||||
if ($is_code && $is_code['code'] == $code) {
|
||||
//验证码正确
|
||||
db::name('sms')->where(['mobile' => $mobile, 'event' => $event])->delete();
|
||||
return V(1, '验证码正确');
|
||||
} else {
|
||||
return V(0, '验证码错误');
|
||||
}
|
||||
}
|
||||
|
||||
private function send_smsbao_msg($mobile,$event = 'default'){
|
||||
$dxb_temp = Env::get('smsbao.dxb_temp');
|
||||
$dxb_name = Env::get('smsbao.dxb_name');
|
||||
$dxb_pwd = Env::get('smsbao.dxb_pwd');
|
||||
$sms_code = generateRandoms();
|
||||
//随机生成4位数
|
||||
$content = str_replace('{code}',$sms_code,$dxb_temp);//要发送的短信内容
|
||||
//短信宝
|
||||
$url = "https://api.smsbao.com/sms?u=".$dxb_name."&p=".md5($dxb_pwd)."&m=".$mobile."&c=".urlencode($content);
|
||||
$result = myCurl($url);
|
||||
$result_arr = json_decode($result, true);
|
||||
if ($result_arr == 0) {
|
||||
db::name('sms')->insert([
|
||||
'event' => $event,
|
||||
'mobile' => $mobile,
|
||||
'code' => $sms_code,
|
||||
'ip' => $this->request->ip(),
|
||||
'createtime' => time(),
|
||||
]);
|
||||
return ['code' => 1, 'msg' => '发送成功', 'data' => null];
|
||||
} else {
|
||||
return ['code' => 0, 'msg' => '发送失败', 'data' => null];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user