TP5呼叫阿里雲簡訊介面實現傳送簡訊功能
阿新 • • 發佈:2019-02-03
因為專案中需要用到阿里雲簡訊驗證碼功能,所以就購買了相應的簡訊包進行測試,以下就是完整程式碼:
use Aliyun\Core\Config; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; /** * 簡訊傳送 * @param $to 接收人 * @param $model 簡訊模板ID * @param $code 簡訊驗證碼 * @return json * @說明:有優惠,先領卷在購買,不謝!https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ob1nyal1 */ function send_sms($to, $model, $code){ require_once '../extend/alisms/vendor/autoload.php'; Config::load(); //載入區域結點配置 $config = '根據你的實際情況讀取配置檔案或讀取資料庫,本專案是將配置寫入資料庫實現'; $accessKeyId = '你的AccessKeyID'; $accessKeySecret = '你的AccessKeySecret'; $templateParam = $code; //簡訊簽名 $signName = $config['sign_name']; //簡訊模板ID switch($model){ case 1: $templateCode = $config['model_code_rl']; // 註冊登入簡訊驗證碼模板 break; case 2: $templateCode = $config['model_code_reset']; // 重置密碼簡訊驗證碼模板 break; } //簡訊API產品名(簡訊產品名固定,無需修改) $product = "Dysmsapi"; //簡訊API產品域名(介面地址固定,無需修改) $domain = "dysmsapi.aliyuncs.com"; //暫時不支援多Region(目前僅支援cn-hangzhou請勿修改) $region = "cn-hangzhou"; // 初始化使用者Profile例項 $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); // 增加服務結點 DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain); // 初始化AcsClient用於發起請求 $acsClient= new DefaultAcsClient($profile); // 初始化SendSmsRequest例項用於設定傳送簡訊的引數 $request = new SendSmsRequest(); // 必填,設定雉簡訊接收號碼 $request->setPhoneNumbers($to); // 必填,設定簽名名稱 $request->setSignName($signName); // 必填,設定模板CODE $request->setTemplateCode($templateCode); // 可選,設定模板引數 if($templateParam) { $request->setTemplateParam(json_encode($templateParam)); } //發起訪問請求 $acsResponse = $acsClient->getAcsResponse($request); //返回請求結果 $result = json_decode(json_encode($acsResponse),true); // 具體返回值參考文件:https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK return $result; }
以下列舉詳細步驟:
在開始之前你必須在阿里雲控制檯中將你的accessKeyId、accessKeySecret獲取並紀錄起來,如果你的賬戶沒有開啟AccessKey需要進行開啟操作:
1、登入阿里雲控制檯。
2、將滑鼠放在右上方的使用者名稱區域,在彈出的快捷選單中選擇accesskeys。
3、系統彈出安全提示對話方塊,單擊繼續使用AccessKey。頁面顯示AccessKeyId和AccessKeySecret。
其次,你需要申請好對應的模板及簽名,然後在進行以下操作。
第一步:下載PHP簡訊傳送Dome,將資料夾api_sdk複製到你的專案extend目錄下,並任意重新命名;
第二步:在你專案應用公共(函式)檔案common.php頭部新增
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
第三步:將封裝好的函式寫入common.php中
/** * 簡訊傳送 * @param $to 接收人 * @param $model 簡訊模板ID * @param $code 簡訊驗證碼 * @return json * @說明:有優惠,先領卷在購買,不謝!https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ob1nyal1 */ function send_sms($to, $model, $code){ require_once '../extend/alisms/vendor/autoload.php'; Config::load(); //載入區域結點配置 $config = '根據你的實際情況讀取配置檔案或讀取資料庫,本專案是將配置寫入資料庫實現'; $accessKeyId = '你的AccessKeyID'; $accessKeySecret = '你的AccessKeySecret'; $templateParam = $code; //簡訊簽名 $signName = $config['sign_name']; //簡訊模板ID switch($model){ case 1: $templateCode = $config['model_code_rl']; // 註冊登入簡訊驗證碼模板 break; case 2: $templateCode = $config['model_code_reset']; // 重置密碼簡訊驗證碼模板 break; } //簡訊API產品名(簡訊產品名固定,無需修改) $product = "Dysmsapi"; //簡訊API產品域名(介面地址固定,無需修改) $domain = "dysmsapi.aliyuncs.com"; //暫時不支援多Region(目前僅支援cn-hangzhou請勿修改) $region = "cn-hangzhou"; // 初始化使用者Profile例項 $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); // 增加服務結點 DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain); // 初始化AcsClient用於發起請求 $acsClient= new DefaultAcsClient($profile); // 初始化SendSmsRequest例項用於設定傳送簡訊的引數 $request = new SendSmsRequest(); // 必填,設定雉簡訊接收號碼 $request->setPhoneNumbers($to); // 必填,設定簽名名稱 $request->setSignName($signName); // 必填,設定模板CODE $request->setTemplateCode($templateCode); // 可選,設定模板引數 if($templateParam) { $request->setTemplateParam(json_encode($templateParam)); } //發起訪問請求 $acsResponse = $acsClient->getAcsResponse($request); //返回請求結果 $result = json_decode(json_encode($acsResponse),true); // 具體返回值參考文件:https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK return $result; }
第四步:在你需要用到的控制器中呼叫send_sms(‘電話號碼’,‘簡訊模板’,‘需要替換的變數’),OK大功告成!
$send = send_sms($sender, 1, ['code'=>$code]);