guolei19850528/laravel-lmobile-toolkit

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

Maintainers

Package info

gitee.com/guolei19850528/laravel-lmobile-toolkit

pkg:composer/guolei19850528/laravel-lmobile-toolkit

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

v1.0.0 2026-08-21 01:49 UTC

This package is not auto-updated.

Last update: 2026-08-21 23:58:41 UTC


README

License Laravel PHP

基于 Laravel 框架的微网通联(51welink)短信服务扩展工具包,提供简洁的 API 完成短信发送。

项目简介

guolei19850528/laravel-lmobile-toolkit 是一个基于 Laravel 框架的短信服务扩展包,用于集成微网通联(51welink)短信服务。该扩展封装了与微网通联 API 的签名生成、HTTP 请求与响应处理逻辑,开发者只需少量配置即可在 Laravel 项目中快速实现短信发送能力。

主要功能

  • 与微网通联短信服务 API 进行交互
  • 发送短信到单个或多个手机号码(多号码自动逗号拼接)
  • 自动生成符合微网通联规范的 SHA256 请求签名
  • 默认基于 Result 字段校验业务结果,支持自定义响应处理闭包
  • 支持通过 Laravel 配置文件管理多套应用参数
  • 自动处理 BaseUrl 末尾斜杠,避免请求路径拼接异常

技术栈

  • PHP 8.x
  • Laravel 7.x ~ 13.x(illuminate/support
  • GuzzleHttp 7.x(Laravel Http Facade 底层依赖)
  • SHA256 签名算法

安装方法

1. 安装依赖

通过 Composer 安装扩展包:

composer require guolei19850528/laravel-lmobile-toolkit

2. 发布配置文件

安装完成后,使用以下命令发布配置文件:

php artisan vendor:publish --provider="Guolei19850528\Laravel\Lmobile\Toolkit\ExtensionServiceProvider"

发布后,配置文件将保存在 config/laravel-lmobile-toolkit.php 中。

配置说明

配置文件结构

发布后的配置文件 config/laravel-lmobile-toolkit.php 采用「应用名 → 应用参数」的扁平结构,便于按应用名区分不同业务场景的短信通道:

return [
    // 应用名称,可根据实际项目需求自定义
    '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/',
    ],
];

配置项说明

配置项说明默认值
productId微网通联短信产品 ID-
accountId微网通联账号 ID-
password微网通联账号密码-
smmsEncryptKey短信加密密钥,用于密码加签SMmsEncryptKey
baseUrl微网通联 API 基础 URLhttps://api.51welink.com/

环境变量配置

建议在 .env 文件中配置敏感信息,避免将账号密码硬编码到代码仓库:

LMOBILE_PRODUCT_ID=your-product-id
LMOBILE_ACCOUNT_ID=your-account-id
LMOBILE_PASSWORD=your-password

多应用配置

扩展支持配置多个短信服务应用实例,每个实例拥有独立的参数:

