request->userIP; $ipCount = (int)Yii::$app->redis->get('code.sendIp.' . $userIp); if ($ipCount > 6) throw new Exception("请等待60秒后再发送验证码"); //获取上次发送验证的时间 $lastSendTime = Yii::$app->redis->get('code.sendTime.' . $phone); //检查再次发送间隔 if ($lastSendTime && time() < ($lastSendTime + 60)) throw new Exception("请等待60秒后再发送验证码"); $code = CommUtil::getRandomNum(4); //此处需要替换成自己的AK信息 $accessKeyId = Yii::$app->params['sms_accessId']; $accessKeySecret = Yii::$app->params['sms_accessKey']; //短信API产品名 $product = "Dysmsapi"; //短信API产品域名 $domain = "dysmsapi.aliyuncs.com"; //暂时不支持多Region $region = "cn-shanghai"; //初始化访问的acsCleint $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", $product, $domain); $acsClient = new DefaultAcsClient($profile); $request = new SendSmsRequest(); //必填-短信接收号码 $request->setPhoneNumbers($phone); //必填-短信签名 $request->setSignName(Yii::$app->params['sms_signName']); //必填-短信模板Code $request->setTemplateCode($templateCode); //选填-假如模板中存在变量需要替换则为必填(JSON格式) $data['code'] = $code; $dataJson = json_encode($data); $request->setTemplateParam($dataJson); //选填-发送短信流水号 // $request->setOutId("1234"); //发起访问请求 $acsResponse = $acsClient->getAcsResponse($request); if ($acsResponse->Code != 'OK') throw new Exception($acsResponse->Message); $ipCount++; //缓存数据 Yii::$app->redis->set('code.sendTime.' . $phone, time(), 6000); Yii::$app->redis->set('code.sendCode.' . $phone, $code, 6000); Yii::$app->redis->set('code.sendIp.' . $userIp, $ipCount, 3600*24); return true; } /** *验证验证码 * @param $phone * @return bool */ public static function validateCode($phone, $code) { if (!$code) return false; $cacheCode = Yii::$app->redis->get('code.sendCode.' . $phone); if (!empty($cacheCode) && $cacheCode == $code) return true; return false; } public static function cleanCode($phone) { Yii::$app->redis->del('code.sendTime.' . $phone); Yii::$app->redis->del('code.sendCode.' . $phone); } }