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
Requires
- tencentcloud/sms: ^3.0
- tinywan/captcha: ^0.0.4
README
sunsgne/webman-sms-register
🐬 Webman configuration system covering global SMS registration verification codes 🐬
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()