tp5.1使用【极光】+【redis】发送短信验证码
1.在项目中的 composer.json 文件中添加 JSMS 依赖:
"require": {"jiguang/jsms": "~1.0"
}
2. 执行composer update
composer update
3.在app.php中配置全局变量,极光的一些参数
4.封装发送短信函数
<?php/*发送短信*/
namespace app\common\facade;
use JiGuang\JSMS;
use think\facade\Config;
class SendMs
{public static function sendmsg($phone, $content){$s=Config::get();$app_key = $s['app']['jiguang']['app_key'];$master_secret = $s['app']['jiguang']['master_secret'];$sign_id= $s['app']['jiguang']['sign_id']; $client = new JSMS($app_key, $master_secret, [ 'disable_ssl' => true ]);$temp_id = '1';$temp_para = ['code' => $content];//单条短信发送//参数说明://$phone: 接收验证码的手机号码//$temp_id: 模板 ID,这个是需要去极光平台自己创建模板的//$temp_para: 模板参数,需要替换的参数名和 value 的键值对,仅接受数组类型的值//$time: 定时短信发送时间,格式为 yyyy-MM-dd HH:mm:ss,默认为 null 表示立即发送//$sign_id: 签名ID,null 表示使用应用默认签名$res = $client->sendMessage($mobile=$phone, $temp_id, $temp_para, $time = null,$sign_id);// 判断请求是否发送失败if(empty($res['body']['error'])) {// 短信接口调用成功return true;} else {// 短信接口调用失败return $res['body']['error']['message'];}}
}
5.封装发送验证码和验证的函数
<?phpnamespace app\common\controller;
use app\common\controller\Base;
use app\common\facade\SendMs;
use app\common\model\AppSendMs;
use think\facade\Cache;class SendCode extends Base
{public function send($phone,$type){/*不同的类型使用不同的方法*/$type_time=$type.'_time_';$type_code=$type.'_code_';$param['phone']=$phone;$validate = $this->validate($param, ['phone'=>'require|regex:1[3-9]\d{9}']);if($validate !== true) {$res = ['code' => 400,'msg' => '手机号格式不正确'];return $res;}// 获取上一次发送验证码的时间$last_time = Cache::store('redis')->get($type_time . $phone);// 判断当前发送验证码的时间减去上一次发送验证码的时间,是否小于 5if((time() - $last_time) <60) {$res = ['code' => 400,'msg' => '发送频繁,稍后再试'];return $res;}// 发送验证码 (生成验证码、生成短信内容、发送短信)$code = mt_rand(1000, 9999);$result = SendMs::sendmsg($phone, $code); // 为了不减少第三方短信接口的发送次数,这里暂时屏蔽,开发完毕后自行打开// 将结果存到数据库中,不管是否成功AppSendMs::create(['phone'=>$phone,'result'=>$result,'code'=>$code,'type'=>$type]);if($result === true) {// 将验证码存储到缓存,用于后续的验证Cache::store('redis')->set($type_code . $phone, $code, 300);// 将当前发送验证码的时间存到缓存,用于防止用户频繁发送验证码Cache::store('redis')->set($type_time . $phone, time(), 300);// 返回成功结果$res = ['code' => 200,'msg' => '短信发送成功'];return $res;} else {// 返回失败结果$res = ['code' => 400,'msg' => $result];return $res;}}public function check($phone,$type,$code){// 验证码校验$type_code=$type.'_code_';$s = Cache::store('redis')->get($type_code .$phone);if($code != $s) {return ['code' => 204 , 'msg' => '验证码错误'];}// 验证码校验成功一次后,将当前缓存中对应手机号的验证码删除Cache::store('redis')->set($type_code .$phone, null);return ['code' => 20000 , 'msg' => '成功'];}
}
6.调用函数发送验证码
$SendCode=new SendCode();$s=$SendCode->send($phone,'register');
7.验证验证码的准确性
// 验证码校验$SendCode=new SendCode();$s=$SendCode->check($phone,'register',$code);if ($s['code']!=20000){return $s;}
tp5.1使用【极光】+【redis】发送短信验证码相关推荐
- java redis 发送短信验证码
public class Randomutil { private Randomutil() { } // 获取6位随机验证码 public static String getRandom() { S ...
- Java Redis发送短信验证码
package com.redis.demo;import redis.clients.jedis.Jedis;import java.util.Random;public class PhoneCo ...
- TP5 封装多业务的发送短信功能(包括国际短信)
1.准备工作 1.1.准备依赖包 这个网站提供的都是PHP包,挺有用的 https://packagist.org/ 另外还可以在GitHub上面下载 https://github.com/ 1.短信 ...
- 使用极光推送发送短信验证码
发送短信验证码 1.获取AppKey和Master Secret 2.设置短信模板和短信签名 3.开始服务端接口的实现 1.获取AppKey和Master Secret 首先应有一个极光推送官网的账号 ...
- 手机异步发送短信验证码解决方案-Celery+redis
Celery介绍和使用 一.Celery介绍: 一个简单.灵活且可靠.处理大量消息的分布式系统,可以在一台或者多台机器上运行. Celery是一个功能完备即插即用的任务队列 单个 Celery 进程每 ...
- springboot整合redis实现发送短信验证码
我用的短信平台是阿里云的,需要付费购买服务,购买地址:https://common-buy.aliyun.com/?spm=5176.8195934.907839.sms6.312c4183mzE9Y ...
- Redis存放短信验证码 RedisTemplate =>opsForValue
@Autowired private RedisTemplate redisTemplate; redisTemplate.opsForValue() redisTemplate.opsForHash ...
- 使用activeMQ发送短信验证码
package cn.itcast.bos.web.action; /*** 1.获取用户电话号码,生成4位数的验证(随机数),保存到session中,用吉信通发送验证码给客户* 2.客户点击注册,获 ...
- 容联云发送短信验证码
setting配置 # 配置jwt的全局认证 REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES':['rest_framework_jwt.authe ...
- flask容联云发送短信验证码和异步发送
容联云地址:https://www.yuntongxun.com/ 获取短信验证码流程图 容联云配置 在容联云官网注册一个账号,发送短信验证码必须使用三个ID ACCOUNT SID (主账户ID ...
最新文章
- python3+ 解决写入中文乱码的问题
- Maven教程(3)--Maven导入工程常见问题(编码、MavenArchiver、Lifecycle Mapping、maven install 没有反应)...
- K8S-网络模型、POD/RC/SVC YAML 语法官方文档
- 工信部 以智能制造为切入点推进互联网+
- Python Demo 05--四大名著词云
- JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore XXX “迁移到行业标准格式?
- 深入以太坊智能合约ABI
- LINUX mysql 源码安装
- linux版本信息i686,Linux下如何查看版本信息
- 三星oneui主屏幕费电_这或许是单手握持手感最佳的手机 三星Galaxy S20上手体验...
- python中print输出格式_Python print格式化输出
- 华为交换机VTY用户界面属性配置教程
- github安卓版下载_Pandownload安卓版+IDM神器,手机还有下载不了的资源吗?
- P2 邹博机器学习logistic回归
- C语言——快速取以2为底x的对数
- [生存志] 第108节 李斯划分三十六郡
- python3爬虫实战一: 爬取豆瓣最新上映电影及画出词云分布
- ie不能加载flash html,IE11无法显示flash?IE11无法播放视频的解决方法
- 倒排索引(Inverted index)
- 解决Failed to load module canberra-gtk-module错误