sunsgne/webman-sms-register

This package is abandoned and no longer maintained. The author suggests using the sunsgne/webman-sms-send package instead.

Webman plugin sunsgne/webman-sms-register

0.1.2 2023-11-15 05:07 UTC

This package is auto-updated.

Last update: 2023-11-16 08:23:39 UTC


README

sunsgne

sunsgne/webman-sms-register

🐬 Webman configuration system covering global SMS registration verification codes 🐬

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require

Webman SMS Register

功能特性

  • 简单快速的API,各模块可配置切支持扩展的引入
  • 内置图形验证码,支持数字/字母/数学公式等验证方式
  • 集成短信SMS发送请求,支持多种语言,多个国家/地区,多种发送场景等
  • 独立可移植的数据系统,记录表定时按月分表
  • 完备短信模板管理,语言配置等后台管理API和面板

环境

  • PHP >= 8.1.0
  • workerman/webman-framework:"^1.4.3"
  • illuminate/database
  • illuminate/redis

开始

安装/引入

composer require sunsgne/webman-sms-register

初始化数据表

⚠️:请务必使用illuminate/database也就是laravel的数据库orm, 可参照webman官方文档;

./webman wsr-init-table
or 
php webman wsr-init-table

为国家/地区导入初始数据

./webman sync-country-data
or 
php webman sync-country-data

配置SMS云短信

以下是Tencent的短信参数示例

return [
    # 腾讯云-短信发送配置
    'tencent' => [
        'secretId'  => 'AKIDNaXEeoiLhma7NM4WhaDZeutb3E8l9G6e',
        'secretKey' => 'JL6anlSs1tUorMaXDcldEYbNt86nDMEq',
        'sdkAppId'  => '1400696413',
        'signName'  => 'BeiWorld',  //默认的短信签名
        'region'    => 'ap-guangzhou' // 默认的发送区域
    ]
];

文件位置:/config/plugin/sunsgne/webman-sms-register/sms.php

配置默认短信发送

return [
    'enable' => true,
    'sms' => [
        # 短信验证码的长度
        'length' => 4,
        # 根据以下字符生成验证码
        'rule' => '0123456789',
        # 是否使用默认模板
        'useDefaultTemp' => true,
        # 默认的发送模板ID
        'defaultTempId' => 1534804
    ]
];

