





























根据你的需求,我设计了一套符合 接口规范 + 工厂模式 的短信发送方案,统一方法名和返回格式,支持动态切换腾讯云 / 阿里云接口,结构清晰且易于扩展。
app/
├── common/
│ └── lib/
│ ├── sms/
│ │ ├── contract/ # 接口契约
│ │ │ └── SmsInterface.php # 短信接口规范
│ │ ├── dto/ # 数据传输对象(统一返回格式)
│ │ │ └── SmsResult.php # 短信返回结构体
│ │ ├── impl/ # 第三方实现
│ │ │ ├── AliyunSms.php # 阿里云短信实现
│ │ │ └── TencentSms.php # 腾讯云短信实现
│ │ └── SmsFactory.php # 短信工厂类
├── config/
│ └── sms.php # 短信配置文件
└── controller/
└── TestController.php # 测试控制器

app/common/lib/sms/contract/SmsInterface.php
<?php
namespace app\common\lib\sms\contract;
use app\common\lib\sms\dto\SmsResult;
app/common/lib/sms/dto/SmsResult.php
<?php
namespace app\common\lib\sms\dto;
app/common/lib/sms/impl/AliyunSms.php
<?php
namespace app\common\lib\sms\impl;
use app\common\lib\sms\contract\SmsInterface;
use app\common\lib\sms\dto\SmsResult;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Dyplsapi\Dyplsapi;
use think\facade\Config;
class AliyunSms implements SmsInterface
{
app/common/lib/sms/impl/TencentSms.php
<?php
namespace app\common\lib\sms\impl;
use app\common\lib\sms\contract\SmsInterface;
use app\common\lib\sms\dto\SmsResult;
use Qcloud\Sms\SmsSingleSender;
use think\facade\Config;
class TencentSms implements SmsInterface
{
app/common/lib/sms/SmsFactory.php
<?php
namespace app\common\lib\sms;
use app\common\lib\sms\contract\SmsInterface;
use think\facade\Config;
use InvalidArgumentException;
class SmsFactory
{
config/sms.php
<?php
return [
// 默认短信驱动(aliyun/tencent)
'default' => env('SMS_DEFAULT', 'aliyun'),
# 短信配置
SMS_DEFAULT=aliyun # 默认驱动
# 阿里云短信
ALIYUN_SMS_ACCESS_KEY_ID=your_access_key_id
ALIYUN_SMS_ACCESS_KEY_SECRET=your_access_key_secret
ALIYUN_SMS_SIGN_NAME=你的短信签名
# 腾讯云短信
TENCENT_SMS_APP_ID=your_app_id
TENCENT_SMS_APP_KEY=your_app_key
TENCENT_SMS_SIGN_NAME=你的短信签名
app/controller/TestController.php
<?php
namespace app\controller;
use app\common\lib\sms\SmsFactory;
use app\common\lib\sms\dto\SmsResult;
use think\facade\Log;
use think\response\Json;
class TestController
{
需要安装对应第三方 SDK:
# 阿里云SDK
composer require alibabacloud/dyplsapi-20170525
# 腾讯云SDK
composer require qcloudsms/qcloudsms_php
SmsInterface,确保方法名(send)和参数格式统一SmsResult DTO 类,规范返回结构(类似 Go 的 struct),上层无需关心第三方差异SmsFactory::make() 可快速切换驱动,无需修改业务代码SmsInterfacedriverMap 中添加映射app_debug=false),避免泄露原始响应数据SmsInterface(如添加批量发送、短信回执查询等方法)此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。