dongdavid / notify
消息通知发送组件
2.0.1
2021-03-10 13:57 UTC
Requires
- alibabacloud/client: ^1.5
- guzzlehttp/guzzle: ^6.3
- phpmailer/phpmailer: ^6.1
Requires (Dev)
- mockery/mockery: ^1.1
- phpunit/phpunit: ~5||~7
This package is auto-updated.
Last update: 2024-11-13 10:34:56 UTC
README
function offical($account) { $data = [ 'access_token'=>$account['wechatoffical']['token'], 'openid'=>$account['wechatoffical']['openid'], 'template_id'=>$account['wechatoffical']['template_id'], 'data'=>[ 'first'=>['value'=>'first is me'], 'keyword1'=>['value'=>'哈哈哈'], 'keyword2'=>['value'=>number_format(23.32,2)], 'remark'=>['value'=>'备注信息'], ], ]; $d = QuickSend::offical($data['access_token'],$data['openid'],$data['template_id'],$data['data']); var_dump($d); } function mini($account) { $data = [ 'access_token'=>$account['miniprogram']['token'], 'openid'=>$account['miniprogram']['openid'], 'template_id'=>$account['miniprogram']['template_id'], 'data'=>[ 'thing1'=>['value'=>'first is me'], 'thing3'=>['value'=>'哈哈哈'], 'time2'=>['value'=>23.32], ], ]; $d = QuickSend::miniProgram($data['access_token'],$data['openid'],$data['template_id'],$data['data']); var_dump($d); } function email($account) { // to、cc、bcc 可以支持字符串、数组,如果是二维数组, 则子数组必须要有键[email]保存邮箱地址 // attachments 支持字符串、数组,如果是二维数组,则子数组必须要有键[filepath]来保存文件路径,会自动转换成绝对路径 // config参考phpmailer, $data = [ 'config'=>$account['mail'], 'subject'=>'测试邮件', 'body'=>'邮件正文', 'to'=>[ 'xxx@outlook.com', ], 'cc'=>[ ['email'=>'xxx@live.com','name'=>'收件人昵称'], ], 'bcc'=>'xxx@qq.com', 'attachments'=>[ './aa.md', ['filepath'=>'./bb.md','filename'=>'说明文件.txt'] ], //'attachments'=>'./aa.md', ]; $d = QuickSend::mail($data['config'],$data['subject'],$data['body'],$data['to'],$data['attachments'],$data['cc'],$data['bcc']); var_dump($d); } function alisms($account) { $data = [ 'config'=>[ 'accessKeyId'=>$account['alisms']['accessKeyId'], 'accessKeySecret'=>$account['alisms']['accessKeySecret'], 'SignName'=>$account['alisms']['SignName'], 'template_code'=>$account['alisms']['template_code'], ], 'phone'=>$account['alisms']['phone'], 'template_param'=>[ 'name'=>'皮皮虾', 'course_name'=>'如何上天', ], ]; $d = QuickSend::alisms($data['config'],$data['phone'],$data['template_param']); var_dump($d); }
Requirements
- PHP >= 5.6
- Redis PHP Extension
- guzzlehttp/guzzle ^6.3
- phpmailer/phpmailer ^ 6.1
Installing
$ composer require dongdavid/notify -vvv
Usage
如使用微信公众号/企业微信/微信小程序消息通知,则需要配置redis缓存access_token
# 修改配置 \Dongdavid\Notify\cache( // 默认配置 'host' => '127.0.0.1', 'port' => '6379', 'password' => '', 'select' => 6, 'timeout' => 3, ])
有两种使用方式,一种是直接将配置参数一并传入,另一种是定义config
方法来获取配置,传入配置名称
第一种方式
邮件
$mail = [ 'type' => 'email', 'config' => [ 'type' => 'email', 'signature' => 'email_tx', 'host' => 'smtp.exmail.qq.com', 'port' => '465', 'username' => 'noreply@xxx.com', 'password' => '', //腾讯的要用专用密码登陆 'SMTPSecure' => 'ssl', 'fromEmail' => 'noreply@xxx.com', 'fromName' => 'name', ], 'msg' => [ 'subject' => '邮件主旨', 'body' => '邮件内容', 'touser' => [ [ 'emailAddress' => 'receiver@outlook.com', 'name' => '收件人名字', ], ], 'cc' => [], 'attachments' => [ './public/robots.txt', ], ], ]; Notify::send($mail);
企业微信
$qy = [ 'type' => 'wechatwork', 'config' => [ 'type' => 'wechatwork', 'signature' => 'work_xxx_1000002', 'appid' => 'xxx', 'appsecret' => 'xxxxx', 'agentid' => '1000002', ], 'msg' => [ 'touser' => '001', 'msgtype' => 'textcard', 'textcard' => [ 'title' => '测试通知', 'description' => "我是通知内容\n第二行开始了\n加上一个链接<div class=\"gray\">2016年9月26日</div> <div class=\"normal\">恭喜你抽中iPhone 7一台,领奖码:xxxx</div><div class=\"highlight\">请于2016年10月10日前联系行政同事领取</div>", 'url' => 'https://www.dongdavid.com', ], ], ]; Notify::send($qy);
微信公众号
$wechat = [ 'type' => 'wechatoffical', 'config' => [ 'type' => 'wechatoffical', 'signature' => 'offical_xxx', 'appid' => 'xxx', 'appsecret' => 'xxxxx', ], 'msg' => [ 'touser' => 'openid', 'template_id' => 'template_id', 'url' => 'https://www.dongdavid.com', 'miniprogram' => [ 'appid' => '', 'pagepath' => '', ], 'data' => [ 'first' => [ 'value' => '哈喽,我是first one', ], 'keyword1' => [ 'value' => '我是关键词一号', 'color' => '#17317', ], 'keyword2' => [ 'value' => '我是关键词二号', ], 'remark' => [ 'value' => '我是备注了啊', ], ], ], ]; Notify::send($notify);
微信小程序
$wechat = [ 'type' => 'miniprogram', 'config' => [ 'type' => 'miniprogram', 'signature' => 'mini_xxx', 'appid' => 'xxx', 'appsecret' => 'xxxx', ], 'msg' => [ 'touser' => 'oBEIa0cr36R6FTCppAvgKLoKG9FY', 'template_id' => '0OHAj375XtCEVwJaASmRv79c4KhlqzN_mtsmNn6qHGg', 'page' => '', 'miniprogram_state' => 'developer', //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 'data' => [ 'thing1' => [ 'value' => '哈喽,我是first one', ], 'time2' => [ 'value' => date('Y-m-d H:i'), ], ], ], ]; Notify::send($notify);
第二种方式
在框架中使用,或者自定义一个config
方法来获取配置
在helper.php
中会使用\Dongdavid\Notify\config('notify_config')
来获取所有的消息发送配置,
所以需要确保你能够通过config('notify_config')['config_name']
来获取到对应的配置
if (!function_exists('config')) { function config($name, $value = null) { if (null !== $value) { \Dongdavid\Notify\cache('notify-config', $value); } else { return \Dongdavid\Notify\cache('notify-config'); } } } else { function config($name, $value = null) { return \config($name, $value); } }
# 预定义一个config方法用于获取配置 function config($config_name) { $config = [ 'notify_config'=>[ 'work_xxx_1000002' => [ 'type' => 'wechatwork', 'signature' => 'work_xxx_1000002', 'appid' => 'xxx', 'appsecret' => 'xxxxx', 'agentid' => '1000002', ], 'offical_xxx' => [ 'type' => 'wechatoffical', 'signature' => 'offical_xxx', 'appid' => 'xxx', 'appsecret' => 'xxx', ], 'email_tx' => [ 'type' => 'email', 'signature' => 'email_tx', 'host' => 'smtp.exmail.qq.com', 'port' => '465', 'username' => 'noreply@xxx.com', 'password' => '', //腾讯的要用专用密码登陆 'SMTPSecure' => 'ssl', 'fromEmail' => 'noreply@xxx.com', 'fromName' => 'name', ], 'mini_xxx' => [ 'type' => 'miniprogram', 'signature' => 'mini_xxx', 'appid' => 'xxx', 'appsecret' => 'xxxxx', ], ] ]; return $config[$config_name]; } # 动态注入配置 \Dongdavid\Notify\config('notify_config',$configs); $data = [ 'type' => 'email', 'config' => 'email_tx', 'msg' => [ . . . ], ]; $data = [ 'type' => 'wechatwork', 'config' => 'work_xxx_1000002', 'msg' => [ . . . ], ]; $data = [ 'type' => 'wechatoffical', 'config' => 'offical_xxx', 'msg' => [ . . . ], ]; $data = [ 'type' => 'miniprogram', 'config' => 'mini_xxx', 'msg' => [ . . . ], ]; Notify::send($data);
Test
#本地调试 mkdir notify-test cd notify-test composer init composer config repositories.notify path ../notify composer require dongdavid/notify:dev-master touch index.php
TODO
- 增加单元测试 - 我可能把单元测试写成了功能测试了,我得先去学一下怎么做单元测试😭
例子
Contributing
You can contribute in one of three ways:
- File bug reports using the issue tracker.
- Answer questions or fix bugs on the issue tracker.
- Contribute new features or update the wiki.
The code contribution process is not very formal. You just need to make sure that you follow the PSR-0, PSR-1, and PSR-2 coding guidelines. Any new code contributions must be accompanied by unit tests where applicable.
License
MIT