使用工厂模式实现Thinkphp6.0接入阿里云短信

如今,短信验证码已成为网站、app的基础必备应用,应用场景十分丰富,随着移动互联网的发展会越来越多。作为一名码农,对第三方短信接口也是必须掌握的。本文创想鸟将介绍使用工厂模式怎么实现thinkphp6.0接入阿里云短信。

一、环境要求

    PHP版本 >= 7.1.0    开发环境必须安装有Composer    已开通阿里云短信服务,并且已获取AccessKey,创建模板和签名    最重要的,阿里云账户余额一定要有钱。

这里我就不演示开通短信服务和创建签名模板了,小伙伴们可以查看官方文档:https://help.aliyun.com/document_detail/108072.html?spm=a2c4g.11186623.6.565.1b4825903BoqGV

二、使用Composer安装Thinkphp6.0

如果您是第一次安装,请在命令行中切换到您的web目录执行下面的命令

立即学习“PHP免费学习笔记(深入)”;

composer create-project topthink/think sms

本教程将安装在C盘www目录下   aztp60.png三、使用Composer安装 Alibaba Cloud SDK for PHP

进到刚刚创建的sms项目下执行下面的命令

composer require alibabacloud/sdk

sdk.png四、使用编辑器打开项目 ,并在config文件夹下创建sms.php配置文件来管理阿里短信配置信息

 'dysmsapi.aliyuncs.com',    //AccessKey ID    'access_key_id'     => '您的AccessKey ID',    //Access Key Secret    'access_key_secret' => '您的Access Key Secret',    //地区ID    'region_id'         => 'cn-hangzhou',    //模板CODE    'template_code'     => '您的模板CODE',    //签名名称    'sign_name'         => '您的短信签名名称',];

五、顺便在config文件夹下打开cache.php添加Redis缓存配置,后面发送短信验证码会用到

 env('cache.driver', 'redis'),    // 缓存连接方式配置    'stores'  => [        'file' => [            // 驱动方式            'type'       => 'File',            // 缓存保存目录            'path'       => '',            // 缓存前缀            'prefix'     => '',            // 缓存有效期 0表示永久缓存            'expire'     => 0,            // 缓存标签前缀            'tag_prefix' => 'tag:',            // 序列化机制 例如 ['serialize', 'unserialize']            'serialize'  => [],        ],        // Redis缓存        'redis' =>  [            //服务器地址            'host'      =>  '127.0.0.1',            //redis端口            'port'      =>  6379,            //驱动方式            'type'      =>  'redis',            //缓存前缀            'prefix'    => 'sms_code_',        ]    ],];

六、在app目录下创建common/lib/sms/Sms.php接口类,用来约束发送短信验证码的方法

<?phpnamespace appcommonlibsms;//定义实现发送短信验证码的接口类,用来约束发送验证码的方法interface Sms{    /**     * @desc 发送短信验证码的方法     * @param string $phone 手机号     * @param int $code     验证码     * @return mixed     */    public static function sendCode(string $phone, int $code);}

七、在common/lib/sms目录下创建AliSms类来实现Sms接口的smsSend()

