123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- namespace app\common\model\base\msg;
- use app\common\model\Common;
- use app\common\model\base\user\User;
- use think\facade\Db;
- class Sms extends Common
- {
- protected $name = "system_sms";
- protected $pk = 'id';
- protected $deleteTime = null;
- protected $autoWriteTimestamp = 'int';
- protected $createTime = 'createtime';
- // protected $updateTime = 'createtime';
- //发送短信验证码
- static public function send($mobile)
- {
- if(11!=strlen($mobile)){
- return Result(1,"请输入正确的手机号");
- }
- $user = User::where('phone',$mobile)->find();
- if(empty($user)){
- return Result(1,"未找到此用户");
- }
- $code = self::createcode();
- $info = self::where('mobile',$mobile)->find();
- self::startTrans();
- try{
- if(!empty($info)){
- $s = strtotime($info->createtime) + 30 - time();//0.5分钟内不能重复发送
- if($s>0){
- return Result(0,"请".$s."秒后再尝试发送验证码");
- }
- $info->code = $code;
- $info->timeout = time() + 600;
- $info->createtime = date('Y-m-d H:i:s');
- $res = $info->save();
- }else{
- $data = [
- 'mobile' => $mobile,
- 'code' => $code,
- 'timeout' => time() + 600,
- 'createtime'=> date('Y-m-d H:i:s')
- ];
- (new self)->replace()->save($data);
- }
- $provider = sysconfig('sms.provider');
- // 腾讯短信
- if(1==$provider){
- $sms = new \tencent\Sms;
- $res = $sms->SendSms($mobile,[$code],771289);//腾讯短信验证码模板
- if(isset($res['errmsg']) && $res['errmsg']=='OK'){
- self::commit();
- return Result(1,"发送成功");
- }else{
- self::rollback();
- return Result(0,"发送失败");
- }
- }
- // 联通短信
- elseif(2==$provider){
- $sms = new \ums\Sms;
- $content = "您的帐号正在进行找回密码操作,本次操作验证码为$code,请在10分钟内使用,如非本人操作,请忽略.";
- $res = $sms->SendSms($mobile,$content,'2431012229821');//联通短信验证码模板
- if(0==$res['result']){
- self::commit();
- WLog('Sms',json_encode($res,JSON_UNESCAPED_UNICODE));
- return Result(1,"短信发送成功",$res);
- }else{
- self::rollback();
- return Result(0,$res['description'],$res);
- }
- }
-
- }catch(\Exception $e){
- self::rollback();
- return Result(0,$e->getMessage());
- }
-
-
- }
- //检查验证码是否正确
- static public function check($mobile,$code)
- {
- $where = [];
- $where[] = ['mobile','=',$mobile];
- $where[] = ['code','=',$code];
- $where[] = ['timeout','>=',time()];
- $info = self::where($where)->find();
- //验证码仅使用一次,使用过后就删除
- if($info){
- $info->delete();
- }
- return !empty($info);
- }
- //生成短信验证码
- static public function createcode()
- {
- return mt_rand(1000,9999);
- }
- }
|