至尊技术网 - 短信接口 https://www.zzwws.cn/tag/%E7%9F%AD%E4%BF%A1%E6%8E%A5%E5%8F%A3/ ThinkPHP6使用阿里云短信服务 https://www.zzwws.cn/archives/6384/ 2022-12-16T15:49:00+08:00 使用composer安装sdkcomposer 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、短信预警机制,做好出问题之后的防护