您的位置:首页 > 编程语言 > PHP开发

ThinkPHP5 集成阿里云SMS短信服务--验证码发送

2017-10-07 17:18 621 查看

目录

开通阿里云短信服务

创建签名以及模板

创建签名

记住签名名称

创建模板

记住模板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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: