TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码
/
注册
用户名
邮箱

悠悠楠杉

网站页面

ThinkPHP6使用阿里云短信服务

2022-12-16
/
0 评论
/
1,198 阅读
/
正在检测是否收录...
12/16

使用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、短信预警机制,做好出问题之后的防护

经验阿里云ThinkPHP短信接口
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/6384/(转载时请注明本文出处及文章链接)

评论 (0)