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 寫死
然后測試接口會返回結果:

這樣就發送成功了