1、公众号申请地址:http://official.101.com/
2、开发者接口地址:http://official-account.edu.web.sdp.101.com
备注:更多问题咨询请关注“公众号开发者助手”公众号
开发者可以主动调用第三方开发接口,完成更多功能,具体接口文档详见下文。第三开发接口使用步骤如下:
第三方开发者模式需要先开启第三方开发者模式,获取接口凭证后才能调用。进入公众号网站高级功能 — 开发接口,将模式设为开发模式。
开发者使用第三方接口前,需要获取接口调用凭证,即APPID和SECRET_KEY,未获取APPID和SECRET_KEY或忘记SECRET_KEY,进入公众号后台管理页面 – 高级功能 - 开发接口页,在开发者模式下,点击重置密码获取。
APPID和SECRET_KEY是用于开发者调用第三方接口的凭据,请妥善保管,若信息泄露请及时重置,每次重置后都会重新生成SECRET_KEY。
第三方开发接口请求示例及响应内容使用json格式,每次调用接口时,需要带上接口调用凭证,header设置如下:
Content-Type: application/json
Authorization: APP appid=,token=md5({appid}{secret_key})
例:APPID=3d13c75e2d86d782,SECRET_KEY=4505f7533a81e23750dff69dfdd80dc47e1a76a3,则header设置:
Content-Type: application/json
Authorization: APP appid= 3d13c75e2d86d782,token= 8dfff626cfc978aa8b6a6821073727d9
1、接口请求数据为json格式utf8编码,特殊说明除外。
2、接口返回数据为json格式。
开发者若需要接收用户消息,需要配置服务器信息,配置后,用户发送给公众号的消息及菜单点击等事件将推送到开发者配置的服务器URL,配置步骤:
登录公众号管理后台,在公众号后台管理页面 – 高级功能 - 开发接口页,将模式设为开发者模式(编辑模式使用管理后台定义的自动回复及菜单功能,开发模式下才能使用第三方接口功能,开发模式下网站设置的自动回复和菜单功能将失效,两种模式二选一),填写服务器信息(URL、Token),其中URL是开发者用来接收消息的接口URL(该URL接口需先实现验证代码,验证方法见步骤2)。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。
开发者提交信息后,服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
| 参数 | 描述 |
|---|---|
| signature | 加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
| timestamp | 时间戳 |
| nonce | 随机数 |
| echostr | 随机字符串 |
开发者通过检验signature对请求进行校验(校验方式如下)。若确认此次GET请求来自服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
校验流程如下:
1.将token、timestamp、nonce三个参数字符串顺序拼接成一个字符串进行sha1加密。
2.开发者获得加密后的字符串可与signature对比,相等则原样返回echostr内容,接入成功,否则接入失败。
php示例代码:
define("TOKEN", "oa");
$oaObj = new oaCallbackapiTest();
$oaObj->valid();
class oaCallbackapiTest{
public function valid(){
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;exit;
}else{
echo 'error';exit;
}
}
private function checkSignature(){
if (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpStr = $token.$timestamp.$nonce;
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
Java示例代码:
public class TokenServlet extends HttpServlet {
private static final String TOKEN= "oa";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
String tmpStr = TOKEN + timestamp + nonce;
tmpStr = DigestUtils.sha1Hex(tmpStr);
if(tmpStr.equals(signature)){
out.print(echostr);
}else{
out.print("error");
}
out.close();
out = null;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {}
public void init() throws ServletException {}
public void destroy() {super.destroy(); }
}
验证服务器地址成功后即接入生效,根据公众号类型(企业号、订阅号)使用对应权限的接口,以满足开发者需求。 公众号服务器将会推送消息给开发者配置的URL,消息包括用户发送给公众号的文本消息、语音消息、图片消息及产生的菜单事件消息、订阅事件消息,开发者可以根据收到的消息内容进行消息回复等业务逻辑操作。
开发者在使用第三方接口功能时,需遵守以下规范:
收集用户数据后,必须保护用户数据安全,防止用户数据泄露,被不法分子利用;不得使用数据对用户给用户造成不良影响,损害用户利益。
不能发布任何法律、法规和政策禁止的内容。
调用第三方接口错误时,返回错误信息
{
"code": "IMP/INVALID_ARGUMENT",
"message": "无效参数(格式不对,长度过长或过短等)",
"realm": "im.core.sdp.nd",
"host_id": "official-account.edu.web.sdp.101.com",
"request_id": "e340a3d3-3d9f-423f-982f-ff0b5fb4afed",
"server_time": "2015-11-06T06:31:36.951+0000"
}
| 字段 | 描述 |
|---|---|
| code | 用来表示某类的错误,如缺少参数、类型不匹配等等,用来对 http status code 进行扩展,开发人员可以据此进行错误的细节处理。详见错误代码表 |
| message | 错误的摘要信息 |
| request_id | 错误的uuid |
| host_id | 发生错误的服务器 |
| server_time | 发生错误时的服务器时间 |
| status code | code | 描述 |
|---|---|---|
| 400 | IMP/BAD_REQUEST | 无效请求 |
| 400 | IMP/REQUIRE_ARGUMENT | 缺少参数 |
| 400 | IMP/INVALID_ARGUMENT | 无效参数(格式不对,长度过长或过短等) |
| 401 | IMP/UNAUTHORIZED | 未授权(默认) |
| 401 | IMP/AUTH_DENIED | 授权受限(无权限或IP地址受限等) |
| 403 | IMP/ACCESS_DENIED | 不允许访问 |
| 500 | IMP/INTERNAL_SERVER_ERROR | 服务器内部错误 |
| 404 | IMP/OA_NOT_FOUND | 公众号未找到 |
| 400 | IMP/PUBLISH_MENU_FAILURE | 发布菜单失败 |
| 400 | IMP/ADD_TAG_FAILURE | 添加分组失败 |
| 400 | IMP/UPDATE_TAG_FAILURE | 修改分组失败 |
| 400 | IMP/DELETE_TAG_FAILURE | 删除分组失败 |
| 404 | IMP/TAG_NOT_FOUND | 分组不存在 |
| 400 | IMP/USER_TAG_COUNT_OVER_RANGE | 分组数不能超过10个 |
| 400 | IMP/USER_JOIN_TAG_FAILURE | 用户加入分组失败 |
| 400 | IMP/USER_NOT_FOUND | 用户不存在或未关注公众号 |
| 400 | IMP/GROUP_MSG_COUNT_NO_LEFT | 剩余群发数目为0 |
| 400 | IMP/GROUP_NOT_FOUND | 群组未找到 |
| 400 | IMP/GROUP_SEND_FAILURE | 群组未找到 |
| 400 | IMP/GROUP_NOT_FOUND | 群消息发送失败 |
| 400 | IMP/NODE_NOT_FOUND | 组织节点未找到 |
| 400 | IMP/SERVICE_NO_SUB | 该用户未关注或已取消关注,无法进行对话 |
| 400 | IMP/MESSAGE_SEND_FAILURE | 发送消息失败 |
| 400 | IMP/MESSAGE_CONTENT_OVERLENGTH | 消息内容不超过4kb |
| 400 | IMP/MESSAGE_CONTENT_ERROR | 消息内容编码错误 |
| 400 | IMP/ADD_MATERIAL_FAILURE | 添加素材失败 |
| 400 | IMP/UPDATE_MATERIAL_FAILURE | 修改素材失败 |
| 400 | IMP/DELETE_MATERIAL_FAILURE | 删除素材失败 |
| 404 | IMP/MATERIAL_NOT_FOUND | 素材不存在 |
| 400 | IMP/UPLOAD_AUDIO_FAILURE | 上传音频失败 |
| 400 | IMP/MATERIAL_NOT_FOUND | 语音时长太短 |
开发者通过单发接口可直接推送消息给用户。
http请求方式:POST
http://official-account.edu.web.sdp.101.com/app/messages/chat
{
"user_id":123456,
"login_name":"123456@nd",
"type":"text",
"content":"文本消息"
}
| 参数 | 描述 |
|---|---|
| user_id | 用户ID,user_id与login_name二选一 |
| login_name | 用户登录名,即工号@org_name或手机号@org_name或用户名@org_name,user_id与login_name二选一 |
| type | 消息类别,文本(text)、图片(image)、图文(article)、窗口(box) ,必填 |
| content | 发送内容,type=text时为文本内容,换行符\n,大小不超过4k,type=image时为图片素材ID(material_id),type=article时为图文素材ID(material_id),与素材管理接口中语音素材ID对应,type=box时为窗口消息内容(详见box消息规范),1~2000个字符,必填 |
{
"message_id":123
}
| 字段 | 描述 |
|---|---|
| message_id | 消息ID |
错误返回码code详见全局错误返回说明
开发者也可以通过第三方群发接口,实现更灵活的群发功能。订阅号每天群发数目可通过IM企业后台配置,默认3条,企业号群发数目暂不限制。
http请求方式:POST
http://official-account.edu.web.sdp.101.com/app/messages/group
{
"type":"text",
"content":"文本消息",
"tag_id":123,
"node_id":123,
"gno":"12312"
}
| 参数 | 描述 |
|---|---|
| type | 消息类别,文本(text)、图片(image)、语音(audio)、图文(article)、窗口(box) ,必填 |
| content | 发送内容,type=text时为文本内容,换行符\n,大小不超过4k,type=image时为图片素材ID(material_id),type=article时为图文素材ID(material_id),与素材管理接口中语音素材ID对应,type=box时为窗口消息内容(详见box消息规范),1~2000个字符,必填 |
| tag_id | 用户分组ID ,企业号tag_id、node_id和gno三选一,订阅号可选 |
| node_id | 组织节点ID,企业号tag_id、node_id和gno三选一,仅限企业号,node_id=0时发送给全部用户 |
| gno | 群号,企业号tag_id、node_id和gno三选一,仅限企业号 |
{
"message_id":123
}
| 字段 | 描述 |
|---|---|
| message_id | 消息ID |
错误返回码code详见全局错误返回说明
开发者也可以通过第三方群发接口,实现更灵活的群发功能。订阅号每天群发数目可通过IM企业后台配置,默认3条,企业号群发数目暂不限制。订阅号只能按tag模式发送消息,企业号支持所有模式发送消息
http请求方式:POST
http://official-account.edu.web.sdp.101.com/app/messages
//node模式(组织节点):
{
"type":"text",
"content":"文本消息",
"terms":{
"name":"node", //固定
"args":{
"node_id":123 //组织节点ID,node_id为0时群发给全部用户
}
}
}
//tag模式(分组ID):
{
"type":"text",
"content":"文本消息",
"terms":{
"name":"tag", //固定
"args":{
"tag_id":123 //用户分组ID
}
}
}
//gno模式(群号):
{
"type":"text",
"content":"文本消息",
"terms":{
"name":"gno", //固定
"args":{
"gno":"123" //群号
}
}
}
//p2p模式(双人会话):
{
"type":"text",
"content":"文本消息",
"terms":{
"name":"p2p", //固定
"args":{
"p2p_uri":[ //接收消息二人会话的用户ID,最多50对
["803404","850917"],
["803404","850916"],
...
]
}
}
}
//uri模式(用户ID):
{
"type":"text",
"content":"文本消息",
"terms":{
"name":"uri", //固定
"args":{
"uri_list":["803404","850917",...] //接收消息的用户ID,最多50个
}
}
}
| 参数 | 描述 |
|---|---|
| type | 消息类别,文本(text)、图片(image)、语音(audio)、图文(article)、窗口(box) ,必填 |
| content | 发送内容,type=text时为文本内容,换行符\n,大小不超过4k,type=image时为图片素材ID(material_id),type=article时为图文素材ID(material_id),与素材管理接口中语音素材ID对应,type=box时为窗口消息内容(详见box消息规范),1~2000个字符,必填 |
| terms | 群发条件参数,必填 |
| name | 群发消息条件类型,node(按组织节点群发)、tag(按分组群发)、gno(按群号群发)、p2p(按双方会话群发即发送消息至二人对话)、uri(按用户ID群发) |
| tag_id | 用户分组ID,订阅号或应用号,name=tag时必填 |
| node_id | 组织节点ID,仅限应用号,name=node时必填,node_id=0时发送给全部用户 |
| gno | 群号,仅限应用号,name=gno时必填 |
| p2p_uri | 接收消息二人会话的用户ID,最多50对,仅限应用号,name=p2p时必填 |
| uri | 接收消息的用户ID,最多50个,仅限应用号,name=uri时必填 |
{
"message_id":123
}
| 字段 | 描述 |
|---|---|
| message_id | 消息ID |
错误返回码code详见全局错误返回说明
<box data-summary="等级提升通知" >
<div class="row">
<div class="col-6">
<span>恭喜您,等级提升到</span><span style="color: #c67796;">5级</span>
</div>
</div>
</box>
注意:box消息严格遵守xml规范,box中的文本,如特殊字符(空格,>, < 等),请确保按照xml标准进行转义
| 字段 | 描述 |
|---|---|
| box | 窗口消息的根标签 |
| box[data-summary] | 窗口消息的摘要描述文本,客户端会将它显示在最近聊天窗口的会话内容中 |
| box[data-replaceid] | data-replaceid="代理标识_代理自定义id",作为box消息消息替换的唯一标识;消息支持覆盖替换,如果data-replaceid与旧的box消息相同,客户端则进行消息覆盖处理,否则作为新消息展示 |
| box.div | 窗口消息的栅格化布局,参考“栅格化布局规范” |
栅格化布局用于通过一系列的行(row)与列(column)的组合来排列消息体内容,你的内容就可以放入这些创建好的布局中。
消息体定义中,可以使用box识别的几种标签(文本、图片、按钮),按照每一行,放入多少列的标签来进行布局,客户端会根据box中排列最多的列数来算出一个消息展示在聊天窗的真正宽度。
目前box消息体支持6列,每一列的宽度,根据手机屏幕展示消息最大宽度除以6来计算,因此,每一列的宽度是相对宽度
<div class="row">
<div class="col-1"><span>.col-1</span></div>
<div class="col-1"><span>.col-1</span></div>
<div class="col-1"><span>.col-1</span></div>
<div class="col-1"><span>.col-1</span></div>
<div class="col-1"><span>.col-1</span></div>
<div class="col-1"><span>.col-1</span></div>
</div>
<div class="row">
<div class="col-4" style="text-align:center"><span>.col-2</span></div>
<div class="col-2"style="text-align:left"><span>.col-4</span></div>
</div>
<div class="row">
<div class="col-3" style="text-align:right"><span>.col-3</span></div>
<div class="col-3"><span>.col-3</span></div>
</div>
<div class="row">
<div class="col-2"><span>.col-2</span></div>
<div class="col-2"><span>.col-2</span></div>
<div class="col-2"><span>.col-2</span></div>
</div>
<div class="row">
<div class="col-6"><span>.col-6</span></div>
</div>
说明:
div.row:表示一行布局
div.col-1: 表示一行布局中的 1 列,占用整行布局的 1/6
div.col-2: 表示一行布局中的 2 列,占用整行布局的 2/6
div.col-3: 表示一行布局中的 3 列,占用整行布局的 3/6
div.col-4: 表示一行布局中的 4 列,占用整行布局的 4/6
div.col-6: 表示一行布局中的 6 列,占满整行布局
col 支持对齐:左对齐(text-align:left),默认对齐格式、右对齐(text-align:right)、居中对齐(text-align:center)
<span>这是一段文本消息</span> <span>这是一段</span><span style="color:#FFFFFF">包含红色文本<span><span>消息</span>。 <span>这是一段</span><span style="text-decoration:underline">下划线文本<span><span>消息</span>。 <span>这是一段</span><span style="font-weight:bold">加粗文本</span><span>消息</span>。 <span>这是一段</span><span style="font-size:1.2em">特定字体大小文本</span><span>消息</span>。
说明:
span[style=""] 表示文本的样式,目前支持color, text-decoration,font-weight,font-size 样式
span[style="font-size:1.2em"] 考虑到手机上不同屏幕分辨率,font-size 只支持em属性,即在手机默认字体大小上的放大倍数
<button class="link-default" data-href="cmp://com.nd.weibo/home_page/?uid=1223" style="color: red;">
默认链接
</button>
<button class="btn-default" data-href="cmp://com.nd.weibo/home_page/?uid=1223" disabled="disabled">
默认按钮
</button>
<button class="arrow-default" data-href="cmp://com.nd.weibo/home_page/?uid=1223">
箭头文字
</button>
说明:
button[class="btn-default"]: 按钮样式
button[class="arrow-defult"]: 按钮箭头,默认向右箭头样式;
button[class="link-default"]: 链接样式
button[data-href="url"]: 页面/事件跳转地址;
button[style="..."]: 按钮/链接样式;
button[disabled="disabled"]: 设置按钮/链接不可点击并置灰;不填表示可点击
<img src="dentry://12392138091230921" class="img-square" mime="jpeg" width="240px" height="320px"
size="1201024" alt="图片说明"/>
说明:
img[class=image-square]:图片显示为正方形,如果是矩形原图会做裁剪
img[class=image-default]:图片显示为正常高宽比例的缩略图
img[src]: 图片的内容来源,protocol:// + 内容的形式:
内容服务:img[src]= "dentry://12392138091230921",dentry值为图片素材中source_id
用户头像:img[src] = "user://3489348",user值为用户ID
HTTP图片:img[src] = "https://www.baidu.com/img/bdlogo.png"
当用户向公众号发送消息时,公众号服务器将发送POST请求开发者配置的URL,发送消息数据,消息数据格式如下:
{
"oa_id":100,
"user_id":123456,
"type":"text",
"content":"文本消息"
}
| 字段 | 描述 |
|---|---|
| oa_id | 公众号编号 |
| user_id | 用户ID |
| type | 消息类型,文本消息为text |
| content | 文本消息内容 |
{
"oa_id":100,
"user_id":123456,
"type":"image",
"content":{
"source_id":"96340084-775d-4740-ae3f-b2dea289618b",
"mime":"jpeg",
"width":240,
"height":320,
"size":1024,
"title":"图片标题",
"md5":"827ccb0eea8a706c4c34a16891f84e7b"
}
}
| 字段 | 描述 |
|---|---|
| oa_id | 公众号编号 |
| user_id | 用户ID |
| type | 消息类型,图片消息为image |
| source_id | 内容服务目录项ID(文件资源ID),获取详见内容服务说明 |
| mime | 图片格式(参考HTTP mime定义 ) |
| width | 图片宽度(pixel) |
| height | 图片高度(pixel) |
| size | 图片大小(byte) |
| title | 图片标题,长度不超过64个字符 |
| md5 | 文件md5 |
{
"oa_id":100,
"user_id":123456,
"type":"audio",
"content":{
"title":"标题",
"src":"96340084-775d-4740-ae3f-b2dea289618b ",
"mime":"amr",
"dura":12,
"size":3076,
"md5":"bcb31b38e4c01691881e38023dea69e9"
}
}
| 字段 | 描述 |
|---|---|
| oa_id | 公众号编号 |
| user_id | 用户ID |
| type | 消息类型,语音消息为audio |
| title | 语音标题,1~20个字符 |
| src | 内容服务目录项ID(文件资源ID),获取详见内容服务说明 |
| mime | 音频格式(参考HTTP mime定义 ) |
| dura | 音频持续时长(ms) |
| size | 音频文件大小(byte) |
| md5 | 文件MD5 |
{
"oa_id":100,
"user_id":123456,
"type":"event",
"content":{
"name":"click",
"key":"V_1001_SUB_BUTTON"
}
}
| 字段 | 描述 |
|---|---|
| oa_id | 公众号编号 |
| user_id | 用户ID |
| type | 消息类型,事件消息为event |
| name | 事件类型,菜单点击事件为click,关注订阅号事件为oa_subscribe,收藏应用号事件为oa_collect |
| key | 事件代码,type为click时与自定义菜单接口中KEY值对应,type为oa_subscribe或oa_collect时无key值 |
当开发者收到用户向公众号发送的消息时,可以根据消息结构(详见“二、接收消息”)进行响应,公众号根据响应的数据回复给用户,回复类型支持文本、图片、图文、语音、窗口消息等。
如果开发者服务器无法及时回复消息,必须做出响应,如直接回复success,避免公众号服务器对此作其他处理或重试,响应后可以异步调用消息接口(祥见消息接口说明)发送消息给用户。
{
"oa_id":100,
"user_id":123456,
"msg":{
"type":"text",
"content":"文本消息"
}
}
| 参数 | 描述 |
|---|---|
| oa_id | 公众号编号 |
| user_id | 用户ID |
| type | 消息类别,文本(text)、图片(image)、语音(audio)、图文(article)、窗口(box) ,必填 |
| content | 回复消息内容,type=text时为文本内容,大小不超过4k,type=image时为图片素材ID(material_id),type=article时为图文素材ID(material_id),与素材管理接口中语音素材ID对应,type=box时为窗口消息内容(详见box消息规范),1~2000个字符,必填 |
上传图片/语音并添加到公众号素材库。
http请求方式:POST
添加图片:http://official-account.edu.web.sdp.101.com/app/materials/images
添加语音:http://official-account.edu.web.sdp.101.com/app/materials/audios
Content-Type: multipart/form-data; boundary=---------------------------bcff34665164
Content-Length: {请求数据长度}
-----------------------------bcff34665164
Content-Disposition: form-data; name="title"
{图片/语音标题}
-----------------------------bcff34665164
Content-Disposition: form-data; name="file"; filename="{文件名.扩展名}"
Content-Type: {文件mime}
{文件块数据}
-----------------------------bcff34665164
| 字段 | 描述 |
|---|---|
| file | 图片/语音文件数据,图片支持bmp/png/jpeg/jpg/gif格式,图片大小不超过2M,语音支持mp3/wav/amr格式,语音大小不超过5M |
| title | 图片/语音标题,长度不超过64个字符,必填 |
{
"material_id":123
}
| 字段 | 描述 |
|---|---|
| material_id | 素材ID |
添加图文素材到素材库,图文封面图片参数需先调用添加图片接口,根据图片素材接口返回的素材ID获取。
http请求方式:POST
http://official-account.edu.web.sdp.101.com/app/materials/articles
{
"type":"article",
"content": [
{
"author":"作者",
"title":"标题",
"cover": {
"source_id":"96340084-775d-4740-ae3f-b2dea289618b",
"mime":"jpeg",
"width":240,
"height":320,
"size":1201024,
"title":"图片标题",
"md5":"1146ccc9a0e484f59ff14f8b654f81e1"
},
"summary":"xxx",
"content":"图文正文内容",
"from_url":"http://www.baidu.com"
},
... //单图文一个,多图文多个,最多不超过8个
]
}
| 字段 | 描述 |
|---|---|
| author | 作者,长度不超过8个字符,可选 |
| title | 标题,长度不超过50个字,必填 |
| cover | 图片参数,必填 |
| cover.source_id | 图片上传到内容服务后返回的dentryId,必填 |
| cover.mime | 图片格式(参考HTTP mime定义 ),必填 |
| cover.width | 图片宽度(pixel),必填 |
| cover.height | 图片高度(pixel),必填 |
| cover.size | 图片大小(byte),必填 |
| cover.title | 图片标题,长度不超过64个字符,必填 |
| cover.md5 | 图片文件md5,必填 |
| summary | 摘要,长度不超过120个字,单图文添加或修改素材时可选,多图文不填 |
| content | 图文正文内容,长度不超过20000个字,添加或修改素材时必填 |
| from_url | 原文链接,可选 |
{
"material_id":123
}
| 字段 | 描述 |
|---|---|
| material_id | 素材ID |
错误返回码code详见全局错误返回说明
对图片标题、语音标题、图文信息进行修改。
http请求方式:PATCH
http://official-account.edu.web.sdp.101.com/app/materials/{material_id}
//图片
{
"type":"image",
"content":{
"title":"图片标题"
}
}
//语音
{
"type":"audio",
"content":{
"title":"语音标题"
}
}
//图文
{
"type":"article",
"content": [
{
"article_id":123,
"author":"作者",
"title":"标题",
"cover": {
"source_id":"96340084-775d-4740-ae3f-b2dea289618b",
"mime":"jpeg",
"width":240,
"height":320,
"size":1201024,
"title":"图片标题",
"md5":"1146ccc9a0e484f59ff14f8b654f81e1"
},
"summary":"xxx",
"content":"图文正文内容",
"from_url":"http://www.baidu.com"
},
... //单图文一个,多图文多个,最多不超过8个
]
}
//图片
| 参数 | 描述 |
|---|---|
| type | 素材类型,图片素材为image |
| title | 图片标题,长度不超过64个字符,必填 |
//语音
| 参数 | 描述 |
|---|---|
| type | 素材类型,语音素材为audio |
| title | 标题,1~20个字符,必填 |
//图文
| 参数 | 描述 |
|---|---|
| type | 素材类型,图文素材为article,必填 |
| article_id | 图文唯一标识,可选,修改时有填则覆盖原来的图文,不传则重新生成一条图文 |
| author | 作者,长度不超过8个字符,可选 |
| title | 标题,长度不超过50个字,必填 |
| cover | 图片参数,必填 |
| cover.source_id | 图片上传到内容服务后返回的dentryId,必填 |
| cover.mime | 图片格式(参考HTTP mime定义 ),必填 |
| cover.width | 图片宽度(pixel),必填 |
| cover.height | 图片高度(pixel),必填 |
| cover.size | 图片大小(byte),必填 |
| cover.title | 图片标题,长度不超过64个字符,必填 |
| cover.md5 | 图片文件md5,必填 |
| summary | 摘要,长度不超过120个字,单图文添加或修改素材时可选,多图文不填 |
| content | 图文正文内容,长度不超过20000个字,添加或修改素材时必填 |
| from_url | 原文链接,可选 |
{
"material_id":123
}
| 字段 | 描述 |
|---|---|
| material_id | 素材ID |
错误返回码code详见全局错误返回说明
通过本接口可以删除公众号素材。
http请求方式:DELETE
http://official-account.edu.web.sdp.101.com/app/materials/{material_id}
无
无
{
"material_id":123
}
| 字段 | 描述 |
|---|---|
| material_id | 素材ID |
错误返回码code详见全局错误返回说明
获取单个素材详细信息。
http请求方式:GET
http://official-account.edu.web.sdp.101.com/app/materials?type={type}[&$offset={offset}][&$limit={limit}]
无
| 参数 | 描述 |
|---|---|
| type | 素材类型,图片(image)、图文(article),必填 |
| $offset | 从0开始,获取位置偏移,可选 |
| $limit | 返回条数,缺省为10条,可选,最大值不超过100 |
//图片
{
"count":100,
"items":[
{
"material_id":12323,
"update_time":123,
"type":"image",
"content":{
"source_id":"96340084-775d-4740-ae3f-b2dea289618b",
"mime":"jpeg",
"width":240,
"height":320,
"size":1201024,
"title":"图片标题",
"md5":"1146ccc9a0e484f59ff14f8b654f81e1"
}
},
...
]
}
//语音
{
"count":100,
"items":[
{
"material_id":12323,
"update_time":123,
"type":"image",
"content":{
"title":"标题",
"src":"c9836767-a64e-439b-a689-13c5f7adeb6f",
"mime":"amr",
"dura":12,
"size":3076,
"md5":"bcb31b38e4c01691881e38023dea69e9"
}
},
...
]
}
//图文
{
"count":100,
"items":[
{
"material_id":12323,
"update_time":123,
"type":"image",
"content": [
{
"article_id":123,
"href": "http://xxx",
"author":"作者",
"title":"标题",
"cover": {
"source_id":"96340084-775d-4740-ae3f-b2dea289618b",
"mime":"jpeg",
"width":240,
"height":320,
"size":1201024,
"title":"图片标题",
"md5":"1146ccc9a0e484f59ff14f8b654f81e1"
},
"summary":"xxx",
"from_url":"http://www.baidu.com"
},
...
]
},
...
]
}
//图片
| 字段 | 描述 |
|---|---|
| count | 素材总数 |
| material_id | 素材ID |
| update_time | 素材修改时间 |
| type | 素材类型,图片素材为image |
| source_id | 图片上传到内容服务后返回的dentryId |
| mime | 图片格式(参考HTTP mime定义 ) |
| width | 图片宽度(pixel) |
| height | 图片高度(pixel) |
| size | 图片大小(byte) |
| title | 图片标题,长度不超过64个字符 |
| md5 | 图片文件md5 |
//语音
| 字段 | 描述 |
|---|---|
| count | 素材总数 |
| material_id | 素材ID |
| update_time | 素材修改时间 |
| type | 素材类型,语音素材为audio |
| src | 语音上传到内容服务后返回的dentryId |
| mime | 语音格式(参考HTTP mime定义 ) |
| dura | 音频持续时间 |
| size | 图片高度(pixel) |
| size | 音频文件大小(byte) |
| md5 | 语音文件md5 |
//图文
| 字段 | 描述 |
|---|---|
| count | 素材总数 |
| material_id | 素材ID |
| update_time | 素材修改时间 |
| type | 素材类型,图文素材为article |
| author | 作者,长度不超过8个字符 |
| title | 标题,长度不超过50个字 |
| cover | 图片参数 |
| cover.source_id | 图片上传到内容服务后返回的dentryId |
| cover.mime | 图片格式(参考HTTP mime定义 ) |
| cover.width | 图片宽度(pixel) |
| cover.height | 图片高度(pixel) |
| cover.size | 图片大小(byte) |
| cover.title | 图片标题,长度不超过64个字符,必填 |
| cover.md5 | 图片文件md5,必填 |
| summary | 摘要 |
| from_url | 原文链接 |
错误返回码code详见全局错误返回说明
获取单个素材详细信息。
http请求方式:GET
http://official-account.edu.web.sdp.101.com/app/materials/{material_id}
无
| 参数 | 描述 |
|---|---|
| material_id | 素材ID |
//图片
{
"material_id":12323,
"update_time":123,
"type":"image",
"content":{
"source_id":"96340084-775d-4740-ae3f-b2dea289618b",
"mime":"jpeg",
"width":240,
"height":320,
"size":1201024,
"title":"图片标题",
"md5":"1146ccc9a0e484f59ff14f8b654f81e1"
}
}
//语音
{
"material_id":12323,
"update_time":123,
"type":"image",
"content":{
"title":"标题",
"src":"c9836767-a64e-439b-a689-13c5f7adeb6f",
"mime":"amr",
"dura":12,
"size":3076,
"md5":"bcb31b38e4c01691881e38023dea69e9"
}
}
//图文
{
"material_id":12323,
"update_time":123,
"type":"image",
"content": [
{
"article_id":123,
"href": "http://xxx",
"author":"作者",
"title":"标题",
"cover": {
"source_id":"96340084-775d-4740-ae3f-b2dea289618b",
"mime":"jpeg",
"width":240,
"height":320,
"size":1201024,
"title":"图片标题",
"md5":"1146ccc9a0e484f59ff14f8b654f81e1"
},
"summary":"xxx",
"from_url":"http://www.baidu.com"
},
...
]
}
//图片
| 字段 | 描述 |
|---|---|
| material_id | 素材ID |
| update_time | 素材修改时间 |
| type | 素材类型,图片素材为image |
| source_id | 图片上传到内容服务后返回的dentryId |
| mime | 图片格式(参考HTTP mime定义 ) |
| width | 图片宽度(pixel) |
| height | 图片高度(pixel) |
| size | 图片大小(byte) |
| title | 图片标题,长度不超过64个字符 |
| md5 | 图片文件md5 |
//语音
| 字段 | 描述 |
|---|---|
| material_id | 素材ID |
| update_time | 素材修改时间 |
| type | 素材类型,语音素材为audio |
| src | 语音上传到内容服务后返回的dentryId |
| mime | 语音格式(参考HTTP mime定义 ) |
| dura | 音频持续时间 |
| size | 图片高度(pixel) |
| size | 音频文件大小(byte) |
| md5 | 语音文件md5 |
//图文
| 字段 | 描述 |
|---|---|
| material_id | 素材ID |
| update_time | 素材修改时间 |
| type | 素材类型,图文素材为article |
| author | 作者,长度不超过8个字符 |
| title | 标题,长度不超过50个字 |
| cover | 图片参数 |
| cover.source_id | 图片上传到内容服务后返回的dentryId |
| cover.mime | 图片格式(参考HTTP mime定义 ) |
| cover.width | 图片宽度(pixel) |
| cover.height | 图片高度(pixel) |
| cover.size | 图片大小(byte) |
| cover.title | 图片标题,长度不超过64个字符,必填 |
| cover.md5 | 图片文件md5,必填 |
| summary | 摘要 |
| from_url | 原文链接 |
错误返回码code详见全局错误返回说明
开发者通过本接口获取订阅号关注用户列表和应用号分组用户列表。
http请求方式:GET
http://official-account.edu.web.sdp.101.com/app/users[?$offset={$offset}][&$limit={$limit}][&tag_id={tag_id}]
无
| 参数 | 描述 |
|---|---|
| tag_id | 用户分组ID,订阅号可选,默认取全部关注用户,0为未分组关注用户,大于0取指定分组关注用户;应用号必填,取指定分组用户 |
| $offset | 从0开始,获取位置偏移,可选,默认为0 |
| $limit | 返回条数,可选,默认为10条,最大值不超过100 |
{
"count": 20 ,
"items":[
{
"user_id":123456,
"tag_id":123,
"remark":"xxxxxxx",
"nick_name":"xxx"
},
...
]
}
| 字段 | 描述 |
|---|---|
| count | 该查询条件下用户总数 |
| user_id | 用户ID |
| tag_id | 用户分组ID,订阅号未分组关注用户为0 |
| remark | 用户备注 |
| nick_name | 用户昵称 |
错误返回码code详见全局错误返回说明
开发者通过本接口可以获取所有用户分组。
http请求方式:GET
http://official-account.edu.web.sdp.101.com/app/tags
无
无
{
"items":[
{
"tag_id":123,
"name":"VIP组",
"sub_count":123,
"type":"NORMAL"
},
...
]
}
| 字段 | 描述 |
|---|---|
| tag_id | 分组ID |
| name | 分组名称 |
| sub_count | 分组用户数 |
| type | 分组类型,NORMAL普通分组、STAR星标组,公众号默认有星标组 |
错误返回码code详见全局错误返回说明
开发者通过本接口可以创建用户分组,最多创建10分组(包括星标组在内),且只能创建NORMAL类型分组。
http请求方式:POST
http://official-account.edu.web.sdp.101.com/app/tags
{
"name":"VIP组"
}
| 参数 | 描述 |
|---|---|
| name | 分组名称,1~20个字符,必填 |
{
"tag_id":123
}
| 字段 | 描述 |
|---|---|
| tag_id | 分组ID |
错误返回码code详见全局错误返回说明
开发者通过本接口可以修改用户分组名,只能修改NORMAL类型分组。
http请求方式:PATCH
http://official-account.edu.web.sdp.101.com/app/tags/{tag_id}
{
"name":"VIP组"
}
| 参数 | 描述 |
|---|---|
| name | 分组名称,1~20个字符,必填 |
| tag_id | 分组ID,必填 |
{
"tag_id":123
}
| 字段 | 描述 |
|---|---|
| tag_id | 分组ID |
错误返回码code详见全局错误返回说明
开发者通过本接口可以删除用户分组,订阅号删除分组后,关注用户为未分组,应用号删除后,用户无分组。
http请求方式:DELETE
http://official-account.edu.web.sdp.101.com/app/tags/{tag_id}
无
无
{
"tag_id":123
}
| 字段 | 描述 |
|---|---|
| tag_id | 分组ID |
错误返回码code详见全局错误返回说明
开发者可以通过本接口指定用户修改用户分组,订阅号关注用户默认分组ID为0(未分组);应用号指定用户加入分组,为0时表示从用户分组中删除用户。
http请求方式:POST
http://official-account.edu.web.sdp.101.com/app/tags/{tag_id}/actions/join
{
"user_ids":[
123,
456
]
}
或
{
"login_names":[
"123@nd",
"456@nd"
]
}
| 参数 | 描述 |
|---|---|
| user_ids | 用户ID数组,user_ids与login_names二选一 |
| login_names | 用户登录名,即工号@org_name或手机号@org_name或用户名@org_name,user_id与login_name二选一 |
{
"tag_id":123
}
| 字段 | 描述 |
|---|---|
| tag_id | 分组ID |
错误返回码code详见全局错误返回说明
自定义菜单能够帮助公众号完成更多功能,使用户更快了解公众号的用途。开发者通过本接口配置菜单默认为菜单启用状态。自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单,一级菜单不多于4个汉字或8个字母,二级菜单不多于8个汉字或16个字母。
http请求方式:POST
http://official-account.edu.web.sdp.101.com/app/messages/menus
{
"buttons": [
{
"type": "click",
"name": "一级菜单",
"key": "V1000_BUTTON",
},
{
"type": "view",
"name": "view_url",
"url": "http://www.qq.com",
},
{
"name": "菜单",
"sub_buttons": [
{
"type": "view",
"name": "百度一下",
"url": "http://www.baidu.com/"
},
{
"type": "click",
"name": "赞一下我们",
"key": "V3002_SUB_BUTTON"
}
]
}
]
}
| 参数 | 描述 |
|---|---|
| buttons | 父菜单按钮数组,按钮个数不超过3个,无菜单按钮时为{"buttons": []}, |
| type | 按钮类型,目前支持view、click类型,view类型跳转到URL,click类型点击发送事件消息,格式参考接收消息中事件消息说明 |
| name | 按钮描述,即按钮名称,一级菜单不多于4个汉字或8个字母,二级菜单不多于8个汉字或16个字母 |
| key | 按钮KEY值,用于消息接口(event类型)推送,类型为click时必填,key值不能重复;通过公众号后台设置菜单key为默认值 |
| url | 跳转url,type为view时必填 |
| sub_buttons | 子菜单按钮数组,按钮个数应为1~5个(可选) |
{
"oa_id":123
}
| 字段 | 描述 |
|---|---|
| oa_id | 公众号编号 |
错误返回码code详见全局错误返回说明
开发者通过本接口可以删除公众号菜单,删除菜单后,客户端不再显示菜单按钮。
http请求方式:DELETE
http://official-account.edu.web.sdp.101.com/app/messages/menus
无
无
{
"oa_id":123
}
| 字段 | 描述 |
|---|---|
| oa_id | 公众号编号 |
错误返回码code详见全局错误返回说明
开发者通过本接口获取已创建的菜单,若未通过第三方接口创建菜单,则获取的菜单为编辑模式下发布的菜单或为空。
http请求方式:GET
http://official-account.edu.web.sdp.101.com/app/messages/menus
无
无
{
"buttons": [
{
"type": "click",
"name": "一级菜单",
"key": "V1000_BUTTON",
},
{
"type": "view",
"name": "view_url",
"url": "http://www.qq.com",
},
{
"name": "菜单",
"sub_buttons": [
{
"type": "view",
"name": "百度一下",
"url": "http://www.baidu.com/"
},
{
"type": "click",
"name": "赞一下我们",
"key": "V3002_SUB_BUTTON"
}
]
}
]
}
| 字段 | 描述 |
|---|---|
| buttons | 父菜单按钮数组,按钮个数不超过3个,无菜单按钮时为{"buttons": []}, |
| type | 按钮类型,目前支持view、click类型,view类型跳转到URL,click类型点击发送事件消息,格式参考接收消息中事件消息说明 |
| name | 按钮描述,即按钮名称,一级菜单不多于4个汉字或8个字母,二级菜单不多于8个汉字或16个字母 |
| key | 按钮KEY值,用于消息接口(event类型)推送,类型为click时必填,key值不能重复;通过公众号后台设置菜单key为默认值 |
| url | 跳转url,type为view时必填 |
| sub_buttons | 子菜单按钮数组,按钮个数应为1~5个(可选) |
错误返回码code详见全局错误返回说明