微信公众号开发教程[008]-消息管理-群发消息
2016-07-14 12:19
633 查看
我承接app和微信公众号开发,如果有谁需要的话,可以惠顾我,谢谢.
QQ: 40678884
微信: szuzsq
主页: http://www.wxshaker.com
博客: http://blog.csdn.net/szuzsq
-------------------------------------------------------------------------------------------------------------------------------------
高级群发接口比较简单(但需要认证).分别可以发送给全部粉丝,或者发送给特定标签下的用户,或者发送给特定用户(根据OpenID列表群发).消息的类型可以是:图文消息,文本消息,语音消息,图片消息,视频消息,卡券消息.需要注意的是除了文本消息能够直接发送外,语音,图片,视频消息需要通过基础支持中的上传下载多媒体文件来得到获得media_id,而图文消息需要先制作出图文消息内容体(获得特殊的media_id).
下面,通过图文消息来讲解群发的api(其他消息类型大家可以参见官方文档).
1).上传图文消息内的图片获取URL.
这玩意我调用了,但发现[b]取得的url,在后面的步骤中似乎没用着.反而是回复消息时,如果回复的是图文消息,在xml结构体里用着了.[/b]
我上传了2张图片,代码如下:
得到的返回值如下:
2).上传图文消息素材
代码如下:
为了偷懒,这里的thumb_media_id我直接是发送图片消息,然后公众号服务器接收消息处取来滴.
得到的返回值如下:
3).预览接口
微信提供在发送前,将该消息发送给指定用户,在手机端查看消息的样式和排版代码的功能.如下:
得到的返回值如下:
分别点击2个图文之后,会看到以下内容:
和这个
注意1个界面显示图片,1个界面不显示.点击阅读原文,则会进入2).上传图文消息素材设置的站点.
4).根据OpenID列表群发(也可以是根据标签进行群发)
代码如下:
得到的返回值如下:
5).查询群发消息发送状态
代码如下:
6).删除群发
代码如下:
得到的返回值如下:
7).事件推送群发结果
官方文档上说:"由于群发任务提交后,群发任务可能在一定时间后才完成,因此,群发接口调用时,仅会给出群发任务是否提交成功的提示,若群发任务提交成功,则在群发任务结束时,会向开发者在公众平台填写的开发者URL(callback URL)推送事件。"我的结果如下:
QQ: 40678884
微信: szuzsq
主页: http://www.wxshaker.com
博客: http://blog.csdn.net/szuzsq
-------------------------------------------------------------------------------------------------------------------------------------
高级群发接口比较简单(但需要认证).分别可以发送给全部粉丝,或者发送给特定标签下的用户,或者发送给特定用户(根据OpenID列表群发).消息的类型可以是:图文消息,文本消息,语音消息,图片消息,视频消息,卡券消息.需要注意的是除了文本消息能够直接发送外,语音,图片,视频消息需要通过基础支持中的上传下载多媒体文件来得到获得media_id,而图文消息需要先制作出图文消息内容体(获得特殊的media_id).
下面,通过图文消息来讲解群发的api(其他消息类型大家可以参见官方文档).
1).上传图文消息内的图片获取URL.
这玩意我调用了,但发现[b]取得的url,在后面的步骤中似乎没用着.反而是回复消息时,如果回复的是图文消息,在xml结构体里用着了.[/b]
我上传了2张图片,代码如下:
function upload_pic() { //上传图文消息内的图片获取URL $ACCESS_TOKEN = "DbEhmwXiL4RWRinpz2sAcfNLqk-PJwtt9esmkpmv4ycwYmCWOhEE7IoMDP31-lnJojKGR8QOP53sFvzzTXGVk3DQZrN7vT4lh8IST_GNhiNh7eBXVViMQI-ssLoOfKjnTGYbAGADQI"; $url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=$ACCESS_TOKEN"; $result = curl_http_upload($url, "meida", "C:\Users\Administrator\Desktop\a.jpg"); $json = json_decode($result); echo $json->url; }
得到的返回值如下:
{"url": "http://mmbiz.qpic.cn/mmbiz/q9jYbRzAGeXKnahdcPUFjP6reSgVibIcKJTXs5tOibzdkiahHv32LLOuBauyzbibDYuR07VNcQVCYHVVf7Sd0tvM7w/0"} {"url": "http://mmbiz.qpic.cn/mmbiz/q9jYbRzAGeXKnahdcPUFjP6reSgVibIcKs52hkgzsmicAePy5BuqwdBfCzzL9MPEibjZ4vOEE4UP1HlOpIicibLobgA/0"}
2).上传图文消息素材
代码如下:
function upload_ctx() { //上传图文消息素材 $ACCESS_TOKEN = "DbEhmwXiL4RWRinpz2sAcfNLqk-PJwtt9esmkpmv4ycwYmCWOhEE7IoMDP31-lnJojKGR8QOP53sFvzzTXGVk3DQZrN7vT4lh8IST_GNhiNh7eBXVViMQI-ssLoOfKjnTGYbAGADQI"; $url = "https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=$ACCESS_TOKEN"; $data = ' { "articles": [{ "thumb_media_id": "nJdLOlZ1lPluJCph3OlnNEadys0CI43Zzwz75nrp7tcYw6JQIdKCMPr6z0GlDyBs", "author": "张仕铨", "title": "今天真快乐!", "content_source_url": "www.qq.com", "content": "遇上了你,是我这辈子最大的幸福,我一定会对你很好很好!", "digest": "首show", "show_cover_pic": 1 }, { "thumb_media_id": "g9QhTm0S6plcWiGqKSvBs5yb1NgKtT1DFGqRKffnFcgVgrOyiDaKyDmVDaX7GsOA", "author": "张弄影", "title": "洗啊洗啊洗白白!", "content_source_url": "www.163.com", "content": "洗洗睡吧,别多想了!", "digest": "发来看看", "show_cover_pic": 0 }] } '; $result = curl_http_post($url, $data); echo $result; }
为了偷懒,这里的thumb_media_id我直接是发送图片消息,然后公众号服务器接收消息处取来滴.
得到的返回值如下:
{"type":"news","media_id":"FIyDgwyCxVb4-FHyDJgnGX44BLWE7tGsvyiOA_xYpf9oRtZGjddqukBgZeFq6a8H","created_at":1468469203}
3).预览接口
微信提供在发送前,将该消息发送给指定用户,在手机端查看消息的样式和排版代码的功能.如下:
function preview() { //预览接口 $ACCESS_TOKEN = "DbEhmwXiL4RWRinpz2sAcfNLqk-PJwtt9esmkpmv4ycwYmCWOhEE7IoMDP31-lnJojKGR8QOP53sFvzzTXGVk3DQZrN7vT4lh8IST_GNhiNh7eBXVViMQI-ssLoOfKjnTGYbAGADQI"; $url = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=$ACCESS_TOKEN"; $data = ' { "touser": "oe5SXv71irmrQ0TH-JxA-z_hmYLE", "mpnews": {"media_id": "FIyDgwyCxVb4-FHyDJgnGX44BLWE7tGsvyiOA_xYpf9oRtZGjddqukBgZeFq6a8H"}, "msgtype": "mpnews" } '; $result = curl_http_post($url, $data); echo $result; }
得到的返回值如下:
{"errcode":0,"errmsg":"preview success"}界面效果如下:
分别点击2个图文之后,会看到以下内容:
和这个
注意1个界面显示图片,1个界面不显示.点击阅读原文,则会进入2).上传图文消息素材设置的站点.
4).根据OpenID列表群发(也可以是根据标签进行群发)
代码如下:
function send_openid() { //根据OpenID列表群发 $ACCESS_TOKEN = "DbEhmwXiL4RWRinpz2sAcfNLqk-PJwtt9esmkpmv4ycwYmCWOhEE7IoMDP31-lnJojKGR8QOP53sFvzzTXGVk3DQZrN7vT4lh8IST_GNhiNh7eBXVViMQI-ssLoOfKjnTGYbAGADQI"; $url = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=$ACCESS_TOKEN"; $data = ' { "touser": ["oe5SXv71irmrQ0TH-JxA-z_hmYLE", "oe5SXv45Fq5lcB5jlxdBs6QWPNj8"], "mpnews": {"media_id": "FIyDgwyCxVb4-FHyDJgnGX44BLWE7tGsvyiOA_xYpf9oRtZGjddqukBgZeFq6a8H"}, "msgtype": "mpnews" } '; $result = curl_http_post($url, $data); echo $result; }
得到的返回值如下:
{"errcode":0,"errmsg":"send job submission success","msg_id":3147483651,"msg_data_id":2247483654}群发的效果和预览的效果一样.因为在2).上传图文消息素材调用时show_cover_pic的值分别不同.
5).查询群发消息发送状态
代码如下:
function status() { //查询群发消息发送状态 $ACCESS_TOKEN = "DbEhmwXiL4RWRinpz2sAcfNLqk-PJwtt9esmkpmv4ycwYmCWOhEE7IoMDP31-lnJojKGR8QOP53sFvzzTXGVk3DQZrN7vT4lh8IST_GNhiNh7eBXVViMQI-ssLoOfKjnTGYbAGADQI"; $url = "https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=$ACCESS_TOKEN"; $data = '{"msg_id": "3147483651"}'; $result = curl_http_post($url, $data); echo $result; }得到的返回值如下:
{"msg_id":3147483651,"msg_status":"SEND_SUCCESS"}
6).删除群发
代码如下:
function delete() { //删除群发 $ACCESS_TOKEN = "DbEhmwXiL4RWRinpz2sAcfNLqk-PJwtt9esmkpmv4ycwYmCWOhEE7IoMDP31-lnJojKGR8QOP53sFvzzTXGVk3DQZrN7vT4lh8IST_GNhiNh7eBXVViMQI-ssLoOfKjnTGYbAGADQI"; $url = "https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=$ACCESS_TOKEN"; $data = '{"msg_id": "3147483651"}'; $result = curl_http_post($url, $data); echo $result; }
得到的返回值如下:
{"errcode":0,"errmsg":"ok"}此时,再点击相应的图文,则提示该消息已经被删除啦!!如下:
7).事件推送群发结果
官方文档上说:"由于群发任务提交后,群发任务可能在一定时间后才完成,因此,群发接口调用时,仅会给出群发任务是否提交成功的提示,若群发任务提交成功,则在群发任务结束时,会向开发者在公众平台填写的开发者URL(callback URL)推送事件。"我的结果如下:
<xml> <ToUserName><![CDATA[gh_056dd68c0c2a]]></ToUserName> <FromUserName><![CDATA[oe5SXvzMz7uoRjMv9NmTSsskNgnY]]></FromUserName> <CreateTime>1468469346</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[MASSSENDJOBFINISH]]></Event> <MsgID>3147483651</MsgID> <Status><![CDATA[send success]]></Status> <TotalCount>2</TotalCount> <FilterCount>2</FilterCount> <SentCount>2</SentCount> <ErrorCount>0</ErrorCount> </xml>