調用短信API還須要兩個參數:php
能夠經過阿里雲控制檯的 祕鑰管理頁面 建立、管理全部的訪問祕鑰對,且保證它處於「啓用」狀態。因爲訪問祕鑰是阿里雲對 API 請求進行安全驗證的關鍵因子,請妥善保管你的訪問祕鑰。若是某些祕鑰對出現泄漏風險,建議及時刪除該祕鑰對並生成新的替代祕鑰對。laravel
下載阿里雲提供的SDK開發並將api_sdk/lib/Core和api_sdk/lib/Api複製一份放到項目app/Tools/dysms下,沒有的話須要本身建立。
打開項目根目錄下的composer.json文件,在classmap,加上圖示代碼
打開命令行工具在項目根目錄輸入:git
composer dumpautoload
執行成功以下圖
接下來就是正式的開發了,直接使用sdk裏面導入包的方式進行引入:
第一次postman測試運行報錯以下:
這是由於EndpointerProvider裏面,沒有setEndpoints就直接使用了getEndpointers,因此返回爲空信息,setEndpoints操做是在EndpointConf中調用的,加載xml中的endpoints,在調用代碼中加入github
// 手動加載endpoint EndpointConfig::load();
再次運行代碼發現報以下錯誤:
這是由於代理的緣由,註釋一下代碼就能夠了:
shell
開發完整代碼,github源碼地址:json
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Input; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; use Aliyun\Core\Regions\EndpointConfig; class Dysms extends Controller { static $acsClient = null; //阿里短信 public function Dysms() { // 初始化SendSmsRequest實例用於設置發送短信的參數 $request = new SendSmsRequest(); //可選-啓用https協議 //$request->setProtocol("https"); // 必填,設置短信接收號碼 $request->setPhoneNumbers(Input::get('phone')); // 必填,設置簽名名稱,應嚴格按"簽名名稱"填寫,請參考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign $request->setSignName("簽名"); // 必填,設置模板CODE,應嚴格按"模板CODE"填寫, 請參考: https://dysms.console.aliyun.com/dysms.htm#/develop/template $request->setTemplateCode("模版CODE"); // 可選,設置模板參數, 假如模板中存在變量須要替換則爲必填項 $request->setTemplateParam(json_encode(array( // 短信模板中字段的值 "code" => rand(000000, 999999), "product" => "dsd" ), JSON_UNESCAPED_UNICODE)); // 可選,設置流水號 $request->setOutId("1234567"); // 選填,上行短信擴展碼(擴展碼字段控制在7位或如下,無特殊需求用戶請忽略此字段) // $request->setSmsUpExtendCode("1234567"); // 發起訪問請求 $acsResponse = static::getAcsClient()->getAcsResponse($request); //打印執行結果 dd($acsResponse); // 執行成功後的返回狀態 // {#1538 // +"Message": "OK" // +"RequestId": "0CE56BFE-5E9A-4F3F-8AEC-5C524720CE83" // +"BizId": "480519725607521112^0" // +"Code": "OK" // } } /** * 取得AcsClient * * @return DefaultAcsClient */ public static function getAcsClient() { //產品名稱:雲通訊流量服務API產品,開發者無需替換 $product = "Dysmsapi"; //產品域名,開發者無需替換 $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); // 手動加載endpoint EndpointConfig::load(); // 增長服務結點 DefaultProfile::addEndpoint($endPointName, $region, $product, $domain); // 初始化AcsClient用於發起請求 static::$acsClient = new DefaultAcsClient($profile); } return static::$acsClient; } }
PS:最後不得不吐槽下,阿里用OSS和阿里短信好多坑啊,這麼大的一個公司。api