sdmingma / tp8-sms
ThinkPHP 8.0 SMS SDK - 支持阿里云、腾讯云等多平台短信验证码发送
v1.1.0
2026-02-01 16:04 UTC
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- topthink/framework: ^6.0 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.0
Suggests
- alibabacloud/dysmsapi-20170525: Required to use Aliyun SMS (^2.0)
- tencentcloud/tencentcloud-sdk-php: Required to use Tencent Cloud SMS (^3.0)
README
一个极简、高性能且深度适配 ThinkPHP 的短信验证码 SDK。支持阿里云、腾讯云等多平台,针对高版本 PHP 及国内开发环境进行了深度优化。
✨ 特性
- 多平台支持:预置阿里云、腾讯云驱动,支持自定义扩展。
- 全版本兼容:兼容 PHP 7.4 - PHP 8.5 以及 ThinkPHP 6.0 / 8.0+。
- 极致轻量:核心包不捆绑任何云厂商 SDK,按需安装,秒级部署。
- 原生直连:腾讯云驱动采用原生 cURL + 手动签名实现,彻底解决本地开发环境 Guzzle 代理劫持导致的
Connection refused报错。 - 现代 PHP 支持:完美适配 PHP 8.5,解决了
setAccessible和curl_close等废弃警告。 - 配置原生:完美集成 ThinkPHP 服务容器与助手函数。
📦 安装
通过 Composer 安装核心包:
composer require sdmingma/tp8-sms
按需安装驱动
根据您使用的平台,安装对应的官方 SDK:
- 阿里云:
composer require alibabacloud/dysmsapi-20170525 - 腾讯云:已内置原生 cURL 实现,无需安装官方 SDK 即可使用,更加轻量!
⚙️ 配置
1. 发布配置文件
在项目根目录下执行:
php think vendor:publish
这将在 config 目录下生成 sms.php 配置文件。
2. 配置环境变量 (.env)
为了确保最佳兼容性,请使用大写下划线格式配置。
⚠️ 重要提示:由于 ThinkPHP 的
.env解析限制,请务必将短信配置放在[WECHAT]等其他分组标签之前,且注释中不要包含括号()。
# --- 短信配置 - 全局配置 ---
SMS_DRIVER=tencent
# 腾讯云配置
SMS_TENCENT_SECRET_ID=您的SecretId
SMS_TENCENT_SECRET_KEY=您的SecretKey
SMS_TENCENT_SDK_APP_ID=您的SdkAppId
SMS_TENCENT_SIGN_NAME=您的短信签名
SMS_TENCENT_CODE_TEMPLATE=您的模板ID
# 阿里云配置
# SMS_ALIYUN_ACCESS_KEY_ID=
# SMS_ALIYUN_ACCESS_KEY_SECRET=
# SMS_ALIYUN_SIGN_NAME=
# SMS_ALIYUN_CODE_TEMPLATE=
🚀 使用方法
基础调用
使用助手函数 sms() 快速发送验证码:
// 发送验证码(使用默认驱动)
$result = sms()->sendCode('13800138000', '123456');
if ($result['success']) {
// 发送成功,返回流水号:$result['data']['serial_no']
}
切换驱动
// 临时切换到阿里云发送
sms()->driver('aliyun')->sendCode('13800138000', '123456');
发送通知短信
// 腾讯云 - 模板参数使用索引数组
sms()->send('13800138000', '模板ID', ['参数1', '参数2']);
// 阿里云 - 模板参数使用关联数组
sms()->send('13800138000', '模板ID', ['code' => '1234', 'name' => '张三']);
🛠 错误处理
SDK 会在遇到错误时抛出 ThinkSms\Exceptions\SmsException。
use ThinkSms\Exceptions\SmsException;
try {
sms()->sendCode('13800138000', '123456');
} catch (SmsException $e) {
// 错误信息
echo $e->getMessage();
// 详细错误数据(如平台返回的错误码)
print_r($e->getData());
}
🔄 扩展驱动
您可以轻松添加自己的驱动(如华为云、七牛云等):
- 创建驱动类继承
ThinkSms\Contracts\AbstractDriver。 - 实现
send()和sendCode()方法。 - 在应用初始化处调用
sms()->extend('custom', \app\sms\MyDriver::class)。
开源协议
MIT License