1.在阿里云账号上开通短信功能,然后再设置自己的签名和短信模板。
操作文档连接:https://help.aliyun.com/document_detail/55288.html?spm=a2c4g.11174283.6.557.5bca2c42gjnWfj
2.下载SDK
地址:https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.4.5.351a19d9zJZohN
3.将下载后的文件解压放入extend目录下
我把解压后的文件名改为了aliyun-sms
4.修改aliyun-sms/api_demo/SmsDemo.php文件如下
其实就是提取了几个重要的形参,方便在别的地方调用
<?php
ini_set("display_errors", "on");
require_once dirname(__DIR__) . '/api_sdk/vendor/autoload.php';
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
// 加载区域结点配置
Config::load();
/**
* Class SmsDemo
*
* 这是短信服务API产品的DEMO程序,直接执行此文件即可体验短信服务产品API功能
* (只需要将AK替换成开通了云通信-短信服务产品功能的AK即可)
* 备注:Demo工程编码采用UTF-8
*/
class SmsDemo
{
static $acsClient = null;
/**
* 取得AcsClient
*
* @return DefaultAcsClient
*/
public static function getAcsClient($accessKeyId, $accessKeySecret)
{
//产品名称:云通信短信服务API产品,开发者无需替换
$product = "Dysmsapi";
//产品域名,开发者无需替换
$domain = "dysmsapi.aliyuncs.com";
// TODO 此处需要替换成开发者自己的AK (https://ak-console.aliyun.com/)
// $accessKeyId = "yourAccessKeyId"; // AccessKeyId
// $accessKeySecret = "yourAccessKeySecret"; // AccessKeySecret
// 暂时不支持多Region
$region = "cn-hangzhou";
// 服务结点
$endPointName = "cn-hangzhou";
if (static::$acsClient == null) {
//初始化acsClient,暂不支持region化
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用于发起请求
static::$acsClient = new DefaultAcsClient($profile);
}
return static::$acsClient;
}
/**
* Notes:发送短信
* @param $accessKeyId
* @param $accessKeySecret
* @param $PhoneNumbers //手机号
* @param $SignName //签名
* @param $TemplateCode //模板ID
* @param $TemplateParams //模板参数
* @return stdClass
*/
public static function sendSms($accessKeyId, $accessKeySecret,$SignName, $TemplateCode, $PhoneNumbers, $TemplateParams)
{
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest();
//可选-启用https协议
//$request->setProtocol("https");
// 必填,设置短信接收号码
$request->setPhoneNumbers($PhoneNumbers);
// 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
$request->setSignName($SignName);
// 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
$request->setTemplateCode($TemplateCode);
// 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
$request->setTemplateParam(json_encode( // 短信模板中字段的值
$TemplateParams, JSON_UNESCAPED_UNICODE));
// 可选,设置流水号
$request->setOutId("yourOutId");
// 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
$request->setSmsUpExtendCode("1234567");
// 发起访问请求
$acsResponse = static::getAcsClient($accessKeyId, $accessKeySecret)->getAcsResponse($request);
return $acsResponse;
}
}
4.调用
在需要的地方调用,我的是在控制器中调用
<?php
namespace app\admin\controller;
//引入发送短信文件(根据自己的路径来)
require_once env('extend_path').'aliyun-sms'.DIRECTORY_SEPARATOR.'api_demo'.DIRECTORY_SEPARATOR.'SmsDemo.php';
class Sendmsg
{
public function ali_sendmsg()
{
$phone = input('phone/s',''); //手机号
$yzm = rand(1111,9999); //随机生成的验证码
$Sms = new \SmsDemo();
$TemplateParams=[
'code' => $yzm
];
$res = $Sms->sendSms('你的accessKeyId', '你的accessKeySecret', '你的签名', '你的模板ID',$phone, $TemplateParams);
if($res->Code == 'OK'){
dump('发送成功');
}else{
dump('发送失败');
}
}
}
注:
在生成验证码的时候最好保存在redis中,设置有效期,这样方便后续验证
来源:CSDN
作者:喵喵超能睡
链接:https://blog.csdn.net/dancer_mm/article/details/103816655