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

来源:互联网 发布:河北体育学院网络教育 编辑:程序博客网 时间:2024/05/21 05:42

目录

  • 开通阿里云短信服务
  • 创建签名以及模板
    • 创建签名
    • 记住签名名称
    • 创建模板
    • 记住模板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);    }}
阅读全文
0 0
原创粉丝点击