EG: accessKeyid和accessKeySecret还有模板ID、签名名称这几项必要参数自己去阿里云获取一、下载SDK和demo
下载并解压后
在laravel框架的app目录下创建libs/Aliyun目录并将上面两个文件夹复制进去,如果按照此方法则不需要改命名空间,如果你放在别的地方就根据你的路径修改一下命名空间
在根目录的composer.json里添加如下配置:
然后在cmd中进入根目录然后进行
composer dumpautoload
执行后若出现如下图所示,则表示更新成功
二、代码部分
1、首先引入文件并载入短信平台节点
use Aliyun\Core\Config; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest; Config::load();
2、发送代码
public function send(Request $request) { $phone = $request['phone'];//接收的手机号 //print_r($phone);die; $code = rand(100000,999999);//随机生成的6位验证码 session('code',$code);//将随机数写入session session('mphone',$phone);//写入获取的手机号 session('codetime',time());//写入当前时间 $response = SmsController::sendSms( "你的签名",//signName "你的短信模板code",//templateCode $phone,//手机号 Array( // 短信模板中字段的值 "code"=>$code, ) ); $row = []; if ($response->Code == 'OK') { $row = ['status'=>1,'code'=>$code]; } else { $row = ['status'=>0,'code'=>$response->Code,'message'=>$response->Message]; } return json_encode($row); } static $acsClient = null; /** * 取得AcsClient * * @return DefaultAcsClient */ public static function getAcsClient() { //产品名称:云通信流量服务API产品,开发者无需替换 $product = "深呼吸app"; //产品域名,开发者无需替换 $domain = "dysmsapi.aliyuncs.com"; // TODO 此处需要替换成开发者自己的AK (https://ak-console.aliyun.com/) $accessKeyId = "你自己的AccessKeyId"; // AccessKeyId $accessKeySecret = "你自己的AccessKeySecret"; // AccessKeySecret // 暂时不支持多Region $region = "cn-hangzhou"; // 服务结点 $endPointName = "cn-hangzhou"; if(static::$acsClient == null) { //初始化acsClient,暂不支持region化 $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); EndpointConfig::load(); DefaultProfile::addEndpoint($endPointName, $region, $product, $domain); // 增加服务结点 // 初始化AcsClient用于发起请求 static::$acsClient = new DefaultAcsClient($profile); } return static::$acsClient; } /** * 发送短信 * * @param string $signName <p> * 必填, 短信签名,应严格"签名名称"填写,参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/sign">短信签名页</a> * </p> * @param string $templateCode <p> * 必填, 短信模板Code,应严格按"模板CODE"填写, 参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/template">短信模板页</a> * (e.g. SMS_0001) * </p> * @param string $phoneNumbers 必填, 短信接收号码 (e.g. 12345678901) * @param array|null $templateParam <p> * 选填, 假如模板中存在变量需要替换则为必填项 (e.g. Array("code"=>"12345", "product"=>"阿里通信")) * </p> * @param string|null $outId [optional] 选填, 发送短信流水号 (e.g. 1234) * @param string|null $smsUpExtendCode [optional] 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段) * @return stdClass */ public static function sendSms($signName, $templateCode, $phoneNumbers, $templateParam = null, $outId = null, $smsUpExtendCode = null) { // 初始化SendSmsRequest实例用于设置发送短信的参数 $request = new SendSmsRequest(); // 必填,设置雉短信接收号码 $request->setPhoneNumbers($phoneNumbers); // 必填,设置签名名称 $request->setSignName($signName); // 必填,设置模板CODE $request->setTemplateCode($templateCode); // 可选,设置模板参数 if($templateParam) { $request->setTemplateParam(json_encode($templateParam)); } // 可选,设置流水号 if($outId) { $request->setOutId($outId); } // 选填,上行短信扩展码 if($smsUpExtendCode) { $request->setSmsUpExtendCode($smsUpExtendCode); } // 发起访问请求 $acsResponse = static::getAcsClient()->getAcsResponse($request); // 打印请求结果 // var_dump($acsResponse); return $acsResponse; }
有的人会出现:
发现问题在 app/libs/Aliyun/Core/DefaultAcsClient.doActionImpl(),是程序主动抛出的错误。
官方注释说 $domain是产品域名,开发者无需替换。but。。。。没替换,报个什么错啊。
既然不需要,就直接在/DefaultAcsClient.doActionImpl()把$domain 写死
然后测试接口会返回结果:
这样就发送成功了