天天看點

thinkphp5.0整合阿裡雲短信

tp 實作短信發送

注冊短信秘鑰這一部分就省略了

在阿裡雲短信下載下傳demo 下載下傳連結,找到相對應的demo

thinkphp5.0整合阿裡雲短信

我們下下來之後發現他的目錄結構是這樣的

thinkphp5.0整合阿裡雲短信

如果我們隻需要用到發送短信的業務的話,我們隻需要用到裡面的 api_sdk 這個檔案,

官方也給我們準備了demo可以檢視.

好我們來打開看看demo吧~

thinkphp5.0整合阿裡雲短信

進來之後我們看到了getAcsClient()方法,這個裡面有幾個參數是需要替換成你自己的,

我們發現了阿裡雲的demo引入了命名空間,是以使我們更加容易操作.

接下來就是最重要的部分了 發送短信

thinkphp5.0整合阿裡雲短信

我們也看到了裡面填寫參數,好了demo就看到這裡吧~ 開始寫代碼

我們在架構的擴充目錄下邊建立一個檔案 alisms

thinkphp5.0整合阿裡雲短信

我們隻需要發送短信的業務, 把api_sdk copy 過來即可

thinkphp5.0整合阿裡雲短信

我們開始配置秘鑰,我的是放在配置檔案裡面 如果你的秘鑰發生變化就放在資料庫 .

thinkphp5.0整合阿裡雲短信

因為本人的是以前做的項目 是以目錄結構有點不相同,但是這都不影響操作

拷貝過來之後我們在目前檔案夾下邊仿照阿裡雲的demo 重寫一個方法

<?php
/**
 * Created by  Wang.
 * User:  Wang.
 * Date: 2019/1/8
 * Time: 15:27
 */

namespace alisms;

use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;

//引入autoload.php,EXTEND_PATH就是指tp5根目錄下的extend目錄,系統自帶常量。
//alisms為我們複制api_sdk過來後更改的目錄名稱

require_once EXTEND_PATH.'alisms/vendor/autoload.php';

//加載區域結點配置
Config::load();

class SendSms
{
    /*關鍵的配置,我們用成員屬性*/

    //阿裡雲短信擷取的accessKeyId
    private $accessKeyId;
    //阿裡雲短信擷取的accessKeySecret
    private $accessKeySecret;
    //短信簽名,要稽核通過
    private $signName;
    //短信模闆ID,記得要稽核通過的
    private $templateCode;

    public function __construct()
    {
    	//使用靜态方法讀取秘鑰 構造函數指派
        $this->accessKeyId = \config('AliSms.accessKeyId');
        $this->accessKeySecret = \config('AliSms.accessKeySecret');
        $this->signName = \config('AliSms.signName');
        $this->templateCode = \config('AliSms.templateCode');
    }

    public function send($mobile,$templateParam)
    {

        //短信API産品名(短信産品名固定,無需修改)
        $product = "Dysmsapi";
        //短信API産品域名(接口位址固定,無需修改)
        $domain = "dysmsapi.aliyuncs.com";
        //暫時不支援多Region(目前僅支援cn-hangzhou請勿修改)
        $region = "cn-hangzhou";

        // 初始化使用者Profile執行個體
        $profile = DefaultProfile::getProfile($region, $this->accessKeyId, $this->accessKeySecret);
        // 增加服務結點
        DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
        // 初始化AcsClient用于發起請求
        $acsClient= new DefaultAcsClient($profile);

        // 初始化SendSmsRequest執行個體用于設定發送短信的參數
        $request = new SendSmsRequest();
        // 必填,設定雉短信接收号碼
        $request->setPhoneNumbers($mobile);

        // 必填,設定簽名名稱
        $request->setSignName($this->signName);

        // 必填,設定模闆CODE
        $request->setTemplateCode($this->templateCode);

        // 可選,設定模闆參數
        if($templateParam) {
            $request->setTemplateParam(json_encode($templateParam),JSON_UNESCAPED_UNICODE);
        }

        //發起通路請求
        $acsResponse = $acsClient->getAcsResponse($request);

        //傳回請求結果,這裡為為數組格式
        $result = json_decode(json_encode($acsResponse),true);
        return $acsResponse;
    }

}

           

注意引入命名空間

namespace alisms;

這樣子就基本上完成了是不是很簡單呢~ 我們開始調用它發送短信啦~~

我們在用到他的時候命名空間就起作用咯

//類前面記得引入SendSms類 
	 use alisms\SendSms;
	//簡單的調用
    public function test(Request $request)
    {
        //判斷是否ajax送出
        if($request->isAjax())
        {
            //擷取mobile參數
            $mobile = $request->param('mobile');
            //建立code
            $templateParam = array('code' => rand(1000,9999));

            //儲存在session進行驗證
            session('sms_code',['mobile'=>$mobile,'code'=>$templateParam['code']]);

            //執行個體化類
            $send = new SendSms();
            //調用類裡面send方法 send()方法需要倆個參數;
            //發送短信~
            $result = $send->send($mobile,$templateParam);
            //是否成功
            if($result)
            {
                //傳回
                return http200('發送成功!');
            }
        }
    }