공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현
如今,短信验证码已成为网站、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目录下 三、使用
Composer
安装 Alibaba Cloud SDK for PHP
进到刚刚创建的sms项目下执行下面的命令
composer require alibabacloud/sdk
四、使用编辑器打开项目 ,并在
config文件夹
下创建sms.php
配置文件来管理阿里短信配置信息
<?php return [ //阿里云短信API接口地址 'host' => '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
缓存配置,后面发送短信验证码会用到
<?php // +---------------------------------------------------------------------- // | 缓存设置 // +---------------------------------------------------------------------- return [ // 默认缓存驱动 'default' => 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
接口类,用来约束发送短信验证码的方法
<?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('sms.access_key_id'), config('sms.access_key_secret'))->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; } }
八、在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='AliSms') { //生成短信验证码 $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 = [ 'phone' => 'require|mobile', 'code' => 'require|number' ]; //错误信息 protected $message = [ 'phone.require' => '请输入手机号', 'phone.mobile' => '手机号格式错误', 'code.require' => '短信验证码不能为空', 'code.number' => '短信验证码必须为纯数字' ]; //验证场景 protected $scene = [ 'sendCode' => ['phone'] ]; }
十一、在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 = [ 'phone' => request()->param('phone','','trim'), ]; //参数校验 $validate = new SmsValidate(); if (!$validate->scene('sendCode')->check($data)){ return json(['code'=>0,'msg'=>$validate->getError()]); } //发送短信验证码 if (\app\common\Service\Sms::sendCode($data['phone'],6,'AliSms')){ return json(['code'=>1,'msg'=>'发送成功,请注意查收。']); }else{ return json(['code'=>0,'msg'=>'发送失败,请稍后重试!']); } } } }
十二、使用PostMan
测试发送短信验证码
不输入手机号或输入错误手机号会给相应的提示。
输入正确的手机号,提示发送短信验证成功这时我们来看看收到的验证码和缓存中的验证码是否一致
到这里我们的发送验证码已经完成
十三、这时我们需要校验验证码是否正确,在app\controller
目录下创建Login.php
<?php namespace app\controller; use app\common\validate\SmsValidate; class Login { public function index() { //接收参数 $data = [ 'phone' => 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
校验验证码是否正确
输入错误的验证码,会给出响应的提示
输入正确的验证码,提示验证成功
看到这里我相信很多小伙伴的验证码都已发送成功了。
不知道小伙伴们有没有发现文中有两处参数校验的代码相识度很高,在后续的thinkphp技术文章中我会对这个问题进行优化,感兴趣的小伙伴请关注。
위 내용은 공장 모드를 사용하여 Alibaba Cloud SMS에 대한 Thinkphp6.0 액세스 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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