利用 [微信公众号通知] 给你的网站加上异常提醒吧
78

Laravel 拥有非常好的异常处理机制,所有的异常都会经过 App\Exceptions\Handlerreport 方法进行处理( 查看详情 )。

然而我所见过大部分公司或者组织,都没有很好的查看日志习惯,以至于有可能有一堆错误日志或者影响用户体验的地方却没有发现。

你可以选择邮件通知你的网站异常

public function report(Exception $exception)
{
    // 你也可以选择短信通知,土豪随意
    Sms::send($phone, [$exception]);
    // 比较传统的通知方式
    Mail::to($request->user())->send(new ExceptionNotify($exception));
    return parent::report($exception);
}

在这里大概讲讲通过微信公众号通知,如果你有已认证的微信服务号,那就方便多了,如果没有,可以0成本的去申请一个微信测试号。 点我直接申请

进去后点击 新增测试模板,标题随意,模板内容可以复制下面的

{{first.DATA}} 
异常类型:{{keyword1.DATA}} 
异常链接:{{keyword2.DATA}} 
访问IP:{{keyword3.DATA}} 
{{remark.DATA}}

先放张效果图(左边的其实可以随便定义,这里就随意了)

file

下面微信包使用的是超哥的 EasyWechat , 可以自行了解。

假若你的应用已经依赖了的 EasyWechat, 那就好办多了

public function report(Exception $exception)
{
    app('wechat')->notice->to($userOpenId)->uses($templateId)->andUrl($url)->data($data)->send();
    return parent::report($exception);
}

假若原本没有依赖 EasyWechat , 你可以选择引入 wechat-notice

compooser require hanson/wechat-notice

添加 Hanson\WechatNotice\NoticeServiceProvider::classapp.phpproviders

在这里有三种使用方式

姿势一

在你的 config/services.php 中定义一个数组 wechat

return [
    // ...
    'wechat' => [
        'app_id' => 'your app id',
        'secret' => 'your secret'
    ]
]
public function report(Exception $exception)
{
    \WechatNotice::send($openId, $templateId, [
        'first' => '系统异常',
        'keyword1' => get_class($this),
        'keyword2' => url()->current(),
        'keyword2' => $_SERVER['REMOTE_ADDR'],
        'remark' => '请及时处理'
    ]);
}

姿势二

传一个已有的 wechat 实例

public function report(Exception $exception)
{
    $wechat = new Application(['app_id' => '', 'secret' => '']);
    \WechatNotice::setWechat($wechat)->send($openId, $templateId, [
        'first' => '系统异常',
        'keyword1' => get_class($this),
        'keyword2' => url()->current(),
        'keyword2' => $_SERVER['REMOTE_ADDR'],
        'remark' => '请及时处理'
    ]);
}

姿势三

传微信参数进去

public function report(Exception $exception)
{
    \WechatNotice::setConfig(['app_id' => '', 'secret' => ''])->send($openId, $templateId, [
        'first' => '系统异常',
        'keyword1' => get_class($this),
        'keyword2' => url()->current(),
        'keyword2' => $_SERVER['REMOTE_ADDR'],
        'remark' => '请及时处理'
    ]);
}

当然你也可以传 openids 数组进去方便通知多人

\WechatNotice::send([$openid1, $openid2], $templateId, $data, $url);

如果你玩的溜,可以把你的账号绑定授权,点击消息模板然后显示当前错误的报错信息,这样总比登录服务器找一堆报错日志好吧 :)

php吹水交流群 570769430

本帖由 Summer 于 1年前 加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 39
Summer

你们两兄弟是在比赛谁比较高产吗 @cjjian

1年前
Hanson

@Summer 看他这么6我也得加把劲嘛 :laughing:

1年前

@Summer 没有啊,哈哈哈。:joy: 我只是打酱油的...

1年前
Hanson

@cjjian 你这酱油打的太出色了 :joy:

1年前

@Hanccc 我在等你带我呢。哈哈哈?

1年前
lijinma

测试号的链接修改修改

1年前
lijinma

使用测试号这一招我觉得靠谱,哈哈哈哈哈

1年前
Hanson

@lijinma 已修改,测试号这个可是0成本且方便的通知形式啊 :laughing:

1年前
lijinma

@Hanccc 恩,接口使用无上限。。

1年前

很独特的想法

1年前
MrJing

通知给微信挺好的,赞赞赞

1年前

很有价值,然而作为新人的我并不太理解

1年前

必须得赞,很实用

1年前

这个很 laravel ! :+1:

1年前

错误提醒不应该实时发送短信或者微信 应该相同的问题归类 然后发送提醒.

1年前
Hanson

@gaohuag 这里只是提供一个方法,具体做法见仁见智

1年前

不错不错

1年前
Hanson

@Callwoola 我们差不多全公司后端都来这里了。。。

1年前

@Hanccc @cjjian 你们两兄弟真是基情满满的

1年前
Hanson

@Callwoola 你看点赞的人,还有个熟悉的人。

1年前

看到少武了, 没看到业斌 。 哈哈

1年前

$openId, $templateId 这两个参数怎么来的?

1年前
Hanson

@mingyun open id是微信用户ID,你关注测试号后会看见自己的ID,template ID是模板的ID,添加模板后也是能看到的

1年前

请问有方法让测试号的模板消息,在手机弹出通知吗,或者其它的消息接口。测试号是收纳在订阅号里面的。

1年前
Hanson

@ihuanran 测试号的确是收纳在订阅号里,或者你可以发送邮件,然后微信绑定邮箱

1年前
snow1

学习中

1年前

我这里提示app('wechat')报错。。。。这个能帮忙提示一下么??

1年前
Hanson

@xhh110 你是没加 NoticeServiceProvider 吧

1年前

@Hanccc 应该是。。easywechat里面没有介绍吧??

1年前

@Hanccc 我继续使用我的new Application 就不报错了。。。

1年前
overtrue

666

1年前
Hanson

@overtrue 炒冷饭了 :joy:

1年前
overtrue

@Hanccc 才看到嘛

1年前

@overtrue 超哥厉害了。。我最进在看easy-wechat。。

1年前
overtrue

@xhh110 加油

1年前

@Hanccc 本地环境可以测试吗?为什么我把Hanson\WechatNotice\NoticeServiceProvider::class加入到providers里面还是报错呢?class not defined

1年前
Hanson

@L伟 \Hanson\WechatNotice\NoticeServiceProvider::class

1年前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!