guolei19850528/laravel-sms

这是一个基于 Laravel 框架的短信服务扩展,用于集成微网通联短信服务。

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

pkg:composer/guolei19850528/laravel-sms

v1.0 2026-02-05 03:48 UTC

This package is auto-updated.

Last update: 2026-02-05 03:51:09 UTC


README

License Laravel

项目简介

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

注意事项

  1. 确保已正确配置微网通联短信服务的API参数
  2. 短信内容需要包含合法的签名(如【微网通联】)
  3. 发送短信前请确保账户余额充足
  4. 请遵守相关法律法规,不要发送垃圾短信
  5. 更多功能将在后续版本中逐步添加

开发说明

项目结构

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 文件。

联系方式

贡献指南

欢迎提交 Issue 和 Pull Request 来帮助改进这个扩展!

更新日志

请查看 CHANGELOG.md 文件获取详细的更新日志。