> 本文記錄在ThinkPHP6.0中使用阿里云短信驗(yàn)證碼,該封裝類不僅僅局限于TP,拿來(lái)即用 **使用該類之前必須引入 `flc/dysms` 擴(kuò)展,該封裝類就是基于這個(gè)擴(kuò)展寫(xiě)的** ``` composer require flc/dysms ``` ```php <?php // 本文件放入TP6.0的extend目錄下 extend/Dysms.php use Flc\Dysms\Client; use Flc\Dysms\Request\SendSms; // 獲取類的實(shí)例 // function dysms() // { // return Dysms::getInstance(); // } // 使用示例 返回一個(gè)數(shù)組 // $arr['result'] true 發(fā)送成功 // $arr['result'] false 發(fā)送失敗 msg 錯(cuò)誤信息 // $arr = dysms()->sendSms(1503xxxxx);//參數(shù)是接收驗(yàn)證碼的手機(jī)號(hào) /** * 阿里大于短信驗(yàn)證碼封裝 * composer require flc/dysms * * 阿里云短信服務(wù)默認(rèn)流控 * 同一個(gè)簽名同一個(gè)手機(jī)號(hào)短信驗(yàn)證碼 1條/分鐘 */ class Dysms { private static $obj; private $config; private $signName; private $templateCode; /** * 私有化構(gòu)造方法 * 禁止類在外部被實(shí)例化 */ private function __construct() { // accessKey、accesssecret $this->config = [ 'accessKeyId' => 'LTAI4GJ6iaE7xxxxxxxxxxxx', 'accessKeySecret' => 'uljdxDoi8ocXNxxxxxxxxxx', ]; //短信簽名 $this->signName = 'xxxxxxxx'; //短信模板ID $this->templateCode = 'SMS_179xxxxxx'; } /** * 獲取類的實(shí)例 */ public static function getInstance() { if (self::$obj instanceof self) { return self::$obj; } else { self::$obj = new self; return self::$obj; } } /** * 傳入手機(jī)號(hào)發(fā)送短信 * @param $phoneNumbers 手機(jī)號(hào) */ public function sendSms($phoneNumbers) { $client = new Client($this->config); $sendSms = new SendSms; $sendSms->setPhoneNumbers($phoneNumbers); $sendSms->setSignName($this->signName); $sendSms->setTemplateCode($this->templateCode); $sendSms->setTemplateParam(['code' => rand(100000, 999999)]); $sendSms->setOutId('demo'); // 返回標(biāo)準(zhǔn)類對(duì)象 發(fā)送失敗 // object(stdClass)#59 (3) { // ["Message"]=> // string(30) "觸發(fā)小時(shí)級(jí)流控Permits:5" // ["RequestId"]=> // string(36) "B76061EE-2D9A-4E46-89B9-2418E8A5555E" // ["Code"]=> // string(26) "isv.BUSINESS_LIMIT_CONTROL" // } $result = $client->execute($sendSms); // 返回結(jié)果 // array(2) { // ["result"]=> // bool(true) // ["msg"]=> // string(12) "發(fā)送成功" // } // array(3) { // ["result"]=> // bool(false) // ["code"]=> // string(26) "isv.BUSINESS_LIMIT_CONTROL" // ["msg"]=> // string(30) "觸發(fā)小時(shí)級(jí)流控Permits:5" // } if ($result->Code === 'OK') { return ['result' => true, 'msg' => '發(fā)送成功']; } else { return ['result' => false, 'code' => $result->Code,'msg' => $result->Message]; } } /** * 私有化克隆方法 * 禁止類的實(shí)例在外部被克隆 */ private function __clone(){} } ``` #### 在 TP6.0 中的使用 --- **(1)在框架根目錄執(zhí)行以下命令,引入擴(kuò)展包** ``` composer require flc/dysms ``` **(2)將該類放入TP6.0的`extend`目錄下,也就是 `extend/Dysms.php`** ![](https://img.itqaq.com/art/content/8f1ebd10e0a9748f881804cf3040113b.png) **(3)將以下函數(shù)放入TP6.0的全局公共函數(shù)文件 `app/common.php`** ```php // 獲取類的實(shí)例 function dysms() { return Dysms::getInstance(); } ``` **(4)此時(shí)在控制器或模型中則可以使用以下方式直接使用** ```php // 使用示例 返回一個(gè)數(shù)組 // $arr['result'] true 發(fā)送成功 // $arr['result'] false 發(fā)送失敗 msg 錯(cuò)誤信息 $arr = dysms()->sendSms(150xxxx);//參數(shù)是接收驗(yàn)證碼的手機(jī)號(hào) ```