利用 [微信公眾號通知] 給你的網站加上異常提醒吧

Hanson發表於2017-02-16

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);

如果你玩的溜,可以把你的賬號繫結授權,點選訊息模板然後顯示當前錯誤的報錯資訊,這樣總比登入伺服器找一堆報錯日誌好吧 :)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

提供優質的軟體服務

相關文章