guolei19850528 / laravel-sms
这是一个基于 Laravel 框架的短信服务扩展,用于集成微网通联短信服务。
v1.0
2026-02-05 03:48 UTC
Requires
- php: 8.*
- guzzlehttp/guzzle: ^7.0
- illuminate/support: 7.*||8.*||9.*||10.*||11.*||12.*
This package is auto-updated.
Last update: 2026-02-05 03:51:09 UTC
README
项目简介
Laravel SMS 是一个基于 Laravel 框架的短信服务扩展,用于集成微网通联(51welink)短信服务。该扩展提供了简洁的 API 接口,方便开发者在 Laravel 项目中快速实现短信发送功能。
主要功能
- 与微网通联短信服务 API 进行交互
- 发送短信到单个或多个手机号码
- 支持多应用配置,可同时连接多个短信服务实例
- 自动生成和验证 API 请求签名
- 提供简洁的 API 调用方式
- 配置灵活,支持通过 .env 文件管理敏感信息
技术栈
- PHP 8.x
- Laravel 7.x ~ 12.x
- GuzzleHttp
- SHA256 签名算法
安装方法
1. 安装依赖
通过 Composer 安装扩展:
composer require guolei19850528/laravel-sms
2. 发布配置文件
安装完成后,使用以下命令发布配置文件:
php artisan vendor:publish --provider="Guolei19850528\Laravel\Sms\ExtensionServiceProvider"
发布后,配置文件将保存在 config/sms.php 中。
配置说明
1. 基础配置
打开 config/sms.php 文件,根据实际情况配置微网通联短信服务的相关参数:
return [
'lmobile' => [
'default' => [
'productId' => env('LMOBILE_PRODUCT_ID', 'your product id'),
'accountId' => env('LMOBILE_ACCOUNT_ID', 'your account id'),
'password' => env('LMOBILE_PASSWORD', 'your password'),
'smmsEncryptKey' => 'SMmsEncryptKey',
'baseUrl' => 'https://api.51welink.com/',
],
],
];
2. 环境变量配置
建议在 .env 文件中配置敏感信息:
LMOBILE_PRODUCT_ID=your-product-id
LMOBILE_ACCOUNT_ID=your-account-id
LMOBILE_PASSWORD=your-password
3. 多应用配置
扩展支持配置多个短信服务应用实例,每个实例可以有独立的参数:
return [
'lmobile' => [
'default' => [
'productId' => env('LMOBILE_PRODUCT_ID', ''),
'accountId' => env('LMOBILE_ACCOUNT_ID', ''),
'password' => env('LMOBILE_PASSWORD', ''),
'smmsEncryptKey' => 'SMmsEncryptKey',
'baseUrl' => 'https://api.51welink.com/',
],
'marketing' => [
'productId' => env('LMOBILE_MARKETING_PRODUCT_ID', ''),
'accountId' => env('LMOBILE_MARKETING_ACCOUNT_ID', ''),
'password' => env('LMOBILE_MARKETING_PASSWORD', ''),
'smmsEncryptKey' => 'SMmsEncryptKey',
'baseUrl' => 'https://api.51welink.com/',
],
],
];
使用示例
1. 基本使用
use Guolei19850528\Laravel\Sms\Lmobile\Message;
// 从配置创建短信服务实例
$config = config('sms.lmobile.default');
$message = new Message(
accountId: $config['accountId'],
password: $config['password'],
productId: $config['productId'],
smmsEncryptKey: $config['smmsEncryptKey'],
baseUrl: $config['baseUrl']
);
// 发送短信到单个手机号
try {
$result = $message->sendSms(
phoneNos: '13800138000',
content: '【微网通联】您的验证码是123456,5分钟内有效。'
);
if ($result) {
echo '短信发送成功!';
} else {
echo '短信发送失败!';
}
} catch (\Exception $e) {
echo '发送过程中发生错误:' . $e->getMessage();
}
2. 发送短信到多个手机号
use Guolei19850528\Laravel\Sms\Lmobile\Message;
// 从配置创建短信服务实例
$config = config('sms.lmobile.default');
$message = new Message(
accountId: $config['accountId'],
password: $config['password'],
productId: $config['productId']
);
// 发送短信到多个手机号
try {
$result = $message->sendSms(
phoneNos: ['13800138000', '13900139000', '13700137000'],
content: '【微网通联】尊敬的用户,您的账户已充值成功!'
);
if ($result) {
echo '短信发送成功!';
} else {
echo '短信发送失败!';
}
} catch (\Exception $e) {
echo '发送过程中发生错误:' . $e->getMessage();
}
3. 在控制器中使用
use App\Http\Controllers\Controller;
use Guolei19850528\Laravel\Sms\Lmobile\Message;
class SmsController extends Controller
{
/**
* 发送验证码短信
*/
public function sendVerificationCode()
{
// 从配置创建短信服务实例
$config = config('sms.lmobile.default');
$message = new Message(
accountId: $config['accountId'],
password: $config['password'],
productId: $config['productId'],
smmsEncryptKey: $config['smmsEncryptKey'],
baseUrl: $config['baseUrl']
);
// 生成验证码
$verificationCode = rand(100000, 999999);
// 保存验证码到缓存(示例代码)
cache()->put('verification_code_' . request('phone'), $verificationCode, 300);
// 发送短信
try {
$result = $message->sendSms(
phoneNos: request('phone'),
content: "【微网通联】您的验证码是{$verificationCode},5分钟内有效。"
);
return response()->json([
'status' => $result ? 'success' : 'error',
'message' => $result ? '验证码发送成功' : '验证码发送失败'
]);
} catch (\Exception $e) {
return response()->json([
'status' => 'error',
'message' => '发送失败: ' . $e->getMessage()
], 500);
}
}
}
API 文档
短信服务类
构造函数
public function __construct(
string $accountId,
string $password,
string|int $productId,
string $smmsEncryptKey = 'SMmsEncryptKey',
string $baseUrl = 'https://api.51welink.com/'
)
参数说明:
$accountId:微网通联账号ID$password:微网通联账号密码$productId:微网通联短信产品ID$smmsEncryptKey:短信加密密钥(默认:'SMmsEncryptKey')$baseUrl:API基础URL(默认:'https://api.51welink.com/')
发送短信
public function sendSms(
string|array|null $phoneNos = '',
string|null $content = '',
string|null $url = '/EncryptionSubmit/SendSms.ashx',
array|null $urlParameters = [],
array|null $options = [],
?\Closure $responseHandler = null,
array|null $validatorRules = ['Result' => 'required|string|in:succ']
): bool
参数说明:
$phoneNos:接收短信的手机号,支持单个手机号字符串或多个手机号数组$content:短信内容$url:API请求路径(默认:'/EncryptionSubmit/SendSms.ashx')$urlParameters:URL参数数组$options:HTTP请求选项$responseHandler:自定义响应处理函数$validatorRules:响应验证规则(默认验证Result字段为'succ')
返回值:
- 成功返回true,失败返回false
生成签名
public function signature(array $data = []): string
参数说明:
$data:请求参数数组
返回值:
- 生成的SHA256签名字符串
配置方法
// 获取/设置API基础URL
public function getBaseUrl(): string
public function setBaseUrl(string $baseUrl): static
// 获取/设置产品ID
public function getProductId(): int|string
public function setProductId(int|string $productId): static
// 获取/设置账号ID
public function getAccountId(): string
public function setAccountId(string $accountId): static
// 获取/设置账号密码
public function getPassword(): string
public function setPassword(string $password): static
// 获取/设置短信加密密钥
public function getSmmsEncryptKey(): string
public function setSmmsEncryptKey(string $smmsEncryptKey): static
注意事项
- 确保已正确配置微网通联短信服务的API参数
- 短信内容需要包含合法的签名(如【微网通联】)
- 发送短信前请确保账户余额充足
- 请遵守相关法律法规,不要发送垃圾短信
- 更多功能将在后续版本中逐步添加
开发说明
项目结构
laravel-sms/
├── config/
│ └── sms.php # 配置文件
├── src/
│ ├── Lmobile/
│ │ └── Message.php # 微网通联短信服务类
│ └── ExtensionServiceProvider.php # 服务提供者
├── vendor/
├── .gitignore
├── LICENSE
├── README.md
└── composer.json
核心类说明
Lmobile\Message:主要短信服务类,提供与微网通联短信服务交互的方法ExtensionServiceProvider:Laravel扩展服务提供者,用于注册扩展
版本历史
- v1.0.0 (2026-02-05)
- 初始版本
- 实现微网通联短信发送功能
- 支持多应用配置
- 提供基本的API交互能力
许可证
本扩展采用 MIT 许可证,详情请查看 LICENSE 文件。
联系方式
- 开发者:郭磊
- 邮箱:174000902@qq.com
- GitHub:https://github.com/guolei19850528/laravel-sms
贡献指南
欢迎提交 Issue 和 Pull Request 来帮助改进这个扩展!
更新日志
请查看 CHANGELOG.md 文件获取详细的更新日志。