regionId(config('sms.region_id'))->asDefaultClient();        try {            $result = AlibabaCloud::rpc()                ->product('Dysmsapi')                // ->scheme('https') // https | http                ->version('2017-05-25')                ->action('SendSms')                ->method('POST')                ->host(config('sms.host'))                ->options([                    'query' => [                        'RegionId' =>config('sms.region_id'),                        'SignName' => config('sms.sign_name'),                        'PhoneNumbers'  =>  $phone,                        'TemplateCode'  =>  config('sms.template_code'),                        'TemplateParam' =>  json_encode(['code'  =>  $code]),                    ],                ])->request();        } catch (ClientException $e) {            return false;        } catch (ServerException $e) {            return false;        }        return true;    }}

八、在commonlib目录下创建生成短信验证码的类 Code.php

<?phpnamespace appcommonlib;class Code{    /**     * @desc 生成4位或6位短信验证码,默认为4位     * @param int $length 验证码长度     * @return int     */    public static function getCode(int $length = 4)    {        $code = rand(1000,9999);        if ($length == 6){            $code = rand(100000,999999);        }        return $code;    }}

九、在common目录下创建service/Sms.php

<?phpnamespace appcommonService;use appcommonlibCode;class Sms{    /**     * @param string $phone 手机号     * @param int $lengthCode 验证码长度     * @param string $type 短信厂家,默认选用AliSms     * @return mixed     */    public static function sendCode(string $phone,int $lengthCode,string $type='AliSms')    {        //生成短信验证码        $code = Code::getCode(4);        //使用工厂模式 调用Lib层发送短信        $class = "appcommonlibsms".$type;        $sms = $class::sendCode($phone,$code);        if ($sms){            //发送成功,把短信验证码存储Redis缓存中,并给失效时间            cache($phone,$code,300);        }        return $sms;    }}

十、在common目录下创建validate/SmsValidate验证器

  'require|mobile',        'code'      =>  'require|number'    ];    //错误信息    protected $message = [        'phone.require'     =>  '请输入手机号',        'phone.mobile'      =>  '手机号格式错误',        'code.require'      =>  '短信验证码不能为空',        'code.number'       =>  '短信验证码必须为纯数字'    ];    //验证场景    protected $scene = [        'sendCode'  =>  ['phone']    ];}

十一、在controller目录下创建Sms.php

isPost()){            //获取手机号            $data =  [                'phone' =>  request()->param('phone','','trim'),            ];            //参数校验            $validate = new SmsValidate();            if (!$validate->scene('sendCode')->check($data)){                return json(['code'=>0,'msg'=>$validate->getError()]);            }            //发送短信验证码            if (ppcommonServiceSms::sendCode($data['phone'],6,'AliSms')){                return json(['code'=>1,'msg'=>'发送成功,请注意查收。']);            }else{                return json(['code'=>0,'msg'=>'发送失败,请稍后重试!']);            }        }    }}

十二、使用PostMan测试发送短信验证码

不输入手机号或输入错误手机号会给相应的提示。

sjh格式错误.png

kkkkk.png

输入正确的手机号,提示发送短信验证成功sjhyzm.png这时我们来看看收到的验证码和缓存中的验证码是否一致yzmyz.png到这里我们的发送验证码已经完成

十三、这时我们需要校验验证码是否正确,在appcontroller目录下创建Login.php

  request()->param('phone','','trim'),            'code'  =>  request()->param('code','','trim'),        ];        //参数校验        $validate = new SmsValidate();        if (!$validate->check($data)){            return json(['code'=>0,'msg'=>$validate->getError()]);        }        //从Redis中获取验证码        $redisCode = cache($data['phone']);        //判断验证码是否正确        if (empty($redisCode)){            return json(['code'=>0,'msg'=>'验证码已过期,请重新发送!']);        }        if ($redisCode != $data['code']){            return json(['code'=>0,'msg'=>'验证码输入错误,请重新输入!']);        }        return '验证成功';    }}

十四、使用PostMan校验验证码是否正确

输入错误的验证码,会给出响应的提示

yzmcw.png

输入正确的验证码,提示验证成功yzmyzcg.png

看到这里我相信很多小伙伴的验证码都已发送成功了。

不知道小伙伴们有没有发现文中有两处参数校验的代码相识度很高,在后续的thinkphp技术文章中我会对这个问题进行优化,感兴趣的小伙伴请关注。

以上就是使用工厂模式实现Thinkphp6.0接入阿里云短信的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/90816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年10月30日 09:40:11
下一篇 2025年10月30日 09:43:05

相关推荐

  • 如何在iPhone上设置短信屏蔽功能

    随着智能手机的普及,我们每天都会收到大量的短信,有些是广告推销信息,有些是垃圾短信,这些短信不仅浪费了我们的时间,还占据了手机的空间。然而,幸运的是,iphone手机提供了一些功能来屏蔽这些烦人的短信。本文将介绍如何使用iphone来屏蔽短信。 要屏蔽短信,首先打开“设置”应用程序,然后滚动屏幕并点…

    2025年11月6日
    000
  • 苹果手机短信删除了如何恢复回来

    php小编香蕉为您解惑:苹果手机短信误删后,可以通过备份文件恢复。首先,连接iphone到电脑,打开itunes,选择“恢复备份”,即可将备份文件中的短信还原到手机中。此外,也可以使用icloud备份功能,登录icloud账号,选择“还原备份”来找回误删短信。记得定期备份手机数据,以免重要信息丢失。…

    2025年11月6日 手机教程
    000
  • ThinkPHP6新增‘’多应用‘’与ThinkPHP5有啥区别呢

    在thinkphp6中新增了一个叫做“多应用”的名词,这个在thinkphp5中并没有,那么这个是干啥的呢?来听创想鸟投稿作者王雪芹唠叨唠叨…… 首先看下ThinkPHP6官方手册关于多应用的目录结构: ├─app 应用目录│ ├─index 主应用│ │ ├─controller 控制器目录│ │…

    2025年11月6日
    000
  • ThinkPHP6怎么通过Ucenter实现注册登录

    下面由thinkphp教程栏目给大家介绍thinkphp6通过ucenter实现注册登录的方法,希望对需要的朋友有所帮助! ThinkPHP6通过Ucenter实现注册登录 在和ucenter通信成功后,实现注册登录就非常简单了。简要记录如下。 1 新建一个controller用来继承Ucenter…

    2025年11月5日
    000
  • thinkphp6如何配置环境变量

    下面由thinkphp教程栏目给大家介绍thinkphp6配置环境变量的方法,希望对需要的朋友有所帮助! 一、常规配置 config文件夹是tp6的常规配置文件,在config文件夹下我们可以修改里面的配置,也可以自定义配置文件。但是在我们不熟悉的时候不要去修改这些配置文件的名字以及里面的内容,容易…

    2025年11月5日 PHP框架
    000
  • 详解ThinkPHP6结合GuzzleHTTP发送HTTP请求

    下面由thinkphp教程栏目给大家介绍thinkphp6 结合guzzlehttp发送http请求,希望对需要的朋友有所帮助! ThinkPHP6 结合GuzzleHTTP发送HTTP请求 背景 thinkphp微信公众号程序主动调用微信的接口需要用到access_token,以及需要主动发送请求…

    2025年11月5日
    100
  • 浅析thinkphp6中怎么使用workerman【教程分享】

    thinkphp6中怎么使用workerman?下面本篇文章给大家介绍一下thinkphp6整合workerman的教程,希望对大家有所帮助。 thinkphp6整合workerman教程 thinkphp6安装workerman命令: composer require topthink/think…

    2025年11月5日 PHP框架
    000
  • 安装thinkphp6的流程

    框架是我们进行开发所必不可少的,所以我们需要了解如何安装thinkphp6(又叫tp6)框架,本篇文章将教大家如何去安装tp6框架,有需要的小伙伴可以看看。 我们没有办法在官网直接下载tp6框架,只能通过composer来下载。首先我们要进入ThinkPHP6.0完全开发手册,可以在基础那里看到安装…

    2025年11月3日 PHP框架
    100
  • thinkphp6不能用redirect重定向是什么情况?

    下面thinkphp框架教程栏目将给大家讲介绍关于thinkphp6不能用redirect重定向的问题,希望对需要的朋友有所帮助! TP6在__construct和_initialize中无法使用redirect重定向? 说明 目前版本 return redirect(‘index/in…

    2025年11月3日 PHP框架
    000
  • 华为 Pura 70 系列首发支持中国移动北斗卫星短信功能

    8 月 23 日,华为官方正式宣布,华为 pura 70 系列首发支持中国移动北斗卫星短信功能,即使处于深山、高原等地面网络信号无法覆盖的区域,也能发送和接收信息,为出行保驾护航。用户可发送 “ktbd” 到 10086,开通中国移动北斗卫星短信业务体验,此功能仅限中国大陆地…

    2025年10月31日
    000
  • thinkphp6上线了吗

    tinkphp6目前已经上线, 下载源码狠戳这里: http://www.php.cn/xiazai/code/5685 1. ThinkPHP大事记 2017年4月27日,ThinkPHP5.1-beta.1发布 2017年12月31日, ThinkPHP5.1.0发布,标志着快速进入迭代期 20…

    2025年10月30日 PHP框架
    000
  • thinkphp6 任意文件创建漏洞复现

    01 背景  近日奇安信发布了 ThinkPHP 6.0 “任意”文件创建漏洞安全风险通告,对此,DYSRC第一时间对该漏洞进行了分析,并成功复现该漏洞。 漏洞影响范围:top-think/framework 6.x < 6.0.2 02 定位问题 根据任意文件创建以及结合近期的commit历…

    2025年10月30日 PHP框架
    000
  • ThinkPHP6 任意文件操作漏洞分析

    漏洞介绍 2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。 具体受影响版本为ThinkPHP6.0.0-6.…

    2025年10月30日 PHP框架
    000
  • ThinkPHP6 Workerman 基本使用

    workerman Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。…

    PHP框架 2025年10月30日
    000
  • Thinkphp6 + layui 实现后台登录(验证码刷新)

    一、登录所用到组件 1、视图模板:安装:composer require topthink/think-view 2、验证码:安装:composer require topthink/think-captcha 3、session:需要开启session:打开app下的middeware.php文件…

    2025年10月30日 PHP框架
    000
  • thinkphp6中5种方法获取api请求地址中的参数

    下面由thinkphp框架教程栏目给大家介绍thinkphp6中获取api请求地址中的参数的5种方法,希望对需要的朋友有所帮助! 第一种方法 tp6跟tp5不同的地方,在于tp6继承Baseconroller这个控制器,所以,我们可以直接使用Baseconroller里面的request方法。 pu…

    2025年10月30日 PHP框架
    000
  • windows10如何运行thinkphp6+swoole

    下面由thinkphp框架教程栏目给大家介绍windows10运行thinkphp6+swoole的方法,希望对需要的朋友有所帮助! 前提:windows10安装了docker 大纲如下 windows10安装docker 下载swoole的docker镜像 配置docker运行命令 配置think…

    2025年10月30日 PHP框架
    000
  • 关于thinkphp6.0.2实现对数据库操作

    下面由thinkphp框架教程栏目给大家介绍thinkphp6.0.2实现对数据库操作的方法,希望对需要的朋友有所帮助! 因为版本更新导致有些没入门的同学学习thinkphp6出现问题,在这里保留我学习的一点经验! 这是app/contrlar/目录下新建的文件DbTest :age  LIMIT …

    2025年10月30日
    000
  • Thinkphp6如何利用ZipArchive打包下载文件

                                                            下面由thinkphp框架教程栏目给大家介绍Thinkphp6利用ZipArchive打包下载文件的方法,希望对需要的朋友有所帮助! 基础环境系统环境:Windows10 x64PHP集成…

    PHP框架 2025年10月30日
    000
  • 关于ThinkPHP6多例Redis类实现

    下面由thinkphp教程栏目给大家介绍thinkphp6多例redis类实现,希望对需要的朋友有所帮助! 在Thinkphp项目中封装一个Redis多库单例操作类 1.操作前的准备 如果没有安装phpredis模块那么先执行 composer require predis/predis 2.配置R…

    2025年10月30日
    000

发表回复

登录后才能评论
关注微信