如何使用阿里雲簡訊服務構建自己的登入平臺
個人部落格網站文章地址:http://blog.mclink.xyz/index/article/index/id/43.html
前些時候在學韓大佬的swoole的時候,在登入介面用到了簡訊驗證碼登入場景,想到了阿里雲的簡訊服務功能,就使用了一下,效果還可以,基本上2-3s簡訊就來了,在此記錄一下我的使用經歷,其實是十分簡單的。
一,註冊阿里雲並且進行登入
不少人可能在阿里雲買過雲伺服器啥的,如果你已經有對應的賬號了,那麼更好,這裡也可以使用淘寶的賬戶進行登入,這是阿里雲的首頁頁面。
將滑鼠移到產品那裡,會彈出一個div,這裡其實就是運用了hover而已,這種導航方式還是隨處可見的。我們可以在div右邊找到雲通訊對應的簡訊服務,進行點選。
二、進入簡訊服務頁面,開通使用
進入後,如果有個開通使用,就點選進行服務的開通。開通成功後會顯示這樣的頁面。
那麼就進入控制檯把。實際上我們需要用到的有五個:1.AccessKey 2.AccessKeySecret 3.簽名 4.模板 5.SDK
所以首先你得先獲取這三個東西,這裡的AK要記得存起來,簽名管理和模板管理是需要進行稽核的,稽核通過才能使用,我這裡是已經建立稽核通過後的。
這裡的東西在介面呼叫的程式碼那裡會用到,然後我們還需要獲取阿里雲簡訊的SDK,在介面呼叫那裡我們選擇簡訊傳送API PHP版,進入後,你會發覺人家的文件還是寫的十分詳細的,不過都是文字版的,我們可以在在那裡找到sdk下載。
下載解壓後我們暫時只需要這兩個檔案。你需要把api_sdk放在一個資料夾裡,我們會通過程式碼將其引入進行使用,假如你已經放好了,那麼我們可以通過程式碼呼叫了,你也可以自己看下阿里提供了api_demo,我們會在它的基礎上進行修改以致於符合我們的業務邏輯,例如這樣呼叫:
<?php namespace app\common\lib\ali; ini_set("display_errors", "on"); require_once APP_PATH.'../extend/ali/vendor/autoload.php'; //這裡放的是你的api_sdk的位置下的autoload.php 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\SendBatchSmsRequest; use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest; // 載入區域結點配置 Config::load(); /** * Class SmsDemo * * 這是簡訊服務API產品的DEMO程式,直接執行此檔案即可體驗簡訊服務產品API功能 * (只需要將AK替換成開通了雲通訊-簡訊服務產品功能的AK即可) * 備註:Demo工程編碼採用UTF-8 */ class Sms { static $acsClient = null; /** * 取得AcsClient * * @return DefaultAcsClient */ public static function getAcsClient() { //產品名稱:雲通訊流量服務API產品,開發者無需替換 $product = "Dysmsapi"; //產品域名,開發者無需替換 $domain = "dysmsapi.aliyuncs.com"; // TODO 此處需要替換成開發者自己的AK (https://ak-console.aliyun.com/) $accessKeyId = "你自己的AK"; // AccessKeyId $accessKeySecret = "你的AccessKeySecret"; // AccessKeySecret // 暫時不支援多Region $region = "cn-hangzhou"; // 服務結點 $endPointName = "cn-hangzhou"; if(static::$acsClient == null) { //初始化acsClient,暫不支援region化 $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); // 增加服務結點 DefaultProfile::addEndpoint($endPointName, $region, $product, $domain); // 初始化AcsClient用於發起請求 static::$acsClient = new DefaultAcsClient($profile); } return static::$acsClient; } /** * 傳送簡訊 * @return stdClass */ public static function sendSms($phone,$code) { // 初始化SendSmsRequest例項用於設定傳送簡訊的引數 $request = new SendSmsRequest(); //可選-啟用https協議 //$request->setProtocol("https"); // 必填,設定簡訊接收號碼 $request->setPhoneNumbers($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"=>$code, "product"=>"dsd" ), JSON_UNESCAPED_UNICODE)); // 可選,設定流水號 // $request->setOutId("yourOutId"); // 選填,上行簡訊擴充套件碼(擴充套件碼欄位控制在7位或以下,無特殊需求使用者請忽略此欄位) $request->setSmsUpExtendCode("1234567"); // 發起訪問請求 $acsResponse = static::getAcsClient()->getAcsResponse($request); return $acsResponse; } }
大致說一下程式碼,這是一個經過改裝的demo,結合了TP5,直接呼叫sendSms,傳入電話號碼和驗證碼就可以進行簡訊的傳送了,上面需要你改的有,1.AccessKeyID 2.AccessKeyScerct 3.簽名名稱 4.模板CODE。對了,還有require的autoload.php一定要跟你放的sdk位置對上。這裡的PHP版本要求是5.4以上的。這時候你只要進行呼叫即可,我的專案呼叫的方式比較複雜,因為用到了swoole的task池,是通過投遞非同步任務實現的,具體的操作符合你的業務邏輯即可。