摘要:在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。
在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。
【注意】
1、对于认证订阅号,群发接口每天可成功调用1次,此次群发可选择发送给全部用户或某个标签; 2、对于认证服务号虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败; 3、开发者可以使用预览接口校对消息样式和排版,通过预览接口可发送编辑好的消息给指定用户校验效果; 4、群发过程中,微信后台会自动进行图文消息原创校验,请提前设置好相关参数(send_ignore等); 5、开发者可以主动设置 clientmsgid 来避免重复推送。 6、群发接口每分钟限制请求60次,超过限制的请求会被拒绝。 7、图文消息正文中插入自己帐号和其他公众号已群发文章链接的能力。
因为公众平台有每天群发消息的限制(订阅号每天一条,服务号一个月4条),而公众平台为开发者提供了预览接口,每天可调用100次,因此我们在开发时,可以用预览接口发送消息给指定用户,然后在手机端查看排版样式。
预览接口:
http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN
群发消息接口实现:
//群发消息 public function sdMsg() { $accessToken = $this->_getWxAccessToken(); echo "$accessToken"; echo "<hr>"; $url = 'https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token='.$accessToken; //单文本消息 $arr = [ 'touser' => '***',//openid 用微信扫描测试号,用户列表下的微信号 'text' => [ 'content' => urlencode('心月IT博客公众号群发消息测试'), ], 'msgtype' => 'text', ]; //图片消息 // $arr = [ // "touser" => "o3anQ1BcB1g2C5jFEgrXb3m7lSps", // "image"=>[ // "media_id"=>"BTgN0opcW3Y5zV_ZebbsD3NFKRWf6cb7OPswPi9Q83fOJHK2P67dzxn11Cp7THat", // ], // "msgtype"=>"image" , // ]; $postJson = urldecode(json_encode($arr)); echo "<hr>"; echo "$postJson"; $res = $this->ch($url, 'post', 'json', $postJson); dump($res); } private function ch($url, $type='get', $res='json', $arr='') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); if ($type == 'post') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arr); } $cnt = curl_exec($ch); if (curl_errno($ch)) { return; } curl_close($ch); if ($res == 'json') { return json_decode($cnt, true); } return $cnt; }
(media_id 的获取方法:《微信公众号开发——通过JS-SDK图片上传接口获取media_id》)
直接调用 sdMsg() 接口就可以实现消息群发。
群发图片消息示例:
文本消息json格式:
{ "touser":"OPENID", "text":{ "content":"CONTENT" }, "msgtype":"text" }
群发消息,除了单文本还可以发送其他的消息,其他消息发送的json格式:
图文消息(其中media_id与根据分组群发中的media_id相同):
{ "touser":"OPENID", "mpnews":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"mpnews" }
语音(其中media_id与根据分组群发中的media_id相同):
{ "touser":"OPENID", "voice":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"voice" }
图片(其中media_id与根据分组群发中的media_id相同):
{ "touser":"OPENID", "image":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"image" }
视频(其中media_id与根据分组群发中的media_id相同):
{ "touser":"OPENID", "mpvideo":{ "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc", }, "msgtype":"mpvideo" }
卡券:
{ "touser":"OPENID", "wxcard":{ "card_id":"123dsdajkasd231jhksad", "card_ext": "{"code":"","openid":"","timestamp":"1402057159","signature":"017bb17407c8e0058a66d72dcc61632b70f511ad"}" }, "msgtype":"wxcard" }
在实际开发中可以参照文本消息,把你要发送的消息类型用数组表示出来,然后在通过json_encode 转换成 json。