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】发送短信验证码相关推荐

  1. java redis 发送短信验证码

    public class Randomutil { private Randomutil() { } // 获取6位随机验证码 public static String getRandom() { S ...

  2. Java Redis发送短信验证码

    package com.redis.demo;import redis.clients.jedis.Jedis;import java.util.Random;public class PhoneCo ...

  3. TP5 封装多业务的发送短信功能(包括国际短信)

    1.准备工作 1.1.准备依赖包 这个网站提供的都是PHP包,挺有用的 https://packagist.org/ 另外还可以在GitHub上面下载 https://github.com/ 1.短信 ...

  4. 使用极光推送发送短信验证码

    发送短信验证码 1.获取AppKey和Master Secret 2.设置短信模板和短信签名 3.开始服务端接口的实现 1.获取AppKey和Master Secret 首先应有一个极光推送官网的账号 ...

  5. 手机异步发送短信验证码解决方案-Celery+redis

    Celery介绍和使用 一.Celery介绍: 一个简单.灵活且可靠.处理大量消息的分布式系统,可以在一台或者多台机器上运行. Celery是一个功能完备即插即用的任务队列 单个 Celery 进程每 ...

  6. springboot整合redis实现发送短信验证码

    我用的短信平台是阿里云的,需要付费购买服务,购买地址:https://common-buy.aliyun.com/?spm=5176.8195934.907839.sms6.312c4183mzE9Y ...

  7. Redis存放短信验证码 RedisTemplate =>opsForValue

    @Autowired private RedisTemplate redisTemplate; redisTemplate.opsForValue() redisTemplate.opsForHash ...

  8. 使用activeMQ发送短信验证码

    package cn.itcast.bos.web.action; /*** 1.获取用户电话号码,生成4位数的验证(随机数),保存到session中,用吉信通发送验证码给客户* 2.客户点击注册,获 ...

  9. 容联云发送短信验证码

    setting配置 # 配置jwt的全局认证 REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES':['rest_framework_jwt.authe ...

  10. flask容联云发送短信验证码和异步发送

    容联云地址:https://www.yuntongxun.com/ 获取短信验证码流程图 容联云配置 在容联云官网注册一个账号,发送短信验证码必须使用三个ID ACCOUNT SID   (主账户ID ...

最新文章

  1. python3+ 解决写入中文乱码的问题
  2. Maven教程(3)--Maven导入工程常见问题(编码、MavenArchiver、Lifecycle Mapping、maven install 没有反应)...
  3. K8S-网络模型、POD/RC/SVC YAML 语法官方文档
  4. 工信部 以智能制造为切入点推进互联网+
  5. Python Demo 05--四大名著词云
  6. JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore XXX “迁移到行业标准格式?
  7. 深入以太坊智能合约ABI
  8. LINUX mysql 源码安装
  9. linux版本信息i686,Linux下如何查看版本信息
  10. 三星oneui主屏幕费电_这或许是单手握持手感最佳的手机 三星Galaxy S20上手体验...
  11. python中print输出格式_Python print格式化输出
  12. 华为交换机VTY用户界面属性配置教程
  13. github安卓版下载_Pandownload安卓版+IDM神器,手机还有下载不了的资源吗?
  14. P2 邹博机器学习logistic回归
  15. C语言——快速取以2为底x的对数
  16. [生存志] 第108节 李斯划分三十六郡
  17. python3爬虫实战一: 爬取豆瓣最新上映电影及画出词云分布
  18. ie不能加载flash html,IE11无法显示flash?IE11无法播放视频的解决方法
  19. 倒排索引(Inverted index)
  20. 解决Failed to load module canberra-gtk-module错误

热门文章

  1. 【网络通信 -- 直播】SRS 实战记录 -- SRS 部署与直播效果测试
  2. BugKuCTF-杂项-论剑
  3. 机器学习算法——利用AdaBoost元算法提高分类性能(基于单层决策树构建的弱分类器)
  4. MySQL密码不要用0开头!!!
  5. MATLAB 制作抖音同款炫光海报
  6. linux中vim的保存退出命令
  7. java怎么读取excel思路_java读取本地excel数据
  8. 回归前端学习第19天——CSS一些简易小动画
  9. 清理小树PDF及布丁压缩和桌面
  10. Linux下Oracle中文数据显示为倒着的问号?(已解决)