在這篇微信公眾平臺(tái)高級接口開發(fā)教程中,我們將介紹如何使用接口實(shí)現(xiàn)微信公眾平臺(tái)群發(fā)功能。
本文分為以下四個(gè)部分:
群發(fā)內(nèi)容可以是文本、圖片、語音、視頻、圖文。群發(fā)文本只需要文本內(nèi)容,其他內(nèi)容需要獲得相應(yīng)的media_id。
1. 文本內(nèi)容文本內(nèi)容就是一段文字,比如:"微信公眾平臺(tái)開發(fā)最佳實(shí)踐"
2. 圖片、語音、視頻要求如下:
準(zhǔn)備好以后,需要使用上傳下載多媒體文件接口將其上傳到微信服務(wù)器,獲得media_id。上傳的開發(fā)方法,可以參考本博客的第80篇教程微信公眾平臺(tái)開發(fā)(80) 上傳下載多媒體文件
3. 圖文首先要準(zhǔn)備縮略圖,要求如下:
同樣的,使用上傳下載多媒體文件接口,上傳到微信服務(wù)器后,得到縮略圖的media_id,然后需要使用上傳圖文消息素材接口將其上傳到微信服務(wù)器,接口為
https://api.weixin.QQ.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN
要POST提交的數(shù)據(jù)示例如下:
{ "articles": [ { "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p", "author":"xxx", "title":"Happy Day", "content_source_url":"www.qq.com", "content":"content", "digest":"digest" }, { "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p", "author":"xxx", "title":"Happy Day", "content_source_url":"www.qq.com", "content":"content", "digest":"digest" } ]}參數(shù)說明如下:
| 參數(shù) | 是否必須 | 說明 |
|---|---|---|
| Articles | 是 | 圖文消息,一個(gè)圖文消息支持1到10條圖文 |
| thumb_media_id | 是 | 圖文消息縮略圖的media_id,可以在基礎(chǔ)支持-上傳多媒體文件接口中獲得 |
| author | 否 | 圖文消息的作者 |
| title | 是 | 圖文消息的標(biāo)題 |
| content_source_url | 否 | 在圖文消息頁面點(diǎn)擊“閱讀原文”后的頁面 |
| content | 是 | 圖文消息頁面的內(nèi)容,支持HTML標(biāo)簽 |
| digest | 否 | 圖文消息的描述 |
根據(jù)上述POST結(jié)構(gòu),定義圖文數(shù)組如下:

上傳成功后,返回如下,將得到圖文消息的media_id
{ "type":"news", "media_id":"CsEf3ldqkAYJAU6EJeIkStVDSvffUJ54vqbThMgplD-VJXXof6ctX5fI6-aYyUiQ", "created_at":1391857799}二、選擇群發(fā)對象群發(fā)對象可以是用戶組,也可以是OpenID列表。
1.用戶組獲得用戶分組,需要使用高級接口中的查詢所有分組接口,獲得相應(yīng)的group_id,開發(fā)方法,可以參考本博客的第88篇教程微信公眾平臺(tái)開發(fā)(88) 用戶分組接口
2.OpenID列表OpenID列表,是使用高級接口中的獲取關(guān)注者列表接口來實(shí)現(xiàn)的。開發(fā)方法,可以參考本博客的第87篇教程微信公眾平臺(tái)開發(fā)(87) 獲取關(guān)注者列表
三、執(zhí)行群發(fā)由于群發(fā)對象的不同,執(zhí)行群發(fā)也有不同的方式。
1. 對用戶組群發(fā)對用戶組群發(fā)的接口如下:
https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN
要POST的內(nèi)容按內(nèi)容不同組成也不一樣。
文本:
{ "filter":{ "group_id":"2" }, "text":{ "content":"CONTENT" }, "msgtype":"text"}語音(注意此處media_id需通過基礎(chǔ)支持中的上傳下載多媒體文件來得到):
{ "filter":{ "group_id":"2" }, "voice":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"voice"}圖片(注意此處media_id需通過基礎(chǔ)支持中的上傳下載多媒體文件來得到):
{ "filter":{ "group_id":"2" }, "image":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"image"}視頻
{ "filter":{ "group_id":"2" }, "mpvideo":{ "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc", }, "msgtype":"mpvideo"}圖文消息(注意圖文消息的media_id需要通過上述方法來得到):
{ "filter":{ "group_id":"2" }, "mpnews":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"mpnews"}相關(guān)參數(shù)說明如下:
| 參數(shù) | 是否必須 | 說明 |
|---|---|---|
| filter | 是 | 用于設(shè)定圖文消息的接收者 |
| group_id | 是 | 群發(fā)到的分組的group_id |
| mpnews | 是 | 用于設(shè)定即將發(fā)送的圖文消息 |
| media_id | 是 | 用于群發(fā)的消息的media_id |
| msgtype | 是 | 群發(fā)的消息類型,圖文消息為mpnews,文本消息為text,語音為voice,音樂為music,圖片為image,視頻為video |
| title | 否 | 消息的標(biāo)題 |
| description | 否 | 消息的描述 |
| thumb_media_id | 是 | 視頻縮略圖的媒體ID |
其接口實(shí)現(xiàn)代碼如下所示:

