>[danger] 阿里云短信服务扩展封装类
```
composer require flc/dysms
```
```php
<?php
// 本文件放入TP6.0的extend目录下 extend/Dysms.php
use Flc\Dysms\Client;
use Flc\Dysms\Request\SendSms;
// // 使用示例,返回数组
// Dysms::setConfig([
// 'signName' => 'it社区',
// 'templateCode' => 'SMS_1792xxxxx',
// 'accessKeyId' => 'LTAI4GJ6iaE7ij5YiGxxxxx',
// 'accessKeySecret' => 'uljdxDoi8ocXNscPriqwl5xxxxx',
// ]);
// // $arr['result'] true 发送成功
// // $arr['result'] false 发送失败 msg 错误信息
// $arr = Dysms::sendSms(150378xxxx);
/**
* 阿里大于短信验证码封装
* composer require flc/dysms
*
* @author liang <23426945@qq.com>
* @version 1.0.1
* @datetime 2020-07-20
* @homepage www.itqaq.com
*
* 阿里云短信服务默认流控
* 同一个签名同一个手机号短信验证码 1条/分钟
*/
class Dysms
{
private static $obj;
private static $config;
private static $signName;
private static $templateCode;
/**
* 私有化构造方法
* 禁止类在外部被实例化
*/
private function __construct(){}
/**
* 设定配置参数
*/
public static function setConfig($config)
{
// accessKey、accesssecret
self::$config = [
'accessKeyId' => $config['accessKeyId'],
'accessKeySecret' => $config['accessKeySecret'],
];
// 短信签名
self::$signName = $config['signName'];
// 短信模板ID
self::$templateCode = $config['templateCode'];
}
/**
* 传入手机号发送短信验证码
* @param int $phoneNumbers 手机号
* @return array ['result' => true, 'msg' => '发送成功', 'verCode' => 370449]
*/
public static function sendSms($phoneNumbers)
{
$client = new Client(self::$config);
$sendSms = new SendSms;
$verCode = mt_rand(100000, 999999);
$sendSms->setPhoneNumbers($phoneNumbers);
$sendSms->setSignName(self::$signName);
$sendSms->setTemplateCode(self::$templateCode);
$sendSms->setTemplateParam(['code' => $verCode]);
$sendSms->setOutId('demo');
// 返回标准类对象 发送失败
// object(stdClass)#59 (3) {
// ["Message"]=>
// string(30) "触发小时级流控Permits:5"
// ["RequestId"]=>
// string(36) "B76061EE-2D9A-4E46-89B9-2418E8A5555E"
// ["Code"]=>
// string(26) "isv.BUSINESS_LIMIT_CONTROL"
// }
$result = $client->execute($sendSms);
// 返回结果
// array(2) {
// ["result"]=>
// bool(true)
// ["msg"]=>
// string(12) "发送成功"
// }
// array(3) {
// ["result"]=>
// bool(false)
// ["code"]=>
// string(26) "isv.BUSINESS_LIMIT_CONTROL"
// ["msg"]=>
// string(30) "触发小时级流控Permits:5"
// }
if ($result->Code === 'OK') {
return ['result' => true, 'msg' => '发送成功', 'verCode' => $verCode];
} else {
return ['result' => false, 'code' => $result->Code, 'msg' => self::errorMsg($result->Code, $result->Message)];
}
}
/**
* 错误信息code转换中文提示
*/
private static function errorMsg($code, $msg)
{
$errorMsg = [
'isv.ACCOUNT_NOT_EXISTS' => '使用了错误的账户名称或AK',
'isv.ACCOUNT_ABNORMAL' => '账户异常,请确认账号信息',
'isv.MOBILE_NUMBER_ILLEGAL' => '手机号码格式错误',
'isv.SMS_TEMPLATE_ILLEGAL' => '短信模板不存在,或未经审核通过',
'isv.SMS_SIGNATURE_ILLEGAL' => '短信签名不存在,或未经审核通过',
'isv.BUSINESS_LIMIT_CONTROL' => '短信发送频率超限',
'isv.AMOUNT_NOT_ENOUGH' => '当前账户余额不足,请及时充值',
'SignatureDoesNotMatch' => '签名加密错误,请注意accessKeyId和accessKeySecret字符串赋值正确',
];
return $errorMsg[$code] ?? $msg;
}
/**
* 私有化克隆方法
* 禁止类的实例在外部被克隆
*/
private function __clone(){}
}
```
- 序言
- 术语
- 安装
- 创建项目
- nginx伪静态
- 阿里云镜像
- composer.phar
- 测试运行 ThinkPHP6.0
- PhpStudy-v8.1 运行TP6.0
- 开启伪静态
- PhpStudy2018 运行 TP6.0
- 配置虚拟域名
- 基础
- 单应用模式
- 多应用模式
- 公共函数
- 多应用模式扩展
- 扩展类库
- 介绍
- 使用
- Math.php
- Layui.php
- 自己封装的类
- 文件上传
- 配置
- database.php
- filesystem.php
- view.php
- route.php
- 配置目录
- 自定义配置文件
- 路由
- 路由简介
- 注册路由
- 路由别名
- 多应用路由
- 域名绑定路由
- 中间件
- 中间件简介
- 中间件文件
- 中间件定义
- 中间件别名
- 全局中间件
- 应用中间件
- 路由中间件
- 控制器中间件
- 控制器
- 基础控制器
- 初始化方法
- 注入的对象
- 数据验证功能
- 创建控制器
- 控制器命名
- 控制器目录
- 控制器定义
- 控制器后缀
- 多级控制器
- 渲染输出
- 基础控制器登陆验证
- 请求
- 请求对象
- 请求信息
- 请求类型
- 数据库
- 连接数据库
- 指定数据表
- 查询
- find
- select
- 更新
- save
- update
- 链式操作
- field
- join
- where
- whereIn
- 字符串条件
- 查询表达式
- fetchSql
- 聚合查询
- count
- 分页查询
- 分页参数
- 分页样式
- 分页样式代码
- 自定义分页驱动
- 默认分页代码
- 时间查询
- 事务操作
- 数据集
- 模型
- 模型定义
- 添加
- 简介
- save
- create
- 删除
- 简介
- delete
- destroy
- 软删除
- 修改
- 静态方法直接更新
- 查询
- find
- select
- 获取器
- 应用场景
- 获取器定义
- 触发获取器
- 追加获取器
- 获取原始数据
- getData
- 应用示例
- 修改器
- 触发修改器
- 搜索器
- 搜索器定义
- 调用搜索器
- 使用示例
- 功能函数
- 只读字段
- 只读字段简介
- 模型关联
- 一对一关联
- 数据表
- 基础使用
- 关联查询
- hasOne
- hasWhere
- belongsTo
- 关联保存更新
- 预载入查询
- with
- withJoin
- 绑定属性到父模型
- bind
- 属性别名
- bindAttr
- 应用示例
- 一对多关联
- 基础使用
- 关联定义
- 关联查询
- 基本查询
- 关联条件查询
- 远程一对多关联
- 简介
- 数据表
- hasManyThrough
- 关联预载入
- 简介
- 数据表
- 关联统计
- withCount
- 关联输出
- hidden
- visible
- append
- 关联删除
- 根据关联条件查询
- 自动时间戳
- 配置
- 触发
- 写入格式
- 自定义字段
- 模型输出
- 模板输出
- 数组转换
- 模型事件
- 模型属性
- 关联保存
- 视图
- 视图扩展
- 模板赋值
- 视图过滤
- 视图目录
- 模板渲染
- 条件判断标签
- 模板输出使用函数
- 调试
- 调试模式
- 变量调试
- 关闭 trace 调试
- 验证
- 生成验证器类
- 验证器类成员
- 验证规则
- 错误信息
- 验证场景
- 应用示例
- 内置验证规则
- require
- file
- 格式验证类
- 长度区间类
- 字段比较类
- 其他验证类
- 执行数据验证
- 杂项
- Session
- 默认状态
- 开启Session
- Session初始化
- Session基础用法
- Cookie
- 基本使用
- 文件上传
- 上传简介
- 上传规则
- 上传对象
- 方法描述
- 上传验证
- 多文件上传
- 获取磁盘配置
- 获取默认磁盘名称
- 自定义命名规则
- layui
- 文件上传
- layuiAdmin单页版
- 部署方案 ①
- 部署方案 ② 【推荐】
- 部署方案 ③ 【推荐】
- 接口数据
- 隐藏 trace
- 数据表格中的删除
- 修改数据
- layui 接口数据格式
- layuiAdmin iframe版
- iframe版部署
- 放入TP6.0视图
- 登陆页面验证码
- 引入authtree扩展组件
- 2020.1.24版 主页成背景
- 经验分享
- 章节停更说明
- PhpStudy-v8.1 无法解析PHP代码
- 屏蔽Sublime的提示
- 正则匹配img标签
- Sublime 3.x 激活码
- windows dos 窗口命令 type
- windows dos 窗口命令 start
- apache配置主机
- navicat 闲置时间过久会卡死
- 命令行
- 简介
- 生成控制器
- 生成模型类
- 生成验证器
- 生成中间件
- 查看框架版本
- 清除缓存文件
- 生成应用目录
- 自定义指令
- 自定义命令创建类文件
- 模板引擎
- 运算符
- 变量输出
- 输出替换
- 模板引擎
- 模板注释
- 模板分离
- 模板继承
- 基础模板
- 区块设计
- 内置标签
- volist
- 资源文件
- 助手函数
- app
- 容器类
- url
- input
- redirect
- validate
- validate() 简介
- 文件上传验证
- 传入验证器类名
- 传入验证规则数组
- 推荐用法
- cookie
- env
- 常用扩展
- flc/dysms
- 使用示例 ①
- 使用示例 ②
- qiniu/php-sdk
- 简介
- 使用示例 ①
- 使用示例 ②
- liliuwei/thinkphp-jump
- 扩展介绍
- 下载扩展
- 使用方法
- topthink/think-captcha
- 安装扩展
- 验证码显示
- 更换验证码
- 验证码校验
- 验证码配置
- 自定义验证码
- phpoffice/phpspreadsheet
- 数据写入表格
- 读取表格数据
- topthink/think-queue
- 安装
- 自定义函数
- 任务类
- 带有日志的任务类
- 更新日志
- 2021-08