微信公众平台开发(89) 高级群发接口

时间:2014-05-02 00:18:54   收藏:0   阅读:1072

在这篇微信公众平台高级接口开发教程中,我们将介绍如何开发高级群发接口功能。

本文分为以下四个部分:

  1. 准备群发内容
  2. 选择群发对象
  3. 执行群发
  4. 接收群发结果

 

一、准备群发内容

群发内容可以是文本、图片、语音、视频、图文。群发文本只需要文本内容,其他内容需要获得相应的media_id。

1. 文本内容

文本内容就是一段文字,比如:"微信公众平台开发最佳实践"

2. 图片、语音、视频

要求如下:

准备好以后,需要使用上传下载多媒体文件接口将其上传到微信服务器,获得media_id
上传的开发方法,可以参考本博客的第80篇教程 微信公众平台开发(80) 上传下载多媒体文件

3. 图文

首先要准备缩略图,要求如下:

同样的,使用上传下载多媒体文件接口,上传到微信服务器后,得到缩略图的media_id,
然后需要使用上传图文消息素材接口将其上传到微信服务器,接口为

https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN

要POST提交的数据示例如下:

bubuko.com,布布扣
{
    "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"
        }
    ]
}
bubuko.com,布布扣

参数说明如下:

参数 是否必须 说明
Articles 图文消息,一个图文消息支持1到10条图文
thumb_media_id 图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口中获得
author 图文消息的作者
title 图文消息的标题
content_source_url 在图文消息页面点击“阅读原文”后的页面
content 图文消息页面的内容,支持HTML标签
digest 图文消息的描述

 根据上述POST结构,定义图文数组如下:

bubuko.com,布布扣
$news[] = array("thumb_media_id"=>$thumb_media_id1,
                "author"=>"",
                "title"=>"微信公众平台开发",
                "content_source_url" =>"",
                "content" =>"",
                "digest" =>""
                );

$news[] = array("thumb_media_id"=>$thumb_media_id2,
                "author"=>"方倍工作室",
                "title"=>"微信公众平台开发入门教程",
                "content_source_url" =>"http://m.cnblogs.com/99079/3153567.html?full=1",
                "content" =>"<div>
<p>本教程是微信公众平台的入门教程,它将引导你完成如下任务:</p>
<ol>
<li>1. 创建新浪云计算平台应用</li>
<li>2. 启用微信公众平台开发模式</li>
<li>3. 基础接口消息及事件</li>
<li>4. 微信公众平台PHP SDK</li>
<li>5. 微信公众平台开发模式原理</li>
<li>6. 开发天气预报功能</li>
</ol>
</div>",
                "digest" =>"微信公众平台开发经典的入门教程,学习微信公众平台开发必经之路!"
                );

$news[] = array("thumb_media_id"=>$thumb_media_id3,
                "author"=>"方倍工作室",
                "title"=>"微信公众平台开发最佳实践",
                "content_source_url" =>"http://m.cnblogs.com/?u=txw1958",
                "content" =>"<p>本书共分10章,案例程序采用广泛流行的PHP、MySQL、XML、CSS、JavaScript、HTML5等程序语言及数据库实现。系统完整地介绍微信公众平台基础接口、自定义菜单、高级接口、微信支付、分享转发等所有相关技术,以生活类、娱乐类、企业类微信开发为切入点,讲解了30多个功能或应用案例。<br>本书按照从简单到复杂,从基础到实践的方式编排,在讲解过程中注重将原理和实践相结合。初学者可以在了解PHP和MySQL语法之后,从头至尾学习,对于其中难以理解的部分可以查阅相关资料,针对企业功能类的开发还需要具有一定的JavaScript、CSS、HTML等编程基础。<br>本书可以作为微信公众平台开发的教程。对于移动互联网及微信公众平台的相关从业人员,本书也具有极大的参考价值。</p>",
                "digest" =>"微信公众平台开发含金量最高的书籍"
                );
bubuko.com,布布扣

上传图文消息素材的代码则实现如下:

 

bubuko.com,布布扣

上传成功后,返回如下,将得到图文消息的media_id

