zfegg/sms-sender

SMS sender service. And use for send sms captcha handler / 短信发送模块, 并且用于发送短信验证码处理程序

2.1.0 2022-10-22 04:03 UTC

This package is auto-updated.

Last update: 2024-04-22 07:19:46 UTC


README

GitHub Actions: Run tests Coverage Status Coverage Status Latest Stable Version Total Downloads License PHP Version Require

抽象常用短信业务:

  1. 实现短信的限制发送(60s 内限制发送1次,1天上限发送10次)
  2. 短信验证码生成与验证功能

Installation / 安装

使用 Composer 安装

$ composer require zfegg/sms-sender

Interfaces / 接口说明

  • Zfegg/SmsSender/Provider/ProviderInterface 短信供应商实现接口

Usage / 使用

基本使用示例代码:

示例代码

在 Expressive 中使用:

config/application.php 中添加模块加载.

return array(
    'modules' => array(
        //... Your modules
        'Zfegg/SmsSender'
    ),
);

添加短信发送配置 module.config.php

return [
    'dependencies' => [
        'factories' => [
            ProviderInterface::class => YourSmsProviderFactory::class,
        ],
    ]
    'zfegg' => [
        LimitSender::class => [
            'provider' => ProviderInterface::class, // 设置短信商服务名. (可选), 默认 `ProviderInterface::class`
            'cache' => CacheInterface::class, // 设置缓存服务名 (可选), 默认 `CacheInterface::class`
            'day_send_times' => 10, // 设置每天发送次数上限 (可选), 默认10
            'waiting_time' => 60, //设置每次发送等待时长 (可选), 默认60s
        ],
        PostSmsCaptchaHandler::class  => [
            'types' => [
               'register' => 'Register captcha code: {code}',
               'login' => 'Login captcha code: {code}',
            ]
        ],
    ]
];

控制器使用:

//发送验证码
$app->post('/api/send-sms-captcha', PostSmsCaptchaHandler::class);

//业务验证码验证
$app->post('/register', [
  function ($req, $handler) {
  
    //配置验证器
    $inputFilter = (new \Laminas\InputFilter\Factory)->create([
        [
            'name' => 'captcha',
            'validators' => [
                [
                    'name' => SmsCode::class,
                    'options' => [
                        'inputName' => 'phone',
                    ]
                ]
            ]
        ],
        [
            'name' => 'phone',
            'validators' => [
                [
                    'name' => 'PhoneNumber',
                ]
            ]
        ],
    ])
  
    if (! $inputFilter->isValid()) {
        //验证失败响应
        return new JsonResponse(['messages' => $inputFilter->getMessages()], 403);
    }

    //验证成功继续注册
    return $handler->handle($req);
  },
  YourRegisterHandler::class,
])