阿里云短信服务验证码封装类 - PHP
本文记录在ThinkPHP6.0中使用阿里云短信验证码,该封装类不仅仅局限于TP,拿来即用
使用该类之前必须引入 flc/dysms 扩展,该封装类就是基于这个扩展写的
composer require flc/dysms
<?php
// 本文件放入TP6.0的extend目录下 extend/Dysms.php
use Flc\Dysms\Client;
use Flc\Dysms\Request\SendSms;
// 获取类的实例
// function dysms()
// {
// return Dysms::getInstance();
// }
// 使用示例 返回一个数组
// $arr['result'] true 发送成功
// $arr['result'] false 发送失败 msg 错误信息
// $arr = dysms()->sendSms(1503xxxxx);//参数是接收验证码的手机号
/**
* 阿里大于短信验证码封装
* composer require flc/dysms
*
* 阿里云短信服务默认流控
* 同一个签名同一个手机号短信验证码 1条/分钟
*/
class Dysms
{
private static $obj;
private $config;
private $signName;
private $templateCode;
/**
* 私有化构造方法
* 禁止类在外部被实例化
*/
private function __construct()
{
// accessKey、accesssecret
$this->config = [
'accessKeyId' => 'LTAI4GJ6iaE7xxxxxxxxxxxx',
'accessKeySecret' => 'uljdxDoi8ocXNxxxxxxxxxx',
];
//短信签名
$this->signName = 'xxxxxxxx';
//短信模板ID
$this->templateCode = 'SMS_179xxxxxx';
}
/**
* 获取类的实例
*/
public static function getInstance()
{
if (self::$obj instanceof self) {
return self::$obj;
} else {
self::$obj = new self;
return self::$obj;
}
}
/**
* 传入手机号发送短信
* @param $phoneNumbers 手机号
*/
public function sendSms($phoneNumbers)
{
$client = new Client($this->config);
$sendSms = new SendSms;
$sendSms->setPhoneNumbers($phoneNumbers);
$sendSms->setSignName($this->signName);
$sendSms->setTemplateCode($this->templateCode);
$sendSms->setTemplateParam(['code' => rand(100000, 999999)]);
$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' => '发送成功'];
} else {
return ['result' => false, 'code' => $result->Code,'msg' => $result->Message];
}
}
/**
* 私有化克隆方法
* 禁止类的实例在外部被克隆
*/
private function __clone(){}
}
在 TP6.0 中的使用
(1)在框架根目录执行以下命令,引入扩展包
composer require flc/dysms
(2)将该类放入TP6.0的extend目录下,也就是 extend/Dysms.php

(3)将以下函数放入TP6.0的全局公共函数文件 app/common.php
// 获取类的实例
function dysms()
{
return Dysms::getInstance();
}
(4)此时在控制器或模型中则可以使用以下方式直接使用
// 使用示例 返回一个数组
// $arr['result'] true 发送成功
// $arr['result'] false 发送失败 msg 错误信息
$arr = dysms()->sendSms(150xxxx);//参数是接收验证码的手机号
阿里云短信服务验证码封装类 - PHP的更多相关文章
- php 阿里云短信服务及阿里大鱼实现短信验证码的发送
一:使用阿里云的短信服务 ① 申请短信签名 ②申请短信模板 ③创建Access Key,获取AccessKeyId 与 AccessKeySecret.(为了安全起见,这里建议使用子用户的Access ...
- 移动端获取短信验证码java实现——阿里云短信服务
需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...
- 浏览器端获取短信验证码java实现——阿里云短信服务
需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...
- flask+阿里云短信服务实现注册发送手机验证码
效果图: 该效果主要讲解实现通过调用阿里云的SDK实现发送注册验证码短信(阿里云短信付费使用) 购买阿里云短信服务 购买链接:https://www.aliyun.com/product/sms 1. ...
- springboot 使用阿里云短信服务发送验证码
一.申请阿里云短信服务 1.申请签名 2.申请模板 3.创建accesskey(鼠标悬停在右上角头像) 二.代码实现 1.springboot引入maven依赖 <dependency> ...
- java实现阿里云短信服务发送验证码
由于做项目的时候遇到了接第三方短信服务,所以记录一下. 一.新建一个maven项目并导入相关依赖 <!--手机发送短信验证码--> <dependency> <group ...
- 阿里云短信服务调用例子-Python
阿里云短信服务调用例子 阿里云官方文档https://helpcdn.aliyun.com/document_detail/101893.html 首先需要安装阿里云PythonSDK(下面是pyth ...
- ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录
首先介绍下短信注册登录流程: 注册页面点击获取手机号验证码按钮,用jquery的click事件POST或GET方法把手机号发送到后台控制器: 后台控制器创建函数,收到手机号后生成随机码,例如:6位的随 ...
- legend3---PHP使用阿里云短信服务
legend3---PHP使用阿里云短信服务 一.总结 一句话总结: 使用步骤照官方文档,代码拷贝即可 1.php使用阿里云短信服务的步骤? 入驻阿里云->开通短信服务->获取Access ...
随机推荐
- C#LeetCode刷题之#367-有效的完全平方数(Valid Perfect Square)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3869 访问. 给定一个正整数 num,编写一个函数,如果 num ...
- C#LeetCode刷题之#532-数组中的K-diff数对(K-diff Pairs in an Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3716 访问. 给定一个整数数组和一个整数 k, 你需要在数组里找 ...
- C#LeetCode刷题之#695-岛屿的最大面积( Max Area of Island)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3736 访问. 给定一个包含了一些 0 和 1的非空二维数组 gr ...
- C#LeetCode刷题之#747-至少是其他数字两倍的最大数( Largest Number At Least Twice of Others)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3746 访问. 在一个给定的数组nums中,总是存在一个最大元素 ...
- 运放引脚悬空危害大,单片机PWM信号进入运放需要考虑避免运放引脚悬空
1 问题电路 在没有烧录程序时,单片机的PWM引脚无信号,导致运放的3脚悬空,从而导致运放输出3.5V电压,从二导致后面驱动电流非常大,容易对驱动器件造成损坏 2 改进电路 通过在单片机输出增加下拉电 ...
- 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)
大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令. 如果文章有任何需要 ...
- 如何解决Mybatis 日期查询时后面带.0
关于如何解决Mybatis 日期查询时后面带.0 MySQL数据库: 直接在MySQL查询语句中解决: SELECT T.ID, T.USERNAME, DATE_FORMAT(t.birthda ...
- Linux 实现密钥免密登录
Linux 实现密钥免密登录 环境:CentOS 7 一. 创建密钥 登录Linux,进入/root/.ssh/目录下 执行ssh-keygen -t rsa创建密钥一直回车即可,因为是免密所以直接回 ...
- Burp Suite 爆破high级别的DVWA
Step1:调整 DVWA 为 high 级别,然后点击进入 Brute Force . Step2:输入正确的账号,和一个假的密码,使用BP进行拦包. Step3:Ctrl+i 将拦到的包发送到 I ...
- JavaScript学习系列博客_33_JavaScript String对象
String对象 在底层,字符串是以数组的形式保存的.比如说一个字符串"String"以["H","t","r",&qu ...