阿里云短信服务验证码封装类 - 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++中inet_pton、inet_ntop函数
			
- 头文件windows下:#include <WS2tcpip.h>linux下:#include <sys/socket.h>#include <netinet/in ...
 - C#LeetCode刷题-贪心算法
			
贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配 17.8% 困难 45 跳跃游戏 II 25.5% 困难 55 跳跃游戏 30.6% 中等 122 买卖股票的最佳时机 II C ...
 - JavaScript 跨站攻击脚本-XSS
			
XSS: Cross Site Scripting XSS 概念 恶意攻击者往Web页面里插入恶意script代码, 当用户浏览该页之时,嵌入Web里面的script代码会被执行,从达到恶意攻击的目的 ...
 - Java多线程编程(6)--线程间通信(下)
			
因为本文的内容大部分是以生产者/消费者模式来进行讲解和举例的,所以在开始学习本文介绍的几种线程间的通信方式之前,我们先来熟悉一下生产者/消费者模式. 在实际的软件开发过程中,经常会碰到如下场景 ...
 - 获取客户端用户真实ip方法整理(jekyll迁移)
			
layout: post title: 获取客户端用户真实ip方法整理 date: 2019-08-22 author: xiepl1997 tags: springboot 由请求获取客户端ip地址 ...
 - kereas 实现鸢尾花分类
			
import tensorflow as tf from sklearn import datasets import numpy as np x_train=datasets.load_iris() ...
 - PhpStorm安装及破解流程
			
下载完以后,把破解的jar包放到bin目录下,更改两个.vmoptions文件 我是安装了一个破解的和汉化包 jet是破解包,resource是汉化包,然后还要修改本地主机地址 例: 0.0.0.0 ...
 - mxnet笔记
			
参考链接: https://mxnet.apache.org/api/faq/distributed_training https://mxnet.apache.org/api/faq/gradien ...
 - SwiftUI - Grid View 的实现方法,逐步剖析助你实现
			
简介 在当前正式 SwiftUI 版本而言,很多控件都是缺少的.比如在 UIKit 框架里有 UICollectionView 组件,可以很方便地做 Gird 格子类型的视图.但是在 SwiftUI ...
 - 力扣Leetcode 3. 无重复字符的最长子串
			
无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串 ...