yizuan / es-notify
Notification utility
dev-main
2023-10-10 07:40 UTC
Requires
- php: >=7.2
- easyswoole/easyswoole: 3.4.x
- easyswoole/http-client: ^1.5
- easyswoole/wechat: ^2.0
This package is auto-updated.
Last update: 2025-03-06 07:13:42 UTC
README
可方便快捷的实现通知服务,目前已接入的有钉钉和微信公众号(含测试号)
使用场景
- 程序异常通知
- 数据上报到钉钉群
- 敏感操作通知、操作状态通知
目录结构
src
├── DingTalk 钉钉实现
├── Interface 接口定义
└── Wechat 微信实现
开始
composer require yizuan/es-notify
配置
- 钉钉
<?php $DingTalkConfig = new \WonderGame\EsNotify\DingTalk\Config([ // 钉钉WebHook url 'url' => 'your dingtalk url', // 密钥 'signKey' => 'your dingtalk sign_key', // ... 也可以配置一些自定义属性, 获取方式 Config->getProperty('xx') ], true);
- 微信
<?php $WeChatConfig = new \WonderGame\EsNotify\WeChat\Config([ // 微信公众平台后台的 appid 'appId' => '', // 微信公众平台后台配置的 AppSecret 'appSecret' => '', // 微信公众平台后台配置的 Token 'token' => '', // 点击后跳转地址 'url' => 'https://github.com/Joyboo', // 发送给谁, openid[] 'toOpenid' => [], // 注册WeChat实例时追加的配置( 可选参数 ) 'append' => [] // ... 也可以配置一些自定义属性, 获取方式 Config->getProperty('xx') ], true);
注册
可注册多个,不限数量,key需要保证唯一,调用通知时需声明此key
<?php // Config为配置类 \WonderGame\EsNotify\EsNotify::getInstance()->register('dingtalk', $Config);
调用通知
- 调用doesOne时第一个参数为注册时的key,第二个参数为消息类
- 钉钉支持的消息类型是固定的,都在DingTalk\Message目录
- 微信公众号模板消息的每个模板,理论上格式都不同,请自行继承src/WeChat/Message/Base.php 实现struct抽象方法传递模板结构,可参考Warning.php和Notice.php
<?php // 这是一个钉钉Markdown消息示例 $message = new \WonderGame\EsNotify\DingTalk\Message\Markdown([ //消息标题 'title' => 'Joyboo', // 内容 'text' => '真帅', // @的手机号(可选) 'atMobiles' => [], // @的userid(可选) 'atUserIds' => [], // 是否@所有人(可选, 默认false) 'isAtAll' => true ]); // 开始发送钉钉消息,key是注册时传入的key \WonderGame\EsNotify\EsNotify::getInstance()->doesOne('dingtalk', $message); // 这是一个程序异常的消息示例 $message = new \WonderGame\EsNotify\WeChat\Message\Warning([ 'templateId' => '微信模板消息id', 'file' => '发生异常的文件', 'line' => '第几行', 'servername' => '服务器名', 'message' => 'mesage', // 微信文本颜色,默认红色 //'color' => '' ]); // 开始发送微信消息 \WonderGame\EsNotify\EsNotify::getInstance()->doesOne('wechat', $message);
常见问题
- 我想在没注册的情况下,按指定配置实例化然后调用通知可以吗?
- 当然可以,Show Code
<?php // 第一步: 构造配置类 $DingTalkConfig = new \WonderGame\EsNotify\DingTalk\Config([ // 动态传入你的配置 'url' => 'your dingtalk WebHook url', 'signKey' => 'your dingtalk sign key' ], true); // 第二步: 构造消息类 $DingTalkMessage = new \WonderGame\EsNotify\DingTalk\Message\Markdown([ 'title' => '魔镜魔镜,谁是世界上最帅的人?', 'text' => 'Joyboo无疑', ]); // 然后就可以愉快的调用了 $DingTalkConfig->getNotifyClass()->does($DingTalkMessage);
- 微信同理
TODO
- 异常处理
- 目前钉钉和微信Config和Message不能混用,所以无法实现doesAll方法,需解决