xibeicity / message
A unified message notification system for ThinkPHP
This package's canonical repository appears to be gone and the package has been frozen as a result.
v1.0.1
2025-03-10 03:53 UTC
Requires
- php: >=7.2
- alibabacloud/dingtalk: ^2.0
- alibabacloud/dysmsapi-20170525: ^2.0
- guzzlehttp/guzzle: ^7.0
- topthink/framework: ^6.0
- w7corp/easywechat: ^5.0
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2025-04-10 07:18:07 UTC
README
一个统一的消息通知系统,支持ThinkPHP框架,可以方便地发送短信、钉钉、微信等多种消息。
环境要求
- PHP >= 7.2
- ThinkPHP >= 6.0
安装
通过Composer安装:
composer require xibeicity/message
配置
- 复制配置文件到项目的config目录:
cp vendor/xibeicity/message/config/message.php config/message.php
- 在.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
- 执行数据库迁移(用于消息记录功能):
php think migrate:run
基础使用
阿里云短信
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();
}
钉钉工作通知
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']
]);
钉钉群机器人
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'
]);
微信公众号
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']
]);
微信小程序
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'
]);
企业微信群机器人
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值'
]);
错误处理
所有驱动都支持错误处理:
use Xibeicity\Message\MessageManager;
$message = new MessageManager();
$result = $message->driver('sms')->send(['13800138000'], '验证码:123456');
if (!$result['success']) {
// 获取错误信息
$error = $message->driver('sms')->getError();
// 处理错误
echo "发送失败:{$error}";
}
高级特性
自定义消息驱动
- 创建自定义驱动类,实现MessageInterface接口:
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;
}
}
- 注册自定义驱动:
use Xibeicity\Message\MessageManager;
$message = new MessageManager();
$message->extend('custom', function () {
return new CustomDriver();
});
// 使用自定义驱动发送消息
$message->driver('custom')->send(['user123'], '这是一条测试消息');