因为项目中需要用到阿里云短信验证码功能,所以就购买了相应的短信包进行测试,以下就是完整代码:
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 */ 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;
/**
* 短信发送
* @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]);