# message **Repository Path**: xibeicity/message ## Basic Information - **Project Name**: message - **Description**: 一个统一的消息通知系统,支持ThinkPHP框架,可以方便地发送短信、钉钉、微信等多种消息。 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-14 - **Last Updated**: 2025-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Message 一个统一的消息通知系统,支持ThinkPHP框架,可以方便地发送短信、钉钉、微信等多种消息。 ## 环境要求 - PHP >= 7.2 - ThinkPHP >= 6.0 ## 安装 通过Composer安装: ```bash composer require xibeicity/message ``` ## 配置 1. 复制配置文件到项目的config目录: ```bash cp vendor/xibeicity/message/config/message.php config/message.php ``` 2. 在.env文件中配置相关参数: ```env # 默认消息驱动 MESSAGE_DRIVER=sms # 阿里云短信配置 ALIYUN_ACCESS_KEY_ID=your-access-key-id ALIYUN_ACCESS_KEY_SECRET=your-access-key-secret ALIYUN_SMS_SIGN_NAME=your-sign-name ALIYUN_SMS_TEMPLATE_CODE=your-template-code ALIYUN_REGION_ID=cn-hangzhou # 钉钉配置 DINGTALK_APP_KEY=your-app-key DINGTALK_APP_SECRET=your-app-secret DINGTALK_AGENT_ID=your-agent-id # 钉钉群机器人配置 DINGTALK_ROBOT_WEBHOOK=your-webhook-url DINGTALK_ROBOT_SECRET=your-secret # 微信公众号配置 WECHAT_OFFICIAL_ACCOUNT_APP_ID=your-app-id WECHAT_OFFICIAL_ACCOUNT_APP_SECRET=your-app-secret WECHAT_OFFICIAL_ACCOUNT_TOKEN=your-token WECHAT_OFFICIAL_ACCOUNT_AES_KEY=your-aes-key # 微信小程序配置 WECHAT_MINI_PROGRAM_APP_ID=your-app-id WECHAT_MINI_PROGRAM_APP_SECRET=your-app-secret # 企业微信群机器人配置 WECHAT_ROBOT_WEBHOOK=your-webhook-url ``` 3. 执行数据库迁移(用于消息记录功能): ```bash php think migrate:run ``` ## 基础使用 ### 阿里云短信 ```php use Xibeicity\Message\MessageManager; $message = new MessageManager(); // 发送普通短信 $message->driver('sms')->send(['13800138000'], '您的验证码是:123456'); // 使用模板发送短信 $message->driver('sms')->sendTemplate(['13800138000'], 'SMS_123456789', [ 'code' => '123456' ], [ 'sign_name' => '您的签名' ]); // 批量发送短信 $message->driver('sms')->batchSend([ ['phone' => '13800138000', 'content' => '验证码:123456'], ['phone' => '13800138001', 'content' => '验证码:654321'] ]); // 获取发送状态 $result = $message->driver('sms')->getStatus(); if (!$result['success']) { echo $message->driver('sms')->getError(); } ``` ### 钉钉工作通知 ```php use Xibeicity\Message\MessageManager; $message = new MessageManager(); // 发送普通消息 $message->driver('dingtalk')->send(['user123'], '这是一条测试消息'); // 发送带链接的消息 $message->driver('dingtalk')->send(['user123'], '请查看详情', [ 'link' => 'https://example.com', 'title' => '通知标题' ]); // 批量发送消息 $message->driver('dingtalk')->batchSend([ ['user_id' => 'user123', 'content' => '消息1'], ['user_id' => 'user456', 'content' => '消息2'] ]); ``` ### 钉钉群机器人 ```php use Xibeicity\Message\MessageManager; $message = new MessageManager(); // 发送文本消息 $message->driver('dingtalk_robot')->send(['@all'], '这是一条测试消息', [ 'at' => ['13800138000'], 'at_all' => false ]); // 发送markdown消息 $message->driver('dingtalk_robot')->send(['@all'], '# 标题\n内容', [ 'msg_type' => 'markdown' ]); // 发送带链接的消息 $message->driver('dingtalk_robot')->send(['@all'], '请查看详情', [ 'msg_type' => 'link', 'title' => '通知标题', 'link' => 'https://example.com' ]); ``` ### 微信公众号 ```php use Xibeicity\Message\MessageManager; $message = new MessageManager(); // 发送普通模板消息 $message->driver('wechat_official_account')->send(['OPENID'], '您有一条新通知'); // 发送完整模板消息 $message->driver('wechat_official_account')->sendTemplate(['OPENID'], 'template-id', [ 'first' => '您有一条新通知', 'keyword1' => '通知内容', 'keyword2' => '2024-01-01 12:00:00', 'remark' => '请及时查看' ], [ 'url' => 'https://example.com' ]); // 批量发送模板消息 $message->driver('wechat_official_account')->batchSend([ ['openid' => 'OPENID1', 'content' => '通知1'], ['openid' => 'OPENID2', 'content' => '通知2'] ]); ``` ### 微信小程序 ```php use Xibeicity\Message\MessageManager; $message = new MessageManager(); // 发送订阅消息 $message->driver('wechat_mini_program')->send(['OPENID'], '商品已发货', [ 'template_id' => 'template-id', 'page' => 'pages/index/index', 'data' => [ 'thing1' => ['value' => '商品名称'], 'amount2' => ['value' => '89.90'], 'date3' => ['value' => '2024-01-01 12:00:00'] ] ]); // 使用预设模板发送订阅消息 $message->driver('wechat_mini_program')->sendTemplate(['OPENID'], 'template-id', [ 'thing1' => '商品名称', 'amount2' => '89.90', 'date3' => '2024-01-01 12:00:00' ], [ 'page' => 'pages/index/index' ]); ``` ### 企业微信群机器人 ```php use Xibeicity\Message\MessageManager; $message = new MessageManager(); // 发送文本消息 $message->driver('wechat_robot')->send(['@all'], '这是一条测试消息', [ 'mentioned_list' => ['wangwu', 'lisi'], 'mentioned_mobile_list' => ['13800138000'] ]); // 发送markdown消息 $message->driver('wechat_robot')->send(['@all'], '# 标题\n内容', [ 'msg_type' => 'markdown' ]); // 发送图片消息 $message->driver('wechat_robot')->send(['@all'], '', [ 'msg_type' => 'image', 'base64' => 'base64编码的图片内容', 'md5' => '图片内容的md5值' ]); ``` ## 错误处理 所有驱动都支持错误处理: ```php use Xibeicity\Message\MessageManager; $message = new MessageManager(); $result = $message->driver('sms')->send(['13800138000'], '验证码:123456'); if (!$result['success']) { // 获取错误信息 $error = $message->driver('sms')->getError(); // 处理错误 echo "发送失败:{$error}"; } ``` ## 高级特性 ### 自定义消息驱动 1. 创建自定义驱动类,实现MessageInterface接口: ```php use Xibeicity\Message\Contracts\MessageInterface; class CustomDriver implements MessageInterface { public function send(array $to, string $content, array $options = []): array { // 实现发送逻辑 return [ 'success' => true, 'message_id' => 'xxx' ]; } public function sendTemplate(array $to, string $templateCode, array $templateParams = [], array $options = []): array { // 实现模板消息发送逻辑 return [ 'success' => true, 'message_id' => 'xxx' ]; } public function batchSend(array $messages): array { // 实现批量发送逻辑 return [ 'success' => true, 'message_id' => 'xxx' ]; } public function getStatus(): array { // 返回发送状态 return [ 'success' => true, 'message_id' => 'xxx' ]; } public function getError(): ?string { // 返回错误信息 return null; } } ``` 2. 注册自定义驱动: ```php use Xibeicity\Message\MessageManager; $message = new MessageManager(); $message->extend('custom', function () { return new CustomDriver(); }); // 使用自定义驱动发送消息 $message->driver('custom')->send(['user123'], '这是一条测试消息'); ```