# 消息群发
[toc]
微信为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。
开发者可以使用预览接口校对消息样式和排版,通过预览接口可发送编辑好的消息给指定用户校验效果。
本接口中所有使用到media_id的地方,现在都可以使用素材管理中的永久素材media_id了。
## 消息预览
下面演示是图文消息的预览,如果想发送图片等消息预览,开发者可以查看微信官方文档的数据结构。
```php
$data = [
"touser" => "oGiQGuMR-fR_WeD6gLRKnqgMxYGo",
"mpnews" => [
"media_id" => "vwkQqqBXrV7ND7wUu-tCnL4Lb6Zqb-MymQA7dZbt4rU",
],
"msgtype" => "mpnews",
];
WeChat::instance('message')->preview($data);
```
## 群发消息
```php
$data = [
"filter" => [
"is_to_all" => true,
],
"mpnews" => [
"media_id" => "vwkQqqBXrV7ND7wUu-tCnL4Lb6Zqb-MymQA7dZbt4rU",
],
"msgtype" => "mpnews",
"send_ignore_reprint" => 0,
];
$res = WeChat::instance('message')->sendAll($data);
```
## 删除群发
群发之后,随时可以通过该接口删除群发。只有已经发送成功的消息才能删除,删除群发消息只能删除图文消息和视频消息,其他类型的消息一经发送,无法删除。
```php
$data = [
//群发消息的编号
"msg_id":30124
];
WeChat::instance('message')->delMassMessage($data);
```
**返回说明**
```php
[
"errcode"=>0,
"errmsg"=>"ok"
]
```
## 查询群发消息发送状态
```php
$data = [
//群发消息的编号
"msg_id":30124
];
WeChat::instance('message')->getMassMessageState($data);
```
**返回说明**
```php
[
"msg_id"=>201053012,
"msg_status"=>"SEND_SUCCESS"
]
```
## 事件推送群发结果
由于群发任务提交后,群发任务可能在一定时间后才完成,因此,群发接口调用时,仅会给出群发任务是否提交成功的提示,若群发任务提交成功,则在群发任务结束时,会向开发者在公众平台填写的开发者URL(callback URL)推送事件。
需要注意,由于群发任务彻底完成需要较长时间,将会在群发任务即将完成的时候,就推送群发结果,此时的推送人数数据将会与实际情形存在一定误差。
```php
$instance = WeChat::instance('message');
//判断是否是群发消息推送事件
if ($instance->isMassMessage())
{
//执行处理代码...
}
```