返回結(jié)果如下:
array(3) { ["errcode"]=> int(0) ["errmsg"]=> string(27) "send job submission success" ["msg_id"]=> float(2347614963)}參數(shù)說明
| 參數(shù) | 說明 |
|---|---|
| type | 媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb),圖文消息為news |
| errcode | 錯(cuò)誤碼 |
| errmsg | 錯(cuò)誤信息 |
| msg_id | 消息ID |
下面是向用戶組發(fā)送圖文消息的效果,分別是接收到圖文消息,查看圖文消息內(nèi)容后的效果,

2.對OpenID列表群發(fā)接口如下:
https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN
POST數(shù)據(jù)示例如下:文本:
{ "touser": [ "oR5Gjjl_eiZoUpGozMo7dbBJ362A", "oR5Gjjo5rXlMUocSEXKT7Q5RQ63Q" ], "msgtype": "text", "text": { "content": "hello from boxer." }}語音:
{ "touser":[ "OPENID1", "OPENID2" ], "voice":{ "media_id":"mLxl6paC7z2Tl-NJT64yzJve8T9c8u9K2x-Ai6Ujd4lIH9IBuF6-2r66mamn_gIT" }, "msgtype":"voice"}圖片:
{ "touser":[ "OPENID1", "OPENID2" ], "image":{ "media_id":"BTgN0opcW3Y5zV_ZebbsD3NFKRWf6cb7OPswPi9Q83fOJHK2P67dzxn11Cp7THat" }, "msgtype":"image"}視頻:
{ "touser":[ "OPENID1", "OPENID2" ], "video":{ "media_id":"123dsdajkasd231jhksad", "title":"TITLE", "description":"DESCRIPTION" }, "msgtype":"video"}圖文消息(注意圖文消息的media_id需要通過上述方法來得到):
{ "touser":[ "OPENID1", "OPENID2" ], "mpnews":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"mpnews"}參數(shù)列表
| 參數(shù) | 是否必須 | 說明 |
|---|---|---|
| touser | 是 | 填寫圖文消息的接收者,一串OpenID列表,OpenID最少個(gè),最多10000個(gè) |
| mpnews | 是 | 用于設(shè)定即將發(fā)送的圖文消息 |
| media_id | 是 | 用于群發(fā)的圖文消息的media_id |
| msgtype | 是 | 群發(fā)的消息類型,圖文消息為mpnews,文本消息為text,語音為voice,音樂為music,圖片為image,視頻為video |
| title | 否 | 消息的標(biāo)題 |
| description | 否 | 消息的描述 |
| thumb_media_id | 是 | 視頻縮略圖的媒體ID |
返回?cái)?shù)據(jù)示例(正確時(shí)的JSON返回結(jié)果):
{ "errcode":0, "errmsg":"send job submission success", "msg_id":2347614964}四、接收群發(fā)結(jié)果 1. 設(shè)置公眾號(hào)助手為了能接收群發(fā)結(jié)果,需要設(shè)置公眾號(hào)助手,結(jié)果將推送到綁定的個(gè)人微信賬號(hào)上。其設(shè)置如下

群發(fā)任務(wù)提交后,群發(fā)任務(wù)可能在一定時(shí)間后才完成,因此,群發(fā)接口調(diào)用時(shí),僅會(huì)給出群發(fā)任務(wù)是否提交成功的提示,若群發(fā)任務(wù)提交成功,則在群發(fā)任務(wù)結(jié)束時(shí),會(huì)向開發(fā)者在公眾平臺(tái)填寫的開發(fā)者URL(callback URL)推送事件。
推送的xml結(jié)構(gòu)如下(發(fā)送成功時(shí)):
<xml> <ToUserName><![CDATA[gh_3e8adccde292]]></ToUserName> <FromUserName><![CDATA[oR5Gjjl_eiZoUpGozMo7dbBJ362A]]></FromUserName> <CreateTime>1394524295</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[MASSSENDJOBFINISH]]></Event> <MsgID>1988</MsgID> <Status><![CDATA[sendsuccess]]></Status> <TotalCount>100</TotalCount> <FilterCount>80</FilterCount> <SentCount>75</SentCount> <ErrorCount>5</ErrorCount></xml>