tp 實作短信發送
注冊短信秘鑰這一部分就省略了
在阿裡雲短信下載下傳demo 下載下傳連結,找到相對應的demo
我們下下來之後發現他的目錄結構是這樣的
如果我們隻需要用到發送短信的業務的話,我們隻需要用到裡面的 api_sdk 這個檔案,
官方也給我們準備了demo可以檢視.
好我們來打開看看demo吧~
進來之後我們看到了getAcsClient()方法,這個裡面有幾個參數是需要替換成你自己的,
我們發現了阿裡雲的demo引入了命名空間,是以使我們更加容易操作.
接下來就是最重要的部分了 發送短信
我們也看到了裡面填寫參數,好了demo就看到這裡吧~ 開始寫代碼
我們在架構的擴充目錄下邊建立一個檔案 alisms
我們隻需要發送短信的業務, 把api_sdk copy 過來即可
我們開始配置秘鑰,我的是放在配置檔案裡面 如果你的秘鑰發生變化就放在資料庫 .
因為本人的是以前做的項目 是以目錄結構有點不相同,但是這都不影響操作
拷貝過來之後我們在目前檔案夾下邊仿照阿裡雲的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('發送成功!');
}
}
}