目录
- 开通阿里云短信服务
- 创建签名以及模板
- 创建签名
- 记住签名名称
- 创建模板
- 记住模板Code
- 创建并记住Access Key Id 以及 Access Key Secret
- 下载并集成PHP-SDK
- 实战
一、开通阿里云短信服务
首先去阿里云官网,申请账号,并开通短信服务功能。
二、创建签名以及模板
1、创建签名
2、记住签名名称
3、创建模板
4、记住模板Code
三、创建并记住Access Key Id 以及 Access Key Secret
四、下载并集成PHP-SDK
1、自行下载(忽略)
2、ThinkPHP5 集成
a. sdk目录中包含:api_demo、api_sdk、msg_demo、msg_sdk 四个目录。
b. 将包含 sdk 下所有目录的文件夹(如ali),放入 thinkphp5 可扩展第三方 extend 目录下。集成sdk ok。
五、实战
1、创建短信服务所需的配置参数文件 ali.php
<?php
/**
* ali.php
* 阿里短信验证参数
* Created by
* User:
* Date:
* Time:
*/
return [
'product' => 'Dysmsapi', // 短信API产品名,唯一
'domain' => 'dysmsapi.aliyuncs.com', // 短信API产品域名,唯一
'region' => 'cn-hangzhou', // 暂时不支持多Region,唯一
'endPointName' => 'cn-hangzhou', // 服务结点,唯一
'accessKeyId' => '', // AccessKeyId
'accessKeySecret' => '', // AccessKeySecret
'signName' => '', // 签名名称
'templateCode' => '', // 短信模板Code
'valid_time' => '300', // 验证码有效时间,单位为秒
];
2、封装发送短信的单例类
<?php
/**
* 短信验证码单例
* Created by
* User:
* Date:
* Time:
*/
namespace app\common\lib;
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use think\Cache;
require_once EXTEND_PATH.'ali/api_sdk/vendor/autoload.php';
// 加载区域结点配置
Config::load();
class Ali {
public $acsClient = '';
/**
* 静态变量保存全局实例
*/
private static $_instance = null;
/**
* 私有构造方法
*/
private function __construct(){}
/**
* 获取单例实例
*/
public static function getInstance(){
if(empty(self::$_instance)){
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 发送短信验证码
* $phone :手机号码
*/
public function sendSMS($phone) {
// 短信API产品名
$product = config('ali.product');
// 短信API产品域名
$domain = config('ali.domain');
// 暂时不支持多Region
$region = config('ali.region');
// 服务结点
$endPointName = config('ali.endPointName');
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($region, config('ali.accessKeyId'), config('ali.accessKeySecret'));
// 增加服务结点
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用于发起请求
$this->acsClient = new DefaultAcsClient($profile);
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($phone);
// 必填,设置签名名称
$request->setSignName(config('ali.signName'));
// 必填,设置模板CODE
$request->setTemplateCode(config('ali.templateCode'));
//随机数
$random = rand(0,999999);
//模板参数数组
$send_info = [
'code' => $random,
'product' => '产品',
];
// 可选,设置模板参数
$request->setTemplateParam(json_encode($send_info));
// 发起访问请求
$acsResponse = $this->acsClient->getAcsResponse($request);
// 打印请求结果
// var_dump($acsResponse);
if(!$acsResponse->Code == "OK"){
return false;
}
//设置手机号码有效期为 5 分钟
Cache::set($phone,$random,config('ali.valid_time'));
return true;
}
/**
* 检查短信验证码是否失效
* @param $phone
* @return 返回验证码
*/
public static function checkValidPhone($phone) {
if(!$phone){
return false;
}
return Cache::get($phone);
}
}