来源:自学PHP网 时间:2015-04-14 12:58 作者: 阅读:次
[导读] 本文是为《微信公众平台开发最佳实践》读者而写,因书出版后本接口才公开。目录上应当归属于 第5章 自定义菜单和高级接口 5 12 高级群发接口 。读者可在该书配套代码中找到本节的...
目录上应当归属于 第5章 自定义菜单和高级接口 5.12 高级群发接口 。读者可在该书配套代码中找到本节的源代码。
在这篇微信公众平台高级接口开发教程中,我们将介绍如何使用接口实现微信公众平台群发功能。 本文分为以下四个部分:
一、准备群发内容群发内容可以是文本、图片、语音、视频、图文。群发文本只需要文本内容,其他内容需要获得相应的media_id。 1. 文本内容文本内容就是一段文字,比如:"微信公众平台开发最佳实践" 2. 图片、语音、视频要求如下:
准备好以后,需要使用上传下载多媒体文件接口将其上传到微信服务器,获得media_id。 3. 图文首先要准备缩略图,要求如下:
同样的,使用上传下载多媒体文件接口,上传到微信服务器后,得到缩略图的media_id, https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN 要POST提交的数据示例如下: { "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" } ] } 参数说明如下:
根据上述POST结构,定义图文数组如下: 上传图文消息素材的代码则实现如下: 上传成功后,返回如下,将得到图文消息的media_id { "type":"news", "media_id":"CsEf3ldqkAYJAU6EJeIkStVDSvffUJ54vqbThMgplD-VJXXof6ctX5fI6-aYyUiQ", "created_at":1391857799 }
二、选择群发对象群发对象可以是用户组,也可以是OpenID列表。 1.用户组获得用户分组,需要使用高级接口中的查询所有分组接口,获得相应的group_id, 2.OpenID列表OpenID列表,是使用高级接口中的获取关注者列表接口来实现的。
三、执行群发由于群发对象的不同,执行群发也有不同的方式。 1. 对用户组群发对用户组群发的接口如下: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN 要POST的内容按内容不同组成也不一样。 文本: { "filter":{ "group_id":"2" }, "text":{ "content":"CONTENT" }, "msgtype":"text" } 语音(注意此处media_id需通过基础支持中的上传下载多媒体文件来得到): { "filter":{ "group_id":"2" }, "voice":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"voice" } 图片(注意此处media_id需通过基础支持中的上传下载多媒体文件来得到): { "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" } 相关参数说明如下:
其接口实现代码如下所示: 返回结果如下: array(3) { ["errcode"]=> int(0) ["errmsg"]=> string(27) "send job submission success" ["msg_id"]=> float(2347614963) } 参数说明
下面是向用户组发送图文消息的效果,分别是接收到图文消息,查看图文消息内容后的效果, 2.对OpenID列表群发接口如下: https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN POST数据示例如下: { "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" } 参数列表
返回数据示例(正确时的JSON返回结果): { "errcode":0, "errmsg":"send job submission success", "msg_id":2347614964 }
四、接收群发结果1. 设置公众号助手为了能接收群发结果,需要设置公众号助手,结果将推送到绑定的个人微信账号上。其设置如下 2. 接收结果事件群发任务提交后,群发任务可能在一定时间后才完成,因此,群发接口调用时,仅会给出群发任务是否提交成功的提示,若群发任务提交成功,则在群发任务结束时,会向开发者在公众平台填写的开发者URL(callback URL)推送事件。 推送的XML结构如下(发送成功时): <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>
从上可以看出,这其实是公众号群发助手模拟向公众号发送消息,那么群发结果也是返回给公众号助手。 在微信公众平台PHP SDK中增加该事件消息的处理结果如下: private function receiveEvent($object) { $content = ""; switch ($object->Event) { case "subscribe": $content = "欢迎关注方倍工作室"; break; case "MASSSENDJOBFINISH": $content = "消息ID:".$object->MsgID. "\n结果:".$object->Status. "\n粉丝数:".$object->TotalCount. "\n过滤:".$object->FilterCount. "\n发送成功:".$object->SentCount. "\n发送失败:".$object->ErrorCount; break; default: break; } $result = $this->transmitText($object, $content); return $result; }
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com