文档章节

如何在 Laravel 中 “规范” 的开发验证码发送功能【社交系统ThinkSNS研发日记十一】

ThinkSNS账号
 ThinkSNS账号
发布于 2017/07/14 14:01
字数 1812
阅读 11
收藏 0
点赞 0
评论 0

顺便发个小通知:7月15日ThinkSNS+开源版发布,同时非开源的APP也走出内测阶段,体验二维码也全面发布体验。

什么是ThinkSNS ?

ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+)。

社交系统ThinkSNS团队拥有超过九年的移动互联网软件/网站/APP开发经验,涉及行业:粉丝社群、直播互动、移动医疗、电子商务、生活服务、在线教育、旅游出行、移动办公、电子杂志、休闲娱乐、企业信息等。

我们的服务包括

快速建站、提供技术及产品解决方案、技术支持维护、技术孵化服务,同时,我们也提供TS的二次开发服务以及网站开发、Android APP开发、iOS APP开发、H5开发、微信公众号开发、小程序开发等定制开发服务,更多TS问题请咨询QQ:3298713109。

需求场景

发送「验证码」或者「消息通知」,可发送到手机或邮箱中。

完成

首先,在 Laravel 中的规范就是使用 Laravel 的「消息通知」,这里基于场景为「验证码」。这个需求几乎所有软件系统都有使用到。

创建通知场景

第一步,使用 php artisan make:notification 创建一个通知类,创建成功后默认已经存在了三个方法 via、toMail 和 toArray ,因为是发送验证码,姑将这个控制类命名为 VerificationCode 。

然后创建一个验证码数据模型和数据表迁移,可以使用 php artisan make:model "VerificationCode" -m 直接快速创建数据模型和迁移。

ThinkSNS+的迁移如下:

输入图片说明

第二步,打开数据模型类,在里面添加 Illuminate\Notifications\Notifiable 性状: 输入图片说明

从代码里面,可以看到我们还添加了「软删除」,因为是基于手机号或者邮箱的验证码发送,所以不需要其他的内置花花肠子,也不需要记录到 「消息通知数据表」中,所以 routeNotificationFor 方法我们选择直接返回需要发送的账号(手机号或邮箱)。

加入工厂模式,快捷发送

打开 database/factories/ModelFactory.php 在里面添加一个关于通知数据模型的工厂定义:

输入图片说明

这样,我们就可以通过 factory(\Zhiyi\Plus\Models\VerificationCode::class) 工厂函数快捷的创建验证码并发送通知。

为什么在验证码数据模型增加通知性状?

首先 Illuminate\Notifications\Notifiable 这份性状,Laravel 默认添加到 User 模型中的,所以通过 $user->notify() 可以快速的给用户发送一个通知,但是在规范文档中有这么一句话:

Remember, you may use the Illuminate\Notifications\Notifiable trait on any of your models. You are not limited to only including it on your User model.

这是Laravel官方文档原话,意思就是Illuminate\Notifications\Notifiable不仅仅是用在 User 模型上。

所以我们在验证码模型中添加 Illuminate\Notifications\Notifiable 是完全符合Laravel通知的正确使用的。

开发通知类

首先,在数据表迁移中存在一个字段 channel 也就是通知频道标识,我们可根据这个值来决定用什么方式发送验证码,而这个操作在通知类的 via 中实现的:

输入图片说明

我们选择方式就是直接返回 channel 值,这个值可以是任何值,只要我们实现了这个通知频道,都可以发送,而Laravel已经内置和一些发送频道 database、mail 和 nexmo

完成邮件验证码发送

其实,这个步骤我们要做的事情已经很少了,生产通知类的时候,已经完成了 toMail 方法,所以,我们直接修改其消息内容即可。

完成短信验证码发送

短信发送我们采用 overtrue/easy-sms 包,这是安正超开发的一个短信发送客户端,已经内置了很多短信平台,实现也很优秀。(吐槽:虽然有些细节有问题,例如不按照契约调用方法传递网关)

首先依赖短信发送客户端包composer require overtrue/easy-sms然后新建配置 /config/sms.php ,内容嘛,就按照 easy-sms 首页的说明增加即可,先贴出我们的配置内容(为了减少文章字数,只保留阿里大于配置):

输入图片说明 输入图片说明

我门增加了一个 channel 配置,用于不同场景,例如验证码场景 code 以方便消息器读取配置。

然后打开 AppServiceProvider.php 在 register 中增加如下:

输入图片说明

至此 EasySms 在 Laravel 中的集成已经完成,但是还没有开发实际功能,我们接着往下看。

开发 sms 发送频道

为什么要开发?首先,easy-sms 支持的很多,可以考虑单独为每个发送平台开发一个通知发送频道类,也可以采用只开发一个 sms 发送频道类,我们选择开发一个sms通知发送类,通过 easy-sms 的策略机制去多平台发送验证码。

首先,新建一个 app/Notifications/Channels/SmsChannel.php 文件,因为 Laravel 没有提供生成函数,这个需要自己创建哟,只要实现 send 方法即可。 SmsChannel 内容如下:

输入图片说明

这样,基于 easy-sms 的短信通知发送频道就完成了。

开发场景发送消息

这部分完全属于 easy-sms 使用开发,我们新建一个 VerificationCodeMessage.php ,内容如下:

输入图片说明

然后回到 VerificationCode 验证码通知类中,增加 toSms 方法,代码如下:

输入图片说明

