thinkphp5詳細使用阿里雲簡訊最新版(原大魚)教程!
阿新 • • 發佈:2018-12-14
先說一下吧,這篇文章主要教大家如何使用tp5來使用阿里簡訊平臺最新版2.0sdk,也就是所謂的前阿里大魚。
但是高手略過啊,只針對新手,如果大家發現有什麼問題,歡迎留言指出,我會更正!
首先我們下載官方完整包的SDK:[url]https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.580.3rgXTq[/url]
官方標明瞭啊,PHP版本一定要不低於5.5
下載後目錄如下:
SDK工具包目錄結構如下:
\_api_demo | \_SmsDemo.php 簡訊服務相關介面demo示例 \_api_sdk | \_lib | | \_Api 包含Api介面請求體的封裝 | | \_Core 包含簽名生成、Region配置等封裝 | \_test 單元測試 | \_vendor composer依賴打包 \_msg_demo | \_lib 示例依賴項 | \_MsgDemo.php 簡訊服務狀態報告demo示例 \_msg_sdk \_lib | \_Api 包含Api介面請求體的封裝 | \_Core 包含簽名生成、Region配置等等封裝 | \_MNS 包含訊息服務相關封裝 \_test 單元測試 \_vendor composer依賴打包
官方封裝的很多檔案其實我們是用不上的,[b]我們只需要將目錄裡的api_sdk複製出來到tp5根目錄的extend下面。[/b]
資料夾複製過去後,我們最好更改一下名稱,比如我們更改為alisms。
接下來介紹兩種方法使用。
第一種:直接在應用目錄下的函式庫common裡寫函式呼叫
首先在函式頂部引入阿里雲簡訊的名稱空間,無需修改,官方sdk自帶的名稱空間 use Aliyun\Core\Config; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; //阿里簡訊函式,$mobile為手機號碼,$code為自定義隨機數 function sendMsg($mobile,$code){ //這裡的路徑EXTEND_PATH就是指tp5根目錄下的extend目錄,系統自帶常量。alisms為我們複製api_sdk過來後更改的目錄名稱 require_once EXTEND_PATH.'alisms/vendor/autoload.php'; Config::load(); //載入區域結點配置 $accessKeyId = '×××××××××××××'; //阿里雲簡訊獲取的accessKeyId $accessKeySecret = '×××××××××××××'; //阿里雲簡訊獲取的accessKeySecret //這個個是稽核過的模板內容中的變數賦值,記住陣列中字串code要和模板內容中的保持一致 //比如我們模板中的內容為:你的驗證碼為:${code},該驗證碼5分鐘內有效,請勿洩漏! $templateParam = array("code"=>$code); //模板變數替換 $signName = '浪博電子'; //這個是簡訊簽名,要稽核通過 $templateCode = 'SMS_×××××××'; //簡訊模板ID,記得要稽核通過的 //簡訊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($mobile); // 必填,設定簽名名稱 $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); return $result; }
然後我們在控制器中方法直接呼叫,程式碼如下:
/* * 前臺ajax請求傳送簡訊驗證碼 */ public function sendSms($phone) { $mobile = $phone; //$code = 1111; $code = mt_rand(10000, 99999); $result = sendMsg($mobile, $code); //$result['Code'] = 'OK'; if ($result['Code'] == 'OK') { //存到快取當中,並且返回json資料給前端 cache('tel' . $mobile, $code, 39); return json(['success' => 'ok', 'tel' => $mobile]); } } [/code] 如果傳送成功,將返回以下內容,當然你也可以自定義輸出$sms為陣列格式或者json格式 [code]array(4) { ["Message"] => string(2) "OK" ["RequestId"] => string(36) "5340C2E9-6802-4EA6-90E3-392518495E6A" ["BizId"] => string(20) "519300710627122289^0" ["Code"] => string(2) "OK" }
第二種方法:我們直接在extend下面的alisms目錄下寫一個類
<?php
/**
* Created by pan.
* User: pan
* Date: 2017/11/14
* Time: 9:41
*/
//[b]名稱空間為alisms[/b]
namespace alisms;
//引入sdk的名稱空間
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
{
//關鍵的配置,我們用成員屬性
public $accessKeyId = null; //阿里雲簡訊獲取的accessKeyId
public $accessKeySecret = null; //阿里雲簡訊獲取的accessKeySecret
public $signName = null; //簡訊簽名,要稽核通過
public $templateCode = null; //簡訊模板ID,記得要稽核通過的
public function send($mobile,$templateParam)
{
//獲取成員屬性
$accessKeyId = $this->accessKeyId;
$accessKeySecret = $this->accessKeySecret;
$signName = $this->signName;
$templateCode = $this->templateCode;
//簡訊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($mobile);
// 必填,設定簽名名稱
$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);
return $result;
}
}
然後可以在方法中寫函式呼叫,或者直接在控制器中呼叫,這裡為在控制器中呼叫
<?php
namespace app\index\controller;
use think\Request;
//[b]記得引入名稱空間,如果這裡不引入名稱空間,那麼方法中的例項化SendSms的格式應該為:$sms = new \alisms\SendSms()[/b]
use alisms\SendSms;
class Index extends Base
{
public function index()
{
//獲取物件,如果上面沒有引入名稱空間,可以這樣例項化:$sms = new \alisms\SendSms()
$sms = new SendSms();
//設定關鍵的四個配置引數,其實配置引數應該寫在公共或者模組下的config配置檔案中,然後在獲取使用,這裡我就直接使用了。
$sms->accessKeyId = '××××××××';
$sms->accessKeySecret = '×××××××××';
$sms->signName = '浪博電子';
$sms->templateCode = 'SMS_×××××××';
//$mobile為手機號
$mobile = '×××××××';
//模板引數,自定義了隨機數,你可以在這裡儲存在快取或者cookie等設定有效期以便邏輯傳送後用戶使用後的邏輯處理
$code = mt_rand();
$templateParam = array("code"=>$code);
$m = $sms->send($mobile,$templateParam);
//類中有說明,預設返回的陣列格式,如果需要json,在自行修改類,或者在這裡將$m轉換後在輸出
dump($m);
}
}
至此結束,至於傳送後使用的業務邏輯,就要結合你自己實際的業務場景了。
花了兩個多小時邊琢磨,邊寫下來分享給大家,還請大家點贊支援!
---------------------
作者:myarche
來源:CSDN
原文:https://blog.csdn.net/myarche/article/details/78528625
版權宣告:本文為博主原創文章,轉載請附上博文連結!