SQL 相关表结构

  • country_code (国际手机区域码配置表)
  CREATE TABLE `country_mobile` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `country_name_zh` varchar(255) NOT NULL COMMENT '国家中文名称(中国)',
  `country_name` json DEFAULT NULL COMMENT '国家名称;{"zh":"中国","en":"CHINA"}',
  `country_code` varchar(255) NOT NULL COMMENT '国家代号',
  `country_mobile_code` int NOT NULL COMMENT '国家/地区手机码',
  `regex` varchar(255) DEFAULT NULL COMMENT '手机号规则(正则表达式)',
  `national_flag` varchar(255) DEFAULT NULL COMMENT '国旗标识',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(0:异常;1:正常;默认1)',
  `create_time` int DEFAULT NULL COMMENT '创建时间',
  `update_time` int DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `country_code_index` (`country_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=191 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='国际手机区域码配置表';
  • sms_template (短信模板配置表)
CREATE TABLE `sms_template` (
  `id` int NOT NULL AUTO_INCREMENT,
  `country_mobile_id` int NOT NULL COMMENT '关联country_mobile表中主键ID',
  `sms_service` varchar(255) NOT NULL COMMENT '短信服务商(tencent/alibaba)',
  `template_name` varchar(255) DEFAULT NULL COMMENT '短信模板名称',
  `template_id` int NOT NULL COMMENT '短信模板ID',
  `sms_type` varchar(255) DEFAULT NULL COMMENT '短信应用场景(register:注册;....)',
  `country_mobile_code` varchar(32) NOT NULL COMMENT '国家/地区手机码',
  `language` varchar(32) DEFAULT NULL COMMENT '短信语言(中文、英文)示例值:zh',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(0:异常;1:正常;默认1)',
  `sms_content` varchar(255) DEFAULT NULL COMMENT '短信内容(验证码{1},仅用于绑定手机,请勿告知他人,如有疑问请联系客服。)',
  `sms_sign` varchar(255) DEFAULT NULL COMMENT '短信签名(bei)',
  `app_package_name` varchar(128) DEFAULT NULL COMMENT '应用包名',
  `sms_expired_time` int DEFAULT NULL COMMENT '短信过期时长(单位:秒)',
  `create_time` int DEFAULT NULL COMMENT '创建时间',
  `update_time` int DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `c_s_t_index` (`country_mobile_id`,`sms_service`,`template_id`) USING BTREE,
  KEY `s_c_l_a_index` (`sms_type`,`country_mobile_code`,`language`,`app_package_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='国家/地区短信类型模板配置表';
  • mobile_users (手机号用户表)
CREATE TABLE `mobile_users` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int unsigned NOT NULL COMMENT '用户ID(与业务关联的唯一ID)',
  `country_mobile_code` int NOT NULL COMMENT '国家/地区手机区域码(86)',
  `mobile` varchar(64) NOT NULL COMMENT '手机号码(可加密)',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(0:异常;1:正常;默认1)',
  `create_time` int DEFAULT NULL COMMENT '创建时间',
  `update_time` int DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_id_index` (`user_id`) USING BTREE COMMENT '用户唯一ID',
  KEY `mobile_index` (`mobile`) USING BTREE COMMENT '手机号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='手机号用户表(webman-sms-register)';
  • mobile_user_login_log (手机号用户登录注册记录表,按月分表)
CREATE TABLE `mobile_user_login_log_202311` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int NOT NULL COMMENT '用户ID',
  `mobile` int NOT NULL,
  `country_mobile_code` int DEFAULT NULL,
  `scenes` varchar(32) NOT NULL COMMENT '类型(register:注册;login:登录)',
  `create_time` int DEFAULT NULL COMMENT '创建时间',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(1:正常;0:异常;默认1)',
  PRIMARY KEY (`id`),
  KEY `m_c_s_index` (`mobile`,`country_mobile_code`,`scenes`) USING BTREE,
  KEY `user_id_index` (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  • sms_send_log (sms短信发送记录表,按月分表)
CREATE TABLE `sms_send_log_202311` (
  `id` int NOT NULL AUTO_INCREMENT,
  `country_mobile_code` int NOT NULL,
  `mobile` varchar(32) NOT NULL,
  `scenes` varchar(64) DEFAULT NULL COMMENT '发送场景(register:注册....由客户端自定义)',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(1:正常;0:异常)',
  `sms_service` varchar(64) DEFAULT NULL COMMENT '短信发送服务方',
  `sms_response` json DEFAULT NULL COMMENT '发送请求之后的响应',
  `create_time` int DEFAULT NULL COMMENT '创建时间',
  `update_time` int DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `c_m_s_index` (`country_mobile_code`,`mobile`,`scenes`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

图片验证码

短信服务(SMS)

  • 腾讯
  • 阿里

API

国家/地区区域码列表

use Sunsgne\WebmanSmsRegister\App;
App::GetCountryCodeList()

发送手机验证码

use Sunsgne\WebmanSmsRegister\App;
        try {
            App::SendSmsCodeByTencent(
                language: 'zh', // 模板语言
                countryCode: 86,  // 国家地区编码
                mobileNum: 13012345678,  // 手机号码
                appPkgName: 'app.baidu.com',  // 应用包名
                scenes: 'register'  // 发送应用场景
            );
        } catch (RedisException|SmsAppException $e) {
            
        }

验证手机短信验证码

use Sunsgne\WebmanSmsRegister\App;
try {
    App::VerifyMobileCode(
        countryCode: 86,  // 国家地区编码
        mobileNum: 13012345678, 手机号码
        scenes: 'register', //发送场景
        vCode: '2154' // 验证码
    );
} catch (RedisException|SmsAppException $e) {
    //验证失败
}

图片验证码

use Sunsgne\WebmanSmsRegister\App;
App::GetBase64Captcha()

图片验证码验证

use Sunsgne\WebmanSmsRegister\App;
App::VerifyCaptchaCode()

发送手机验证码

use Sunsgne\WebmanSmsRegister\App;
App::SendSmsCodeByTencent()

写入用户数据(建议异步调用)

use Sunsgne\WebmanSmsRegister\App;
App::saveMobileUsers()