bubuko.com,布布扣
{
    "type":"news",
    "media_id":"CsEf3ldqkAYJAU6EJeIkStVDSvffUJ54vqbThMgplD-VJXXof6ctX5fI6-aYyUiQ",
    "created_at":1391857799
}
bubuko.com,布布扣

 

二、选择群发对象

群发对象可以是用户组,也可以是OpenID列表。

1.用户组

获得用户分组,需要使用高级接口中的查询所有分组接口,获得相应的group_id,
开发方法,可以参考本博客的第88篇教程 微信公众平台开发(88) 用户分组接口

2.OpenID列表

OpenID列表,是使用高级接口中的获取关注者列表接口来实现的。
开发方法,可以参考本博客的第87篇教程 微信公众平台开发(87) 获取关注者列表

 

三、执行群发

由于群发对象的不同,执行群发也有不同的方式。

1. 对用户组群发

对用户组群发的接口如下:

https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN

要POST的内容按内容不同组成也不一样。

文本:

bubuko.com,布布扣
{
   "filter":{
      "group_id":"2"
   },
   "text":{
      "content":"CONTENT"
   },
    "msgtype":"text"
}
bubuko.com,布布扣

语音(注意此处media_id需通过基础支持中的上传下载多媒体文件来得到):

bubuko.com,布布扣
{
   "filter":{
      "group_id":"2"
   },
   "voice":{
      "media_id":"123dsdajkasd231jhksad"
   },
    "msgtype":"voice"
}
bubuko.com,布布扣

图片(注意此处media_id需通过基础支持中的上传下载多媒体文件来得到):

bubuko.com,布布扣
{
   "filter":{
      "group_id":"2"
   },
   "image":{
      "media_id":"123dsdajkasd231jhksad"
   },
    "msgtype":"image"
}
bubuko.com,布布扣

视频

bubuko.com,布布扣
{
   "filter":{
      "group_id":"2"
   },
   "mpvideo":{
      "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc",
   },
    "msgtype":"mpvideo"
}
bubuko.com,布布扣

图文消息(注意图文消息的media_id需要通过上述方法来得到):

bubuko.com,布布扣
{
   "filter":{
      "group_id":"2"
   },
   "mpnews":{
      "media_id":"123dsdajkasd231jhksad"
   },
    "msgtype":"mpnews"
}
bubuko.com,布布扣

相关参数说明如下:

参数 是否必须 说明
filter 用于设定图文消息的接收者
group_id 群发到的分组的group_id
mpnews 用于设定即将发送的图文消息
media_id 用于群发的消息的media_id
msgtype 群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video
title 消息的标题
description 消息的描述
thumb_media_id 视频缩略图的媒体ID

其接口实现代码如下所示:

bubuko.com,布布扣

返回结果如下:

bubuko.com,布布扣
array(3) {
  ["errcode"]=>
  int(0)
  ["errmsg"]=>
  string(27) "send job submission success"
  ["msg_id"]=>
  float(2347614963)
}
bubuko.com,布布扣

参数说明

参数 说明
type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb),图文消息为news
errcode 错误码
errmsg 错误信息
msg_id 消息ID

下面是向用户组发送图文消息的效果,分别是接收到图文消息,查看图文消息内容后的效果,

bubuko.com,布布扣bubuko.com,布布扣

2.对OpenID列表群发

接口如下:

https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN

POST数据示例如下:
文本:

bubuko.com,布布扣
{
   "touser": [
        "oR5Gjjl_eiZoUpGozMo7dbBJ362A", 
        "oR5Gjjo5rXlMUocSEXKT7Q5RQ63Q" 
    ], 
    "msgtype": "text", 
    "text": { 
        "content": "hello from boxer."
    }
}
bubuko.com,布布扣

语音:

bubuko.com,布布扣
{
   "touser":[
        "OPENID1",
        "OPENID2"
   ],
   "voice":{
      "media_id":"mLxl6paC7z2Tl-NJT64yzJve8T9c8u9K2x-Ai6Ujd4lIH9IBuF6-2r66mamn_gIT"
   },
   "msgtype":"voice"
}
bubuko.com,布布扣

