因为项目中需要用到阿里云短信验证码功能,所以就购买了相应的短信包进行测试,以下就是完整代码:
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
/**
* 短信发送
* @param $to 接收人
* @param $model 短信模板ID
* @param $code 短信验证码
* @return json
* @说明:有优惠,先领卷在购买,不谢!https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ob1nyal1
*/
function send_sms($to, $model, $code){
require_once '../extend/alisms/vendor/autoload.php';
Config::load(); //加载区域结点配置
$config = '根据你的实际情况读取配置文件或读取数据库,本项目是将配置写入数据库实现';
$accessKeyId = '你的AccessKeyID';
$accessKeySecret = '你的AccessKeySecret';
$templateParam = $code;
//短信签名
$signName = $config['sign_name'];
//短信模板ID
switch($model){
case 1:
$templateCode = $config['model_code_rl']; // 注册登录短信验证码模板
break;
case 2:
$templateCode = $config['model_code_reset']; // 重置密码短信验证码模板
break;
}
//短信API产品名(短信产品名固定,无需修改)
$product = "Dysmsapi";
//短信API产品域名(接口地址固定,无需修改)
$domain = "dysmsapi.aliyuncs.com";
//暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
$region = "cn-hangzhou";
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
// 初始化AcsClient用于发起请求
$acsClient= new DefaultAcsClient($profile);
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($to);
// 必填,设置签名名称
$request->setSignName($signName);
// 必填,设置模板CODE
$request->setTemplateCode($templateCode);
// 可选,设置模板参数
if($templateParam) {
$request->setTemplateParam(json_encode($templateParam));
}
//发起访问请求
$acsResponse = $acsClient->getAcsResponse($request);
//返回请求结果
$result = json_decode(json_encode($acsResponse),true);
// 具体返回值参考文档:https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK
return $result;
}
以下列举详细步骤:
在开始之前你必须在阿里云控制台中将你的accessKeyId、accessKeySecret获取并纪录起来,如果你的账户没有开启AccessKey需要进行开启操作:
1、登录阿里云控制台。
2、将鼠标放在右上方的用户名区域,在弹出的快捷菜单中选择accesskeys。
3、系统弹出安全提示对话框,单击继续使用AccessKey。页面显示AccessKeyId和AccessKeySecret。
其次,你需要申请好对应的模板及签名,然后在进行以下操作。
第一步:下载PHP短信发送Dome,将文件夹api_sdk复制到你的项目extend目录下,并任意重命名;
第二步:在你项目应用公共(函数)文件common.php头部添加
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
第三步:将封装好的函数写入common.php中
/**
* 短信发送
* @param $to 接收人
* @param $model 短信模板ID
* @param $code 短信验证码
* @return json
* @说明:有优惠,先领卷在购买,不谢!https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ob1nyal1
*/
function send_sms($to, $model, $code){
require_once '../extend/alisms/vendor/autoload.php';
Config::load(); //加载区域结点配置
$config = '根据你的实际情况读取配置文件或读取数据库,本项目是将配置写入数据库实现';
$accessKeyId = '你的AccessKeyID';
$accessKeySecret = '你的AccessKeySecret';
$templateParam = $code;
//短信签名
$signName = $config['sign_name'];
//短信模板ID
switch($model){
case 1:
$templateCode = $config['model_code_rl']; // 注册登录短信验证码模板
break;
case 2:
$templateCode = $config['model_code_reset']; // 重置密码短信验证码模板
break;
}
//短信API产品名(短信产品名固定,无需修改)
$product = "Dysmsapi";
//短信API产品域名(接口地址固定,无需修改)
$domain = "dysmsapi.aliyuncs.com";
//暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
$region = "cn-hangzhou";
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
// 初始化AcsClient用于发起请求
$acsClient= new DefaultAcsClient($profile);
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($to);
// 必填,设置签名名称
$request->setSignName($signName);
// 必填,设置模板CODE
$request->setTemplateCode($templateCode);
// 可选,设置模板参数
if($templateParam) {
$request->setTemplateParam(json_encode($templateParam));
}
//发起访问请求
$acsResponse = $acsClient->getAcsResponse($request);
//返回请求结果
$result = json_decode(json_encode($acsResponse),true);
// 具体返回值参考文档:https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK
return $result;
}
第四步:在你需要用到的控制器中调用send_sms(‘电话号码’,‘短信模板’,‘需要替换的变量’),OK大功告成!
$send = send_sms($sender, 1, ['code'=>$code]);