1. 程式人生 > >如何使用阿里雲簡訊服務構建自己的登入平臺

如何使用阿里雲簡訊服務構建自己的登入平臺

 個人部落格網站文章地址: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池,是通過投遞非同步任務實現的,具體的操作符合你的業務邏輯即可。