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

目录

  • 开通阿里云短信服务
  • 创建签名以及模板
    • 创建签名
    • 记住签名名称
    • 创建模板
    • 记住模板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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于thinkphp5扩展的阿里大鱼短信接口。 使用方式: 1:将压缩包解压到项目根目录下simplewind文件夹下的extend文件夹中。 2:在use think\config文 件中加入配置 'wechat' =>array( /**********阿里大鱼配置************/ 'all_appkey' => '',//阿里大鱼Appkey 'all_secret' => '',//阿里大鱼Secret 'domain' => 'dysmsapi.aliyuncs.com',//阿里大鱼产品域名 'product' => 'Dysmsapi',////产品名称:云通信流量服务API产品,开发者无需替换 'region' => 'cn-hangzhou',//暂时不支持多Region 'end'=>'cn-hangzhou',// 服务结点 ), 3:在公共函数文件头部中加入 use aliyun\api_demo; 然后添加以下的阿里云调用方法: /**********************************发送短信--阿里大鱼********************/ /** * @param $autograph //签名 * @param $model //短信模板 * @param $phone //短信接收号码 * @param array $array //短信模板内容 * @param $water //流水号 * @return api_demo\stdClass|string */ function sk_aldayuCode($autograph,$model,$phone,$array=array(),$water){ if(!$autograph || !$model || !$phone || empty($array) || !$water){ return "参数不齐全:".$autograph."|".$model."|".$phone."|".$water; } $response = api_demo\SmsDemo::sendSms($autograph,$model,$phone,$array,$water); if(!$response->Message || $response->Message != 'OK'){ $msg['Message'] = $response->Message; return json_encode($msg,JSON_UNESCAPED_UNICODE); }else{ $msg['code'] = $array; $msg['Message'] = "OK"; return json_encode($msg,JSON_UNESCAPED_UNICODE); } } /**********************************发送短信--阿里大鱼********************/ 4:在须要调用短信发送的类中直接调用上方的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值