用户通知
HDCMS / 更新于3周前

用户通知

[TOC]

请先行将站点的 邮箱配置阿里云 配置设置正确,才可以发送邮件或手机短信,如果没有发送短信场景可以不配置阿里云,反之亦然。

系统使用 App\Events\NotificationEvent\NotificationEvent 事件类处理通知,根据邮箱或手机自动选择相应的监听器处理。

配置

发送通知需要先配置 邮箱配置、阿里云配置及站点通知设置。如果只发送邮件那么阿里云就不需要配置了。

邮件发送

$message=[
    'subject'=>'邮件主题',
    'to'=>'接收方邮箱地址',
    'message'=>'这是邮件正文内容'
];
event(new App\Events\NotificationEvent\NotificationEvent($message));

短信发送

向手机发送只需要更改 to 变量为手机号即可

event(new NotificationEvent([
    //短信签名
    'sign' => '后盾网',
    //短信模板
    'template' => 'SMS_12840367',
    //手机号
    'to' => '18600276067',
    //模板变量
    'vars' => ["code" => "8888", "product" => "hdphp"]
]));

站内通知

除了可以邮箱或短信外使用站点通知在网站内告之用户动态,用户将在登录后获取通知消息。

@if($notifyCount = auth()->user()->unreadNotifications->count())
<li class="nav-item">
    <a class="nav-link" href="{{route('member.notify.index')}}">
        消息
        <span class="badge badge-success rounded-pill align-top small"> {{$notifyCount}}</span>
    </a>
</li>
@endif

发送通知

调用用户模型的notify 方法发送通知

auth()->user()->notify(new UserNotification(['message'=>'请收藏网站','url'=>'http://www.houdunren.com']));
属性说明: 属性 说明 必填
message 消息内容
url 跳转链接

所有消息

$user = App\User::find(1);
foreach ($user->notifications as $notification) {
    echo $notification->type;
}

未读消息

$user = App\User::find(1);
foreach ($user->unreadNotifications as $notification) {
    echo $notification->type;
}

验证码

发送验证码非常简单,在前使用直接调用send_code函数,参数一为按钮元素,参数二为手机或邮箱的表单。

配置

验证码配置在站点的通知设置中完成。

前台发送

<div class="form-group">
    <label>手机号</label>
    <input type="text" name="mobile" class="form-control" required
           value="{{old('mobile',$user['mobile']??'')}}">
</div>
<div class="form-group">
    <label>验证码</label>
    <div class="input-group mb-3">
        <input type="text" class="form-control" name="code" placeholder="请输入验证码"
               value="{{old('code')}}">
        <div class="input-group-append">
            <button class="btn btn-outline-secondary" type="button" id="sendCode">
                发送验证码
            </button>
        </div>
    </div>
    <script>
        send_code("#sendCode", '[name="mobile"]');
    </script>
</div>

后台发送

使用 NotifyServer 服务可以方便在后台发送验证码,参数一为邮箱或手机号,参数二为验证码长度。

public function code(Request $request, NotifyServer $notifyServer)
{
    $notifyServer->code($request->input('username'), 4);
    return response()->json([
        'message' => '验证码已经发送到 ' . $request->input('username') . ' 请注意查收',
        'code' => 0,
    ], 200);
}

如果发送间隔没到期,将抛出 ResponseHttpException 异常来处理响应。

我们的使命:传播互联网前沿技术,帮助更多的人实现梦想
Copyright © 2010-2018 houdunren.com All Rights Reserved 京ICP备12048441号-3
: 010-86467608 : 2300071698@qq.com
编码: 向军大叔