悠悠楠杉
网站页面
使用composer安装sdk
composer require alibabacloud/sdk
新建一个控制器文件或者放到共用文件
<?php
namespace app\api\controller;
use app\BaseController;
use AlibabaCloud\Client\AlibabaCloud;
class Sms extends BaseController
{
public function index()
{
$phone = input('phone');
if(!$phone){
echo '请传入手机号';
}else if(!$this->validatePhone($phone)){
echo '手机号格式错误';
}else{
$res = $this->sendCode($phone);
if($res === true){
echo '发送验证码成功';
}else{
// echo $res;
echo '发送验证码失败';
}
}
}
/**
* 发送短信验证码
*/
protected function sendCode($phone)
{
return $this->sendSms('AccessKeyId','Secret',['phone' => '手机号','sign' => '至尊网络','code' => 'SMS_...','param' => json_encode(['code' => mt_rand(10000,99999)])]);
}
/**
* 阿里云短信服务
* @param $AccessKeyId
* @param $Secret
* @param $params
* @return bool
* @throws ClientException
*/
protected function sendSms($AccessKeyId, $Secret, $params){
if (empty($params['phone'])) {
return false;
}
// 创建客户端
AlibabaCloud::accessKeyClient($AccessKeyId, $Secret)
->regionId('cn-hangzhou')
->asDefaultClient();
try {
$query = [
'RigionId' => 'cn_hangzhou',
'PhoneNumbers' => $params['phone'],// 输入的手机号
'SignName' => $params['sign'],// 签名信息
'TemplateCode' => $params['code']// 短信模板id
];
if(!empty($param['param'])){
$query['TemplateParam'] = $params['param'];// 可选,模板变量值,json格式
}
$result = AlibabaCloud::rpc()
->product('Dysmsapi')
->version('2017-05-25')
->action('SendSms')
->host('dysmsapi.aliyuncs.com')
->options([
// 这里的参数可以在openAPI Explorer里面查看
'query' => $query
])
->request();
$arr = $result->toArray();
// print_r($arr);
if($arr['Code'] == 'OK'){
return true;
}else{
return $arr['Message'];
}
} catch (ClientException $e) {
return $e->getErrorMessage();
} catch (ServerException $e) {
return $e->getErrorMessage();
}
}
/**
* 校验手机号码
* @param $phone
* @return bool
*/
protected function validatePhone($phone){
if(!preg_match("/^(?:(?:\+|00)86)?1[3-9]\d{9}$/", $phone)){
return false;
}
return true;
}
}
短信验证码防刷机制
1、时间限制:60秒后才能再次发送
2、手机号限制:同一个手机号,24小时之内不能够超过5条
3、短信验证码限制:30分钟之内发送同一个验证码
4、前后端校验:提交Token参数校验
5、唯一性限制:微信产品,限制同一个微信ID用户的请求数量
6、产品流程限制:分步骤进行
7、图形验证码限制:图形验证通过后再请求接口图形验证码前后台交互流程比较简单
8、IP及Cookie限制:限制相同的IP/Cookie信息最大数量
9、短信预警机制,做好出问题之后的防护