PHP 프레임워크 ThinkPHP 공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현

공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현

Apr 29, 2020 pm 10:39 PM
thinkphp6 짧은 메시지

如今,短信验证码已成为网站、APP的基础必备应用,应用场景十分丰富,随着移动互联网的发展会越来越多。作为一名码农,对第三方短信接口也是必须掌握的。本文php中文网将介绍使用工厂模式怎么实现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目录执行下面的命令

composer create-project topthink/think sms
로그인 후 복사

本教程将安装在C盘www目录下 공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현三、使用Composer安装 Alibaba Cloud SDK for PHP

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

composer require alibabacloud/sdk
로그인 후 복사

공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현四、使用编辑器打开项目 ,并在config文件夹下创建sms.php配置文件来管理阿里短信配置信息

<?php

return [
    //阿里云短信API接口地址
    &#39;host&#39;              => &#39;dysmsapi.aliyuncs.com&#39;,

    //AccessKey ID
    &#39;access_key_id&#39;     => &#39;您的AccessKey ID&#39;,

    //Access Key Secret
    &#39;access_key_secret&#39; => &#39;您的Access Key Secret&#39;,

    //地区ID
    &#39;region_id&#39;         => &#39;cn-hangzhou&#39;,

    //模板CODE
    &#39;template_code&#39;     => &#39;您的模板CODE&#39;,

    //签名名称
    &#39;sign_name&#39;         => &#39;您的短信签名名称&#39;,
];
로그인 후 복사

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

<?php

// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------

