> 阿里云短信服務擴展封裝類
~~~
composer require flc/dysms
~~~
~~~
<?php
// 本文件放入TP6.0的extend目錄下 extend/Dysms.php
use Flc\Dysms\Client;
use Flc\Dysms\Request\SendSms;
// // 使用示例,返回數組
// Dysms::setConfig([
// 'signName' => 'it社區',
// 'templateCode' => 'SMS_1792xxxxx',
// 'accessKeyId' => 'LTAI4GJ6iaE7ij5YiGxxxxx',
// 'accessKeySecret' => 'uljdxDoi8ocXNscPriqwl5xxxxx',
// ]);
// // $arr['result'] true 發送成功
// // $arr['result'] false 發送失敗 msg 錯誤信息
// $arr = Dysms::sendSms(150378xxxx);
/**
* 阿里大于短信驗證碼封裝
* composer require flc/dysms
*
* @author liang <23426945@qq.com>
* @version 1.0.1
* @datetime 2020-07-20
* @homepage www.itqaq.com
*
* 阿里云短信服務默認流控
* 同一個簽名同一個手機號短信驗證碼 1條/分鐘
*/
class Dysms
{
private static $obj;
private static $config;
private static $signName;
private static $templateCode;
/**
* 私有化構造方法
* 禁止類在外部被實例化
*/
private function __construct(){}
/**
* 設定配置參數
*/
public static function setConfig($config)
{
// accessKey、accesssecret
self::$config = [
'accessKeyId' => $config['accessKeyId'],
'accessKeySecret' => $config['accessKeySecret'],
];
// 短信簽名
self::$signName = $config['signName'];
// 短信模板ID
self::$templateCode = $config['templateCode'];
}
/**
* 傳入手機號發送短信驗證碼
* @param int $phoneNumbers 手機號
* @return array ['result' => true, 'msg' => '發送成功', 'verCode' => 370449]
*/
public static function sendSms($phoneNumbers)
{
$client = new Client(self::$config);
$sendSms = new SendSms;
$verCode = mt_rand(100000, 999999);
$sendSms->setPhoneNumbers($phoneNumbers);
$sendSms->setSignName(self::$signName);
$sendSms->setTemplateCode(self::$templateCode);
$sendSms->setTemplateParam(['code' => $verCode]);
$sendSms->setOutId('demo');
// 返回標準類對象 發送失敗
// object(stdClass)#59 (3) {
// ["Message"]=>
// string(30) "觸發小時級流控Permits:5"
// ["RequestId"]=>
// string(36) "B76061EE-2D9A-4E46-89B9-2418E8A5555E"
// ["Code"]=>
// string(26) "isv.BUSINESS_LIMIT_CONTROL"
// }
$result = $client->execute($sendSms);
// 返回結果
// array(2) {
// ["result"]=>
// bool(true)
// ["msg"]=>
// string(12) "發送成功"
// }
// array(3) {
// ["result"]=>
// bool(false)
// ["code"]=>
// string(26) "isv.BUSINESS_LIMIT_CONTROL"
// ["msg"]=>
// string(30) "觸發小時級流控Permits:5"
// }
if ($result->Code === 'OK') {
return ['result' => true, 'msg' => '發送成功', 'verCode' => $verCode];
} else {
return ['result' => false, 'code' => $result->Code, 'msg' => self::errorMsg($result->Code, $result->Message)];
}
}
/**
* 錯誤信息code轉換中文提示
*/
private static function errorMsg($code, $msg)
{
$errorMsg = [
'isv.ACCOUNT_NOT_EXISTS' => '使用了錯誤的賬戶名稱或AK',
'isv.ACCOUNT_ABNORMAL' => '賬戶異常,請確認賬號信息',
'isv.MOBILE_NUMBER_ILLEGAL' => '手機號碼格式錯誤',
'isv.SMS_TEMPLATE_ILLEGAL' => '短信模板不存在,或未經審核通過',
'isv.SMS_SIGNATURE_ILLEGAL' => '短信簽名不存在,或未經審核通過',
'isv.BUSINESS_LIMIT_CONTROL' => '短信發送頻率超限',
'isv.AMOUNT_NOT_ENOUGH' => '當前賬戶余額不足,請及時充值',
'SignatureDoesNotMatch' => '簽名加密錯誤,請注意accessKeyId和accessKeySecret字符串賦值正確',
];
return $errorMsg[$code] ?? $msg;
}
/**
* 私有化克隆方法
* 禁止類的實例在外部被克隆
*/
private function __clone(){}
}
~~~
- 搭建ThinkPHP6的開發環境
- 配置ThinkPHP6
- 必要的基礎知識(basic)
- MVC開發模式
- 控制器(controller)
- 數據庫(database)
- 模型(model)
- 模型關聯(relation)
- 視圖(view)
- Session
- Cookie
- 緩存(cache)
- 上傳(upload)
- 驗證器(validate)
- 驗證碼(captcha)
- 命令行(command)
- 服務器部署(deploy)
- 數據備份(backup)
- 數據同步(synchronization)
- 訂閱服務(subscribe)
- PHP 易混淆知識點
- 助手函數
- MySQL規范
- Redis 規范
- office插件 phpoffice
- 拼音插件 pinyin
- 日期插件 datetime
- 消息插件 amqp
- 產品部署環境的搭建
- PDF 等雜項處理
- 文件上傳
- 常用擴展
- flc/dysms
- 使用示例 ①
- 使用示例 ②
- qiniu/php-sdk
- 簡介
- 使用示例
- 使用示例 2 ②
- liliuwei/thinkphp-jump
- 擴展介紹
- 下載擴展
- 使用方法
- topthink/think-captcha
- 安裝擴展
- 驗證碼顯示
- 更換驗證碼
- 驗證碼校驗
- 驗證碼配置
- 自定義驗證碼
- phpoffice/phpspreadsheet
- 數據寫入表格
- 讀取表格數據
- topthink/think-queue
- 安裝
- 自定義函數
- 任務類
- 帶有日志的任務類