return [
    '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\Lmobile\Toolkit\Client;

// 从配置读取参数并创建客户端实例
$config = config('laravel-lmobile-toolkit.default');

$client = new Client(
    accountId: $config['accountId'],
    password: $config['password'],
    productId: $config['productId'],
    smmsEncryptKey: $config['smmsEncryptKey'] ?? 'SMmsEncryptKey',
    baseUrl: $config['baseUrl'] ?? 'https://api.51welink.com/',
);

// 发送短信到单个手机号
$result = $client->sendSms(
    phoneNos: '13800138000',
    content: '【微网通联】您的验证码是123456,5分钟内有效。'
);

if ($result) {
    echo '短信发送成功!';
} else {
    echo '短信发送失败!';
}

2. 发送短信到多个手机号

use Guolei19850528\Laravel\Lmobile\Toolkit\Client;

$config = config('laravel-lmobile-toolkit.default');
$client = new Client(
    accountId: $config['accountId'],
    password: $config['password'],
    productId: $config['productId'],
);

// 发送短信到多个手机号(数组会被自动拼接为逗号分隔的字符串)
$result = $client->sendSms(
    phoneNos: ['13800138000', '13900139000', '13700137000'],
    content: '【微网通联】尊敬的用户,您的账户已充值成功!'
);

3. 在控制器中使用

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Guolei19850528\Laravel\Lmobile\Toolkit\Client;
use Illuminate\Http\JsonResponse;

class SmsController extends Controller
{
    /**
     * 发送验证码短信
     */
    public function sendVerificationCode(): JsonResponse
    {
        $config = config('laravel-lmobile-toolkit.default');
        $client = new Client(
            accountId: $config['accountId'],
            password: $config['password'],
            productId: $config['productId'],
            smmsEncryptKey: $config['smmsEncryptKey'] ?? 'SMmsEncryptKey',
            baseUrl: $config['baseUrl'] ?? 'https://api.51welink.com/',
        );

        // 生成 6 位验证码并写入缓存(示例代码)
        $verificationCode = random_int(100000, 999999);
        cache()->put('verification_code_' . request('phone'), $verificationCode, 300);

        // 发送短信
        $result = $client->sendSms(
            phoneNos: request('phone'),
            content: "【微网通联】您的验证码是{$verificationCode},5分钟内有效。"
        );

        return response()->json([
            'status' => $result ? 'success' : 'error',
            'message' => $result ? '验证码发送成功' : '验证码发送失败',
        ], $result ? 200 : 500);
    }
}

4. 自定义响应处理

如需在调用后获取原始响应或自定义业务判定逻辑,可传入 responseHandler 闭包:

use Illuminate\Http\Client\Response;

$result = $client->sendSms(
    phoneNos: '13800138000',
    content: '【微网通联】测试短信',
    responseHandler: function (Response $response): array {
        // 自定义处理:返回原始 JSON 数据供后续业务判断
        return $response->json();
    },
);

API 文档

客户端类 Client

构造函数

public function __construct(
    ?string $accountId = '',
    ?string $password = '',
    ?string $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|Collection|null $phoneNos = '',
    ?string $content = '',
    ?string $url = '/EncryptionSubmit/SendSms.ashx',
    ?array $urlParameters = [],
    ?array $options = [],
    ?\Closure $responseHandler = null,
    ?array $validatorRules = ['Result' => 'required|string|in:succ']
): mixed

参数说明:

  • $phoneNos:接收手机号,支持字符串、数组或 Collection,多号码会被自动逗号拼接
  • $content:短信内容
  • $url:API 请求路径(默认:/EncryptionSubmit/SendSms.ashx
  • $urlParameters:URL 查询参数数组
  • $options:Guzzle HTTP 请求选项
  • $responseHandler:自定义响应处理闭包,接收 Illuminate\Http\Client\Response 实例
  • $validatorRules:响应校验规则,默认校验 Result 字段为 succ

返回值:

  • 默认:校验通过返回 true,否则返回 false
  • 传入 $responseHandler 时:返回闭包处理结果

生成签名

public function signature(array $data = []): string

参数说明:

  • $data:请求参数数组,应包含 AccountIdPhoneNosRandomTimestamp

返回值:

  • 生成的 SHA256 签名字符串

签名规则:

  1. AccountId、首个 PhoneNosRandomTimestamp
  2. 密码使用 md5(password + smmsEncryptKey) 并转大写
  3. 将上述参数按字段名组装为 URL 查询字符串
  4. 对查询字符串做 SHA256 计算,得到最终签名

Getter / Setter

// 账号 ID
public function getAccountId(): string
public function setAccountId(?string $accountId): self

// 账号密码
public function getPassword(): string
public function setPassword(?string $password): self

// 产品 ID
public function getProductId(): string
public function setProductId(?string $productId): self

// 短信加密密钥
public function getSmmsEncryptKey(): string
public function setSmmsEncryptKey(?string $smmsEncryptKey): self

// API 基础 URL(getter 会自动去除末尾斜杠)
public function getBaseUrl(): string
public function setBaseUrl(?string $baseUrl): self

所有 setter 均返回 self,支持链式调用。

注意事项

  1. 请确保已在微网通联短信服务平台开通服务并获取到 accountIdpasswordproductId 等参数。
  2. 短信内容需包含合法的签名(如 【微网通联】),否则会被服务商拒绝。
  3. 发送短信前请确保账户余额充足。
  4. 敏感信息请通过 .env 环境变量管理,避免提交到代码仓库。
  5. 本扩展默认依赖 Laravel 的 Http Facade,请确保项目未禁用该 Facade。
  6. 请遵守相关法律法规,不要发送垃圾短信。

开发说明

项目结构

laravel-lmobile-toolkit/
├── config/
│   └── laravel-lmobile-toolkit.php  # 配置文件
├── src/
│   ├── Client.php                   # 短信服务客户端(对外入口类)
│   ├── HasSms.php                   # 短信发送能力 Trait(签名/发送/响应处理)
│   └── ExtensionServiceProvider.php # Laravel 服务提供者,用于发布配置
├── .gitignore
├── LICENSE
├── README.md
└── composer.json

核心类说明

  • Guolei19850528\Laravel\Lmobile\Toolkit\Client:对外客户端入口类,通过构造函数注入参数,组合 HasSms Trait 暴露完整能力。
  • Guolei19850528\Laravel\Lmobile\Toolkit\HasSms:短信发送能力 Trait,封装签名生成、请求构建、HTTP 发送与响应校验逻辑,可在其他类中复用。
  • Guolei19850528\Laravel\Lmobile\Toolkit\ExtensionServiceProvider:Laravel 扩展服务提供者,用于通过 vendor:publish 发布配置文件。

版本历史

  • v1.0.0(2026-02-05)
    • 初始版本
    • 实现微网通联短信发送功能
    • 支持多应用配置
    • 提供基本的 API 交互能力

许可证

本扩展采用 MIT 许可证,详情请查看 LICENSE 文件。

联系方式

  • 开发者:guolei
  • 邮箱:174000902@qq.com

贡献指南

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