return [
    // 默认缓存驱动
    &#39;default&#39; => env(&#39;cache.driver&#39;, &#39;redis&#39;),

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

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

<?php

namespace app\common\lib\sms;

//定义实现发送短信验证码的接口类,用来约束发送验证码的方法
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()

<?php

namespace app\common\lib\sms;

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;

class AliSms implements Sms
{

    /**
     * @desc 阿里云发送短信验证码
     * @param string $phone 手机号
     * @param int $code 验证码
     * @return mixed|void
     * @throws ClientException
     */
    public static function sendCode(string $phone, int $code)
    {
        //判断手机号和验证码是否为空
        if (empty($phone) || empty($code)){
            return false;
        }

        AlibabaCloud::accessKeyClient(config(&#39;sms.access_key_id&#39;), config(&#39;sms.access_key_secret&#39;))->regionId(config(&#39;sms.region_id&#39;))->asDefaultClient();

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

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

<?php

namespace app\common\lib;

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

<?php

namespace app\common\Service;

use app\common\lib\Code;

class Sms
{
    /**
     * @param string $phone 手机号
     * @param int $lengthCode 验证码长度
     * @param string $type 短信厂家,默认选用AliSms
     * @return mixed
     */
    public static function sendCode(string $phone,int $lengthCode,string $type=&#39;AliSms&#39;)
    {
        //生成短信验证码
        $code = Code::getCode(4);

        //使用工厂模式 调用Lib层发送短信
        $class = "app\common\lib\sms\\".$type;
        $sms = $class::sendCode($phone,$code);

        if ($sms){
            //发送成功,把短信验证码存储Redis缓存中,并给失效时间
            cache($phone,$code,300);
        }
        return $sms;
    }
}
로그인 후 복사

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

<?php

namespace app\common\validate;

use think\Validate;

class SmsValidate extends Validate
{
    //验证规则
    protected $rule = [
        &#39;phone&#39;     =>  &#39;require|mobile&#39;,
        &#39;code&#39;      =>  &#39;require|number&#39;
    ];

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

    //验证场景
    protected $scene = [
        &#39;sendCode&#39;  =>  [&#39;phone&#39;]
    ];
}
로그인 후 복사

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

<?php

namespace app\controller;

use app\common\validate\SmsValidate;

class Sms
{
    /**
     * @desc 发送短信验证码
     * @return \think\response\Json
     */
    public function code()
    {
        if (request()->isPost()){
            //获取手机号
            $data =  [
                &#39;phone&#39; =>  request()->param(&#39;phone&#39;,&#39;&#39;,&#39;trim&#39;),
            ];

            //参数校验
            $validate = new SmsValidate();
            if (!$validate->scene(&#39;sendCode&#39;)->check($data)){
                return json([&#39;code&#39;=>0,&#39;msg&#39;=>$validate->getError()]);
            }
            //发送短信验证码
            if (\app\common\Service\Sms::sendCode($data[&#39;phone&#39;],6,&#39;AliSms&#39;)){
                return json([&#39;code&#39;=>1,&#39;msg&#39;=>&#39;发送成功,请注意查收。&#39;]);
            }else{
                return json([&#39;code&#39;=>0,&#39;msg&#39;=>&#39;发送失败,请稍后重试!&#39;]);
            }

        }
    }
}
로그인 후 복사

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

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

공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현

공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현

输入正确的手机号,提示发送短信验证成功공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현这时我们来看看收到的验证码和缓存中的验证码是否一致공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현到这里我们的发送验证码已经完成

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

<?php

namespace app\controller;

use app\common\validate\SmsValidate;

class Login
{
    public function index()
    {
        //接收参数
        $data = [
            &#39;phone&#39; =>  request()->param(&#39;phone&#39;,&#39;&#39;,&#39;trim&#39;),
            &#39;code&#39;  =>  request()->param(&#39;code&#39;,&#39;&#39;,&#39;trim&#39;),
        ];
        //参数校验
        $validate = new SmsValidate();
        if (!$validate->check($data)){
            return json([&#39;code&#39;=>0,&#39;msg&#39;=>$validate->getError()]);
        }

        //从Redis中获取验证码
        $redisCode = cache($data[&#39;phone&#39;]);

        //判断验证码是否正确
        if (empty($redisCode)){
            return json([&#39;code&#39;=>0,&#39;msg&#39;=>&#39;验证码已过期,请重新发送!&#39;]);
        }
        if ($redisCode != $data[&#39;code&#39;]){
            return json([&#39;code&#39;=>0,&#39;msg&#39;=>&#39;验证码输入错误,请重新输入!&#39;]);
        }

        return &#39;验证成功&#39;;
    }
}
로그인 후 복사

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

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

공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현

输入正确的验证码,提示验证成功공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현

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

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

위 내용은 공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

iPhone에서 문자 메시지 차단을 설정하는 방법 iPhone에서 문자 메시지 차단을 설정하는 방법 Feb 24, 2024 pm 01:48 PM

스마트폰의 대중화로 인해 우리는 매일 엄청난 양의 문자 메시지를 받고 있는데, 그 중 일부는 광고, 판촉 메시지, 일부는 스팸 문자 메시지로 시간을 낭비할 뿐만 아니라 공간을 점유하고 있습니다. 우리 휴대폰의. 그러나 다행히도 iPhone은 이러한 성가신 문자 메시지를 차단하는 몇 가지 기능을 제공합니다. 이번 글에서는 iPhone을 이용하여 문자 메시지를 차단하는 방법을 소개합니다. 문자 메시지를 차단하려면 먼저 설정 앱을 연 다음 스크롤하여 메시지를 탭하세요. 정보 설정 인터페이스에서 '차단됨'을 포함한 일부 옵션을 볼 수 있습니다.

문자 메시지의 텍스트 크기를 조정하는 방법 문자 메시지의 텍스트 크기를 조정하는 방법 Aug 29, 2023 am 11:38 AM

문자 메시지의 글꼴 크기를 조정하는 방법: 1. iOS 장치에서 "설정" 애플리케이션을 연 다음 "디스플레이 및 밝기" 옵션을 선택하고 "텍스트 크기" 슬라이더를 찾아 슬라이더를 밀어 크기를 조정합니다. 2. Android 기기에서 "설정" 애플리케이션을 열고 "디스플레이" 옵션을 선택한 다음 "글꼴 크기" 옵션을 찾아 미리 보고 조정하세요. 다양한 글꼴 크기를 선택하여 문자 메시지를 보낼 수 있습니다.

iPhone에서 문자 메시지를 차단하는 방법 iPhone에서 문자 메시지를 차단하는 방법 Jul 31, 2023 pm 09:49 PM

iPhone에서 다른 사람의 문자 메시지를 차단하는 방법은 무엇입니까? 차단하려는 사람으로부터 문자 메시지를 받은 경우 iPhone에서 해당 메시지를 열어야 합니다. 메시지를 연 후 상단에 있는 아이콘을 클릭하세요. 그 아래에는 휴대폰 번호나 보낸 사람 이름이 있습니다. 이제 화면 오른쪽에 있는 메시지를 클릭하면 이 발신자를 차단할 수 있는 옵션이 있는 다른 화면이 표시됩니다. 이 버튼을 클릭하고 연락처 차단을 선택하세요. 해당 전화번호는 더 이상 문자 메시지를 보낼 수 없으며 iPhone에 전화하는 것도 차단됩니다. iPhone에서 차단된 연락처의 차단을 해제하는 방법은 무엇입니까? 차단된 사람이 나에게 메시지를 보내도록 허용하기로 결정한 경우 언제든지 iPhone에서 차단을 해제할 수 있습니다. iPhone에서 연락처 차단을 해제하려면 다음이 필요합니다.

Apple 휴대폰에서 삭제된 문자 메시지를 복구하는 방법 Apple 휴대폰에서 삭제된 문자 메시지를 복구하는 방법 Mar 08, 2024 pm 03:19 PM

Apple 휴대폰 문자 메시지에서 일부 중요한 문자 메시지가 삭제되었는데, 이를 복구하는 방법을 모르는 사용자가 많습니다. 실제로 복구 방법도 매우 간단합니다. Apple 휴대폰에서 삭제된 문자 메시지를 복구하는 방법은 무엇입니까? 답변: iCloud 복구, iTunes 복구, 타사 소프트웨어 복구 및 통신사 복구의 네 가지 방법이 있습니다. 1. 사용자가 icloud를 사용하여 휴대폰의 문자 메시지 데이터를 백업하는 경우 전화를 사용하면 icloud 데이터 복구를 직접 사용할 수 있습니다. 2. [설정] > [일반] > [복원]으로 이동한 다음 iCloud 백업에서 복원하고 가장 최근의 문자 메시지 백업을 선택하세요. 3. 사용자가 iTunes를 사용하여 휴대폰을 백업하는 경우 플레이어는 다음 작업만 수행하면 됩니다.

PHP는 SMS 인증 코드의 자동 스와이프 방지 기능을 실현합니다. PHP는 SMS 인증 코드의 자동 스와이프 방지 기능을 실현합니다. Sep 13, 2023 pm 12:01 PM

PHP는 특정 코드 예제가 필요한 SMS 확인 코드의 자동 스와이프 방지 기능을 구현합니다. 현대 인터넷 애플리케이션에서 SMS 확인 코드는 일반적인 신원 확인 방법 중 하나입니다. 그러나 악의적인 사용자의 존재로 인해 SMS 인증 코드는 자동화된 공격에 취약한 경우가 많습니다. 이는 소위 SMS 인증 코드 스와이프 방지 문제입니다. 사용자의 계정 보안과 시스템 안정성을 보호하기 위해 PHP에서 SMS 인증 코드의 자동 스와이프 방지 기능을 구현해야 합니다. 이 기사에서는 IP 주소와 시간 간격을 기반으로 하는 간단한 방법을 소개하고 구체적인 PHP 코드 예제를 제공합니다. 하나

삭제된 문자 메시지를 검색하는 방법 필수 읽기: 삭제된 문자 메시지 복구 튜토리얼 삭제된 문자 메시지를 검색하는 방법 필수 읽기: 삭제된 문자 메시지 복구 튜토리얼 Mar 25, 2024 pm 12:26 PM

많은 친구들이 휴대폰을 사용하면서 중요한 문자 메시지를 실수로 삭제했습니다. 그들은 이를 복원하고 싶지만 어떻게 해야 할지 모릅니다. 이 기사에서는 삭제된 문자 메시지에 답장하는 방법을 설명하기 위해 "클라우드 공간"을 예로 사용합니다. 먼저 휴대폰을 열고 휴대폰과 함께 제공되는 "클라우드 공간"을 찾으세요. 아래 그림과 같이 대부분의 휴대폰에는 "클라우드 서비스" 기능이 있습니다. 이 기능은 일반적으로 기본적으로 켜져 있습니다. 이 기능을 켜면 문자 메시지를 포함한 일부 중요한 데이터가 정기적으로 백업됩니다. 클라우드 서비스를 켠 후 메뉴를 내려 SMS 백업 시간을 확인하세요. 아래와 같이 백업 시간이 문자 메시지를 삭제한 시간보다 빠르면 삭제된 문자 메시지가 클라우드 공간에 업로드되어 저장되었음을 의미합니다. 이때 "백업 및 복원" 옵션을 클릭하세요.

날씨 경고 정보가 화면을 지배하게 하세요! 플래시 메시지 등 필수 알림 기술은 방재 및 감소의 최전선에서 구현됩니다. 날씨 경고 정보가 화면을 지배하게 하세요! 플래시 메시지 등 필수 알림 기술은 방재 및 감소의 최전선에서 구현됩니다. Jul 17, 2024 pm 08:28 PM

7월 16일 뉴스에 따르면, 중국 기상청 공식 공개 계정에 따르면, 주요 홍수 시즌에 접어들면서 우리나라 많은 곳에서 계속되는 폭우와 강한 대류 기후가 발생하여 홍수 예방 및 구호 상황이 복잡하고 심각해졌습니다. . 중국 기상청은 올해 초부터 재해 예방 및 감소 작업을 전개하기 위해 여러 차례 회의를 열어 조기 경보와 비상 대응 간의 연계 강화를 촉구하고 '플래시 메시지'와 같은 새로운 정보 필수 알림 적용을 적극적으로 추진했습니다. , 조기 경보 정보의 공개 적용 범위와 수신률을 지속적으로 개선하여 예방 알림의 목표를 더욱 명확하게 하고 조기 경보, 대응 및 피드백의 폐쇄 루프를 형성하여 홍수 예방 및 재해 구호 기회를 얻습니다. 1. 중국 기상청 공공 기상 서비스 센터(국가 조기 경보 정보 공개 센터)는 조기 경보의 방향성을 강화하고 "플래시 메시지" 필수 알림을 기반으로 하는 높은 수준의 조기 경보 릴리스 기술을 구축합니다.

iPhone 11에서 문자 메시지를 받지 못하는 문제를 해결하는 방법에 대한 튜토리얼 iPhone 11에서 문자 메시지를 받지 못하는 문제를 해결하는 방법에 대한 튜토리얼 Mar 23, 2024 am 08:41 AM

1. SMS 필터링 연락처가 켜져 있거나 휴대폰의 iMessage가 켜져 있지 않을 수 있습니다. 2. 비행기 모드와 방해 금지 모드가 켜져 있을 수 있습니다. 3. 해당 지역의 통신사에서 서비스가 중단되거나 휴대폰 결제가 연체될 수 있으므로 해당 통신사에 연락하여 문제를 해결하는 것이 좋습니다. 4. 휴대폰 시스템에 결함이 있을 수 있습니다. 통신사 설정 및 휴대폰 시스템을 업데이트하고 휴대폰을 다시 시작하는 것이 좋습니다. 5. 하드웨어 고장일 수 있으므로 Apple 서비스 센터에 방문하여 테스트해 보시기 바랍니다.

See all articles