<?php namespace app\api\controller; use app\common\controller\Api; use app\common\library\Sms as Smslib; use app\common\model\User; use think\Hook; use think\Db; /** * 手机短信接口 */ class Sms extends Api { protected $noNeedLogin = '*'; protected $noNeedRight = '*'; /** * 发送验证码 * * @ApiParams (name="mobile", type="integer", required=true, description="手机号") */ public function send() { $mobile = $this->request->request("mobile"); $event = 1; if (!$mobile || !\think\Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('手机号不正确')); } $last = Smslib::get($mobile, $event); if ($last && time() - $last['createtime'] < 60) { $this->error(__('发送频繁')); } $ipSendTotal = \app\common\model\Sms::where(['ip' => $this->request->ip()])->whereTime('createtime', '-1 hours')->count(); if ($ipSendTotal >= 20) { $this->error(__('发送频繁')); } $url = "https://api.mix2.zthysms.com/v2/sendSms"; $records = []; $code = mt_rand(1000, 9999); $tKey = time(); $password = md5(md5('cxz307311') . $tKey); $date = array( 'username' => 'lingjian', //用户名 'password' => $password, //密码 'tKey' => $tKey, //tKey 'signature' => '【零件商城】', 'records' => $records, 'mobile' => $mobile, 'content' => '【零件商城】您的验证码是:"'. $code . '",请于10分钟内使用,如非本人操作,可忽略此消息。' ); $ret = $this->httpPost($url, $date); $time = time(); $ip = request()->ip(); $sms = \app\common\model\Sms::create(['event'=>$event,'mobile' => $mobile, 'code' => $code, 'ip' => $ip, 'createtime' => $time]); if ($ret) { $this->success(__('发送成功')); } else { $this->error(__('发送失败,请检查短信配置是否正确')); } } /** * 检测验证码 * @ApiParams (name="mobile", type="integer", required=true, description="手机号") * @ApiParams (name="code", type="integer", required=true, description="验证码") */ public function check() { $mobile = $this->request->request("mobile"); $code = $this->request->request("code"); if (!$mobile || !\think\Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('手机号不正确')); } $ret = Db::name('sms')->where('mobile', $mobile)->where('code', $code)->find(); $time=time(); $times=$ret['createtime']+60*10; if($time>$times){ $this->error(__('验证码已失效')); } if ($ret) { $this->success(__('成功')); } else { $this->error(__('验证码不正确')); } } }