EG: accessKeyid和accessKeySecret還有模闆ID、簽名名稱這幾項必要參數自己去阿裡雲擷取
一、下載下傳SDK和demo
laravel架構使用阿裡短信接入
下載下傳并解壓後
在laravel架構的app目錄下建立libs/Aliyun目錄并将上面兩個檔案夾複制進去,如果按照此方法則不需要改命名空間,如果你放在别的地方就根據你的路徑修改一下命名空間
laravel架構使用阿裡短信接入
在根目錄的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 寫死
然後測試接口會傳回結果:
laravel架構使用阿裡短信接入
這樣就發送成功了