图片:

bubuko.com,布布扣
{
   "touser":[
    "OPENID1",
    "OPENID2"
   ],
   "image":{
      "media_id":"BTgN0opcW3Y5zV_ZebbsD3NFKRWf6cb7OPswPi9Q83fOJHK2P67dzxn11Cp7THat"
   },
   "msgtype":"image"
}
bubuko.com,布布扣

视频:

bubuko.com,布布扣
{
   "touser":[
        "OPENID1",
        "OPENID2"
   ],
   "video":{
      "media_id":"123dsdajkasd231jhksad",
      "title":"TITLE",
      "description":"DESCRIPTION"
   },
   "msgtype":"video"
}
bubuko.com,布布扣

图文消息(注意图文消息的media_id需要通过上述方法来得到):

bubuko.com,布布扣
{
   "touser":[
        "OPENID1",
        "OPENID2"
   ],
   "mpnews":{
        "media_id":"123dsdajkasd231jhksad"
   },
   "msgtype":"mpnews"
}
bubuko.com,布布扣

参数列表

参数 是否必须 说明
touser 填写图文消息的接收者,一串OpenID列表,OpenID最少个,最多10000个
mpnews 用于设定即将发送的图文消息
media_id 用于群发的图文消息的media_id
msgtype 群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video
title 消息的标题
description 消息的描述
thumb_media_id 视频缩略图的媒体ID

返回数据示例(正确时的JSON返回结果):

bubuko.com,布布扣
{
    "errcode":0,
    "errmsg":"send job submission success",
    "msg_id":2347614964
}
bubuko.com,布布扣

 

四、接收群发结果   

1. 设置公众号助手

为了能接收群发结果,需要设置公众号助手,结果将推送到绑定的个人微信账号上。其设置如下

bubuko.com,布布扣

2. 接收结果事件

群发任务提交后,群发任务可能在一定时间后才完成,因此,群发接口调用时,仅会给出群发任务是否提交成功的提示,若群发任务提交成功,则在群发任务结束时,会向开发者在公众平台填写的开发者URL(callback URL)推送事件。

推送的XML结构如下(发送成功时):

bubuko.com,布布扣
<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>
bubuko.com,布布扣
参数 说明
ToUserName 公众号的微信号
FromUserName 公众号群发助手的微信号,为mphelper
CreateTime 创建时间的时间戳
MsgType 消息类型,此处为event
Event 事件信息,此处为MASSSENDJOBFINISH
MsgID 群发的消息ID
Status 群发的结构,为“send success”或“send fail”或“err(num)”。但send success时,也有可能因用户拒收公众号的消息、系统错误等原因造成少量用户接收失败。err(num)是审核失败的具体原因,可能的情况如下:

err(10001), //涉嫌广告 err(20001), //涉嫌政治 err(20004), //涉嫌社会 err(20002), //涉嫌色情 err(20006), //涉嫌违法犯罪 err(20008), //涉嫌欺诈 err(20013), //涉嫌版权 err(22000), //涉嫌互推(互相宣传) err(21000), //涉嫌其他

TotalCount group_id下粉丝数;或者openid_list中的粉丝数
FilterCount 过滤(过滤是指特定地区、性别的过滤、用户设置拒收的过滤,用户接收已超4条的过滤)后,准备发送的粉丝数,原则上,FilterCount = SentCount + ErrorCount
SentCount 发送成功的粉丝数
ErrorCount 发送失败的粉丝数

从上可以看出,这其实是公众号群发助手模拟向公众号发送消息,那么群发结果也是返回给公众号助手。

在微信公众平台PHP SDK中增加该事件消息的处理结果如下:

bubuko.com,布布扣
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;
}
bubuko.com,布布扣

 

====================================================================

方倍工作室微信公众平台账号关注方法:
1. 微信通讯录-添加朋友-查找公众号-搜索“方倍工作室”
2. 微信通讯录-添加朋友-搜号码-输入“pondbaystudio”
3. 使用微信扫描下面的二维码

bubuko.com,布布扣

 

 

微信公众平台开发(89) 高级群发接口,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!