项目中需要实现一个发送和验证短信验证码的功能。以前的办法稍显繁琐。经高人指点,发现可以用 laravel-sms 这个包替代。且配置和使用简单易学。故有了这篇示例。

本例使用了 Laravel 5.5Api Starter Kit 以及 Laravel Sms 2.6

本例使用的短信服务商为 云片

安装

在项目根目录下执行(推荐):

也可以在 composer.json 的 require 字段中添加:

然后在项目根目录下执行:

在 config/app.php 的 providers 数组中添加:

并在 aliases 数组里添加:

在项目根目录下执行:

会在 config 文件夹中生成两个配置文件:phpsms.php 和 laravel-sms.php。

  • 在 phpsms.php 中可以配置代理器信息及均衡调度方案。
  • 在 laravel-sms.php 中可以配置验证码的发送与验证方案。

同时会向 database\migrations 中复制 2015_12_21_111514_create_sms_table.php 文件。用于生成 laravel_sms 表。

配置

这里仅以云片为例。

配置 phpsms.php

设置 phpsms.php 中 agnets 数组中云片的代理器信息。

设置 scheme 数组,配置均衡调度方案。

配置 laravel-sms.php

设置内置路由。

设置请求间隔,单位为秒。

设置号码验证规则。

设置验证码规则。

设置验证码内容短信。

如果有需要,可以开启数据库日志。需要提前运行 php artisan migrate 生成 laravel_sms 表。

API 实现

在 app/Utils 下新建 SmsCodeUtil.php,并在里面实现验证码发送和校验功能。这样其他类可以随时调用,提高代码的复用性。

发送模块

发送前需要对手机号进行校验,包括:

validateSendable() :验证是否满足发送间隔
validateFields() :验证数据合法性

通过验证后,再使用 requestVerifySms() 发送验证码。
具体代码如下:

校验模块

登入时,可能需要校验手机号和验证码。所以需要在 SmsCodeUtil.php 中添加验证码校验功能。这里官方 Github 上已经给出了代码,稍作修改即可。

功能测试

接下来配置路由和控制器,测试下功能是否正常。
可以同时打开 host-domain/laravel-sms/info 查看验证码短信发送和校验状态。
若启用了数据库日志,可以在 laravel_sms 表中查看短信发送结果的详细信息。

先在 api.php 中添加:

再在 LoginController.php 中添加:

然后使用 Postman 或其他类似工具测试 Api 功能。

  • 发送验证码

    若通过验证并发送成功,则会返回:

    同时填写的手机号接受到验证码。
    若验证失败或发送失败,则会返回对应的错误信息。

  • 校验验证码

    若通过验证,则无返回。
    若验证失败,则会返回对应的错误信息。

本地化提示信息语言

在 laravel-sms.php 中提供了部分提示信息的自定义。想要将剩余部分的提示信息转换为本地语言,需要另行处理。

首先确保 config/app.php 中的语言设置正确。这里设置为 zh_cn。

然后在 resources\lang\zh_cn 文件夹下新建 validation.php,并填入本地化信息:

重新 POST 相关地址,可以看到对应的提示信息语言已经本地化。

发表评论

电子邮件地址不会被公开。 必填项已用*标注