可以看到,在实例化验证码消息的时候传递了一个 config 进去,有什么用呢?其实在前面已经提到了:在配置文件中增加长场景配置,例如验证码不同频道的 template 等,这样消息器就可以根据发送网关来判断使用场景的配置是什么。

再次吐槽,easy-sms 的契约设计也应该是这个思想,但是 getContent/getTemplate/getData 在实际网关调用的时候根本没有传递网关过来。。。

好了我们的开发完成了。

发送验证码

在创建验证码数据模型的时候就已经添加到「工厂」中,所以我们可以直接使用 factory 函数了,发送演示:

输入图片说明

大功告成,easy-sms 是一个很不错的包哟。

上面代码都是来自于 ThinkSNS Plus ,看完整的开发代码可以看仓库:

GitHub: https://github.com/slimkit/thinksns-plus(开源不易,求 Star )

源码授权购买

现行稳定系统V4系列全端产品(PC/H5/APP),授权源码购买、产品体验,请致电:18108035545开源版源码官方正版获取唯一渠道:关注公众号“thinksns”,回复“开源版”即可获得最新源码压缩文件地址。

TS+安装部署:http://www.thinksns.com/reader/100.html

业务合作(授权购买、二次开发、技术孵化、定制开发、产品功能规划、技术支持、商务合作等都找她)

咨询电话:18108035545;028-82884828

市场合作邮箱:lihecong@zhishisoft.com

商务合作QQ:3298713109

© 著作权归作者所有

共有 人打赏支持
ThinkSNS账号
粉丝 1
博文 160
码字总数 193607
作品 0
东城
社交系统ThinkSNS Plus 后端1.7.6 与 1.8.0-rc.1更新播报

感谢大家一直以来对ThinkSNS的关注,社交系统ThinkSNS Plus系统一直在不断优化完善。ThinkSNS Plus 后端1.7.6 与 1.8.0-rc.1版 于2018年5月26日发布,后端具体更新详情如下: 社交系统Think...

ThinkSNS账号 ⋅ 05/30 ⋅ 0

如何快速搭建一个社交网站平台?

截至到2017年12月,我国的网民规模已经达到了7.72亿,而手机网民规模也达7.53亿,2017年网络社交娱乐类应用用户规模均保持了高速增长,同时电子商务、网络游戏、网络广告收入水平增速均在20%...

ThinkSNS账号 ⋅ 05/08 ⋅ 0

微信小程序的入口、核心逻辑及小程序与APP之间的博弈

  什么是微信小程序   内置于微信的云端应用程序,不需要安装、下载,用完即走。与微信订阅号、服务号和企业号属于同等级。小程序、订阅号、服务号、企业号行程了并行的微信生态四大体系...

ThinkSNS账号 ⋅ 05/14 ⋅ 0

移动时代下的短视频行业迎来快速发展期

近几年,网络视频直播发展速度非常迅猛发,随着网络视频直播行业的不断成熟,诸如短视频等细分业务也迅速崛起,2017年短视频市场规模达57.3亿,同比增长达183.9%,预计2020年短视频市场规模将...

ThinkSNS账号 ⋅ 06/11 ⋅ 0

2018年4月社群系统ThinkSNS Plus 后端更新播报

2018年4月社群系统ThinkSNS Plus 后端更新播报信息来源:http://www.thinksns.com/reader/184.html ThinkSNS Plus 最新稳定版 1.7.4 和最新预览版 1.8.0-alpha.5 于2018年4月14日发布,后端具...

ThinkSNS账号 ⋅ 04/18 ⋅ 0

美图发力社交行业 用户需求驱动社交化转型

今年4月,美图启用全新品牌标识,同时对美图社交圈功能开启公测。美图秀秀社交圈的推出,为用户提供更丰富的影像服务和社交体验,也标志着美图发力社交,从图片处理工具正式升级为社区平台。...

ThinkSNS账号 ⋅ 05/28 ⋅ 0

ThinkSNS 2018年五一劳动节放假及值班通知!

尊敬商企事业单位及粉丝用户:   感谢大家一直以来对ThinkSNS的支持与信任,ThinkSNS也将一如既往地为大家提供更优质的服务与产品。在此全体ThinkSNS成员祝各位新老客户和广大朋友们五一劳...

ThinkSNS账号 ⋅ 04/25 ⋅ 0

短视频APP白热化,泛娱乐社交热度不减

历史总是惊人的相似,在南抖音北快手两大热门短视频社交APP产品激烈竞争中,近日内涵段子责令被永久封停。在整个短视频市场中,老牌短视频APP快手2017年占据着市场份额首位。目前,快手拥有超...

ThinkSNS账号 ⋅ 04/16 ⋅ 0

社交系统ThinkSNS+第4阶段H5端研发更新发布播报

社交系统ThinkSNS+第4阶段于5月15日更新发布,本次社交系统TS+发布类型:移动端优化,新增功能发布,以下为部分内容,详情如下: 一、优化、调整与修复 以下为本期已记录的部分内容 H5端更新...

ThinkSNS账号 ⋅ 05/23 ⋅ 0

动态修改 Laravel Config 配置项

感谢以下网站提供的帮助 基于 Laravel 开发过程中,ThinkSNS+ 是如何做到 Laravel 配置可以网站后台配置的。 的 配置文件都是写死在 文件中,一般人需要了解 才能修改其中的配置。修改上线后...

xiaobing1024 ⋅ 05/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 55分钟前 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 7

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部