Laravel短信验证码

Laravel短信验证码

【引言】

最近写了个业务,因为业务的需要,我需要使用 sms 组件来进行发送短信验证码。这也是我第一次在项目中尝试使用短信验证码组件,但我想它也该也和邮箱发送邮件的原理也是大相庭径的。看标题就能一幕了然,我是用的是 Laravel 框架,为避免重复造轮子,我使用了安正超写的一个短信发送组件 easy-sms,利用这个组件我们可以快速的实现短信的发送功能。

【Composer换源】

我们这里使用的是第三方组件 composer-registry-manager  ,所以我们先安装它:

composer global require slince/composer-registry-manager
列出可用的所有镜像源,前面带 * 代表当前使用的镜像
composer repo:ls
使用 aliyun 镜像源
composer repo:use aliyun

【Composer拉取组件】

composer require "overtrue/easy-sms"

1.png

不建议各位直接使用root权限进行组件的拉取

当我们拉取完 easy-sms 组件后,发现该组件还没有 Laravel 的 ServiceProvider,为了方便使用,我们可以自己来封装一下,以便于后续的调用和操作。

【更改和配置相关文件】

我们直接在后台主目录下的 config 目录中使用 vim 编辑器增加和编辑一个easysms.php 文件,该文件内容如下:

vim ./config/easysms.php
 10.0,

    // 默认发送配置
    'default' => [
        // 网关调用策略,默认:顺序调用
        'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,

        // 默认可用的发送网关
        'gateways' => [
            'aliyun',
        ],
    ],
    // 可用的网关配置
    'gateways' => [
        'errorlog' => [
            'file' => '/tmp/easy-sms.log',
        ],
        'aliyun' => [
            'access_key_id' => env('SMS_ALIYUN_ACCESS_KEY_ID'),
            'access_key_secret' => env('SMS_ALIYUN_ACCESS_KEY_SECRET'),
            'sign_name' => 'Larabbs',
        ],
    ],
];

过程如图:

2.png

3.png

小提示:按i可进行编辑,输入:wq可保存并退出

接下来,我们为了使用方便来创建一个 ServiceProvider 。

在项目根目录中,使用如下命令创建一个服务提供者:

php artisan make:provider EasySmsServiceProvider

然后我们使用 vim 编辑器修改刚刚创建的文件:

vim ./app/Providers/EasySmsServiceProvider.php
app->singleton(EasySms::class, function ($app) {
            return new EasySms(config('easysms'));
        });

        $this->app->alias(EasySms::class, 'easysms');
    }
}

过程如图:

4.png

5.png

使用 :wq 参数将文件保存。

最后我们使用 vim 编辑器编辑项目根目录下的 ./config/app.php 在 providers 中增加 App\Providers\EasySmsServiceProvider::class

vim ./config/app.php

6.png

在peoviders中插入:

...
'providers' => [
        ...
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        App\Providers\EasySmsServiceProvider::class,
],
...

7.png

保存后,我们去阿里云。

【阿里云购买短信资源以及配置相关资源】

首先我们先去购买短信资源包,因为我是初次尝试,所以购买的是最低的资源包,5000条/237¥。

购买完毕后,然后我们来添加签名和模板,由于我昨晚已经添加了好了,故不再做添加操作。不过因为我们是做的验证码,所以记得添加时选验证码,添加好后审核成功后如图所示:

8.png

9.png

添加好后,我们去概览中选中增加的配置,尝试发送一条验证短信,我昨天晚上测试是可以的,我这里就不再做演示了。

接下来我们来获取 API 的 AccessKey ,这个 AccessKey ID 和 Access Key Secret 等下要填写到我们项目根目录的 .env 文件当中。如图:

10.png

11.png

12.png

接下来回到我们的项目根目录中,使用 vim 进行编辑我们的 .env配置:

vim .env
# aliyun 短信
SMS_ALIYUN_ACCESS_KEY_ID= your access key
SMS_ALIYUN_ACCESS_KEY_SECRET= your access key secret

将上 your access key 和 your access key secret 改成上面的值并保存。

接下来我们来测试一下:

php artisan tinker
try {
    $sms->send(xxx, [
         'template' => 'SMS_xxx',
         'data' => [
             'code' => 1234
         ],
    ]);
} catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
    $message = $exception->getException('aliyun')->getMessage();
    dd($message);
}

14.png

这里我们发现短信发送不出去,提示"签名不合法(不存在或被拉黑)"。

接下来我们去网站根目录下去到config目录下修改,我们将sign_name修改成自己的:

vim ./config/easysms.php

如图:

15.png

然后我们尝试再发送:

16.png

我们确实收到了一条短信:

17.png

【小结】

接下来我们就可以把程序写到我们的业务逻辑中了。


回复列表



回复操作

正在加载验证码......

请先拖动验证码到相应位置

发布时间:2020-03-21 16:36:32

修改时间:2020-05-13 00:20:33

查看次数:89

评论次数:0