一:下载并集成PHP-SDK
1、自行下载(忽略)
2、ThinkPHP5 集成
a. sdk目录中包含:api_demo、api_sdk、msg_demo、msg_sdk 四个目录。
b.在 thinkphp5 的 extend 目录下新建ali目录,将api_sdk包复制进去
二:配置文件
在extra目录下面新建aliyun.php,请自行填入你自己的key数据
<?php
/**
* 阿里云相关配置
* Created by PhpStorm.
* User: Administrator
*/
return [
'product' => 'Dysmsapi', // 短信API产品名,唯一
'domain' => 'dysmsapi.aliyuncs.com', // 短信API产品域名,唯一
'region' => 'cn-hangzhou', // 暂时不支持多Region,唯一
'endPointName' => '', // 服务结点,唯一
'accessKeyId' => '', // AccessKeyId
'accessKeySecret' => '', // AccessKeySecret
'signName' => '', // 签名名称
'templateCode' => '', // 短信模板Code
'valid_time' => '300', // 验证码有效时间,单位为秒
];
三.封装发送短信的单例类
<?php
/**
* Created by PhpStorm.
* User: Administrator
*/
namespace app\common\lib;
use think\Cache;
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
require_once EXTEND_PATH.'ali/api_sdk/vendor/autoload.php';
// 加载区域结点配置
Config::load();
class Alidayu{
/**
* 短信验证码单例
* Created by
* User:
* Date:
* Time:
*/
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('aliyun.product');
// 短信API产品域名
$domain = config('aliyun.domain');
// 暂时不支持多Region
$region = config('aliyun.region');
// 服务结点
$endPointName = config('aliyun.endPointName');
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($region, config('aliyun.accessKeyId'), config('aliyun.accessKeySecret'));
// 增加服务结点
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用于发起请求
$this->acsClient = new DefaultAcsClient($profile);
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($phone);
// 必填,设置签名名称
$request->setSignName(config('aliyun.signName'));
// 必填,设置模板CODE
$request->setTemplateCode(config('aliyun.templateCode'));
//随机数
$random = rand(1000,9999);
//模板参数数组
$send_info = [
'code' => $random,
];
// 可选,设置模板参数
$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);
}
}
四:测试效果,在控制器下面新建一个Test.php.输入自己的手机号码
public function sendSms() {
Alidayu::getInstance()->sendSMS("1234567890");
}
然后在浏览器把x.com换为你的虚拟域名或者网址 打开http://x.com/test/sendSms
然后你的手机就能收到来自阿里云的短信了