wechat-enterprise-api Version: 0.1.3 By @Jackson Tian

微信公共平台企业号版本Node API库

api_agent: API索引


make

获取企业号应用
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=获取企业号应用

Examples:

api.getAgent(agentid, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
"errcode":"0",
"errmsg":"ok" ,
"agentid":"1" ,
"name":"NAME" ,
"square_logo_url":"xxxxxxxx" ,
"round_logo_url":"yyyyyyyy" ,
"description":"desc" ,
"allow_userinfos":{
    "user":[
          {
              "userid":"id1",
              "status":"1"
          },
          {
              "userid":"id2",
              "status":"1"
          },
          {
              "userid":"id3",
              "status":"1"
          }
           ]
 },
"allow_partys":{
    "partyid": [1]
 },
"allow_tags":{
    "tagid": [1,2,3]
 }
"close":0 ,
"redirect_domain":"www.qq.com",
"report_location_flag":0,
"isreportuser":0,
"isreportenter":0

方法签名

方法 make()
参数 agentid(String)

企业号应用的id

参数 callback(Function)

回调函数

make

设置企业号应用
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=设置企业号应用

Examples:

api.setAgent(opts, callback);

Opts:

{
  "agentid": "5",
  "report_location_flag": "0",
  "logo_mediaid": "xxxxx",
  "name": "NAME",
  "description": "DESC",
  "redirect_domain": "xxxxxx",
  "isreportuser":0,
  "isreportenter":0
}

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:
{
  "errcode":"0",
  "errmsg":"ok" ,
}

方法签名

方法 make()
参数 opts(Object)

更新的数据

参数 callback(Function)

回调函数

make

获取应用概况列表
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=获取应用概况列表

Examples:

api.listAgent(callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:
{
 "errcode": 0,
 "errmsg": "ok",
 "agentlist": [
   {
      "agentid": "5",
      "name": "企业小助手",
      "square_logo_url": "url",
      "round_logo_url": "url"
   },
   {
      "agentid": "8",
      "name": "HR小助手",
      "square_logo_url": "url",
      "round_logo_url": "url"
   }
 ]  
}

方法签名

方法 make()
参数 callback(Function)

回调函数

api_batch: API索引


batchInviteUser

批量邀请成员
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.82.80.E8.AF.B7.E6.88.90.E5.91.98.E5.85.B3.E6.B3.A8

Examples:

api.batchInviteUser(to, taskCb, callback);

To:

{
  "touser":"xxx|xxx",
  "toparty":"xxx|xxx",
  "totag":"xxx|xxx",
  "invite_tips":"xxx",
}
TaskCb:

{
"url": "xxx",
"token": "xxx",
"encodingaeskey": "xxx"
}


Callback:

- `err`, 调用失败时得到的异常
- `result`, 调用正常时得到的对象

Result:

{
"errcode": 0,
"errmsg": "ok",
"jobid": "IoZW03y44Zcwuz-2K6T6rHTcf1uwyVbcYu2aRALKw-U"
}
```

方法签名

方法 exports.batchInviteUser()
参数 to(Object)

批量邀请的数据结构

参数 taskCb(Object)

任务执行完毕后的回调结构

参数 callback(Function)

回调函数

batchSyncUser

批量更新成员
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.82.80.E8.AF.B7.E6.88.90.E5.91.98.E5.85.B3.E6.B3.A8

Examples:

api.batchSyncUser(mediaId, taskCb, callback);
TaskCb:

{
"url": "xxx",
"token": "xxx",
"encodingaeskey": "xxx"
}


Callback:

- `err`, 调用失败时得到的异常
- `result`, 调用正常时得到的对象

Result:

{
"errcode": 0,
"errmsg": "ok",
"jobid": "IoZW03y44Zcwuz-2K6T6rHTcf1uwyVbcYu2aRALKw-U"
}
```

方法签名

方法 exports.batchSyncUser()
参数 mediaId(String)

数据文件的mediaId

参数 taskCb(Object)

任务执行完毕后的回调结构

参数 callback(Function)

回调函数

batchReplaceUser

全量覆盖成员
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.82.80.E8.AF.B7.E6.88.90.E5.91.98.E5.85.B3.E6.B3.A8

Examples:

api.batchReplaceUser(mediaId, taskCb, callback);
TaskCb:

{
"url": "xxx",
"token": "xxx",
"encodingaeskey": "xxx"
}


Callback:

- `err`, 调用失败时得到的异常
- `result`, 调用正常时得到的对象

Result:

{
"errcode": 0,
"errmsg": "ok",
"jobid": "IoZW03y44Zcwuz-2K6T6rHTcf1uwyVbcYu2aRALKw-U"
}
```

方法签名

方法 exports.batchReplaceUser()
参数 mediaId(String)

数据文件的mediaId

参数 taskCb(Object)

任务执行完毕后的回调结构

参数 callback(Function)

回调函数

batchReplaceParty

全量覆盖部门
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.82.80.E8.AF.B7.E6.88.90.E5.91.98.E5.85.B3.E6.B3.A8

Examples:

api.batchReplaceParty(mediaId, taskCb, callback);
TaskCb:

{
"url": "xxx",
"token": "xxx",
"encodingaeskey": "xxx"
}


Callback:

- `err`, 调用失败时得到的异常
- `result`, 调用正常时得到的对象

Result:

{
"errcode": 0,
"errmsg": "ok",
"jobid": "IoZW03y44Zcwuz-2K6T6rHTcf1uwyVbcYu2aRALKw-U"
}
```

方法签名

方法 exports.batchReplaceParty()
参数 mediaId(Object)

数据文件的mediaId

参数 taskCb(Object)

任务执行完毕后的回调结构

参数 callback(Function)

回调函数

batchGetResult

获取批量任务的结果
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.82.80.E8.AF.B7.E6.88.90.E5.91.98.E5.85.B3.E6.B3.A8

Examples:

api.batchGetResult(jobid, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

返回结果参考微信的官方文档

方法签名

方法 exports.batchGetResult()
参数 jobid(String)

启动批量任务时返回的任务id

参数 callback(Function)

回调函数

api_common: API索引


API

根据appid和appsecret创建API的构造函数。

如需跨进程跨机器进行操作Wechat API(依赖access token),access token需要进行全局维护
使用策略如下:

  1. 调用用户传入的获取token的异步方法,获得token之后使用
  2. 使用appid/appsecret获取token。并调用用户传入的保存token方法保存

Examples:

var API = require('wechat-enterprise-api');
var api = new API('appid', 'secret', 'agentid');

以上即可满足单进程使用。
当多进程时,token需要全局维护,以下为保存token的接口。

var api = new API('corpid', 'secret', 'agentid', function (callback) {
  // 传入一个获取全局token的方法
  fs.readFile('access_token.txt', 'utf8', function (err, txt) {
    if (err) {return callback(err);}
    callback(null, JSON.parse(txt));
  });
}, function (token, callback) {
  // 请将token存储到全局,跨进程、跨机器级别的全局,比如写到数据库、redis等
  // 这样才能在cluster模式及多机情况下使用,以下为写入到文件的示例
  fs.writeFile('access_token.txt', JSON.stringify(token), callback);
});

方法签名

函数 API()
参数 corpid(String)

在公众平台上申请得到的corpid

参数 corpsecret(String)

在公众平台上申请得到的app secret

参数 agentid(String)

企业应用的id

参数 getToken(Function)

可选的。获取全局token对象的方法,多进程模式部署时需在意

参数 saveToken(Function)

可选的。保存全局token对象的方法,多进程模式部署时需在意

setOpts

用于设置urllib的默认options

Examples:

api.setOpts({timeout: 15000});

方法签名

方法 API.prototype.setOpts()
参数 opts(Object)

默认选项

request

设置urllib的options

方法签名

方法 API.prototype.request()

getLatestToken

获取最新的token。

  • 如果还没有请求过token,则发起获取Token请求。
  • 如果请求过,则调用getToken从获取之前保存的token

Examples:

api.getLatestToken(callback);

Callback:

  • err, 获取access token出现异常时的异常对象
  • token, 获取的token

方法签名

方法 API.prototype.getLatestToken()
参数 callback(Function)

回调函数

mixin

用于支持对象合并。将对象合并到API.prototype上,使得能够支持扩展
Examples:

// 媒体管理(上传、下载)
API.mixin(require('./lib/api_media'));

方法签名

方法 API.mixin()
参数 obj(Object)

要合并的对象

api_department: API索引


createDepartment

创建部门
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=管理部门

Examples:

api.createDepartment(name, opts, callback);

Opts:

  • parentid, 父部门id,根部门id为1
  • order,在父部门中的次序。从1开始,数字越大排序越靠后
  • id,部门ID。用指定部门ID新建部门,不指定此参数时,则自动生成

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "created",
 "id": 2
}

方法签名

方法 exports.createDepartment()
参数 name(String)

部门名字

参数 opts(Object)

选项

参数 callback(Function)

回调函数

updateDepartment

更新部门

Examples:

var opts = {name: 'new name', parentid: 1, order: 5};
api.updateDepartment(id, opts, callback);

Opts:

  • name, 新的部门名字。可选
  • parentid, 父部门id,根部门id为1。可选
  • order,在父部门中的次序。从1开始,数字越大排序越靠后。可选,默认为1

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "updated"
}

方法签名

方法 exports.updateDepartment()
参数 id(Number)

部门ID

参数 opts(Object)

选项

参数 callback(Function)

回调函数

deleteDepartment

删除部门

Examples:

api.deleteDepartment(id, callback);
api.deleteDepartment([id1, id2], callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "deleted"
}

方法签名

方法 exports.deleteDepartment()
参数 id(Number,Array)

部门ID

参数 callback(Function)

回调函数

getDepartments

查看所有部门

Examples:

api.getDepartments(callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "ok",
 "department": [
   {
     "id": 1,
     "name": "广州研发中心",
     "parentid": 0
   },
   {
     "id": 2
     "name": "邮箱产品部",
     "parentid": 1
   }
 ]
}

方法签名

方法 exports.getDepartments()
参数 callback(Function)

回调函数

api_ip: API索引


make

创建标签

详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8F#.E8.8E.B7.E5.8F.96.E5.BE.AE.E4.BF.A1.E6.9C.8D.E5.8A.A1.E5.99.A8.E7.9A.84ip.E6.AE.B5
Examples:

api.getCallbackIP(name, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "ip_list": ["101.226.103.*", "101.226.62.*"]
}

方法签名

方法 make()
参数 callback(Function)

回调函数

api_js: API索引


registerTicketHandle

多台服务器负载均衡时,ticketToken需要外部存储共享。
需要调用此registerTicketHandle来设置获取和保存的自定义方法。

Examples:

api.registerTicketHandle(getTicketToken, saveTicketToken);
// getTicketToken
function getTicketToken(callback) {
 settingModel.getItem({key: 'weixin_ticketToken'}, function (err, setting) {
   if (err) return callback(err);
   callback(null, setting.value);
 });
}
// saveTicketToken
function saveTicketToken(_ticketToken, callback) {
 settingModel.setItem({key:'weixin_ticketToken', value: ticketToken}, function (err) {
   if (err) return callback(err);
   callback(null);
 });
}

方法签名

方法 exports.registerTicketHandle()
参数 getTicketToken(Function)

获取外部ticketToken的函数

参数 saveTicketToken(Function)

存储外部ticketToken的函数

getTicket

获取js sdk所需的有效js ticket

Callback:

  • err, 异常对象
  • result, 正常获取时的数据

Result:

  • errcode, 0为成功
  • errmsg, 成功为'ok',错误则为详细错误信息
  • ticket, js sdk有效票据,如:bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA
  • expires_in, 有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket

方法签名

方法 exports.getTicket()
参数 callback(Function)

回调函数

getJsConfig

获取微信JS SDK Config的所需参数

注意事项

  1. 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
  2. 签名用的url必须是调用JS接口页面的完整URL。
  3. 出于安全考虑,开发者必须在服务器端实现签名的逻辑。
    Examples:
    var param = {
    debug:false,
    jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'],
    url: 'http://www.xxx.com' 
    };
    api.getJsConfig(param, callback);
    

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的js sdk config所需参数

方法签名

方法 exports.getJsConfig()
参数 param(Object)

参数

参数 callback(Function)

回调函数

api_material: API索引


addMaterial

上传永久素材,分别有图片(image)、语音(voice)、视频(video)和普通文件(file)
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90
Examples:

api.addMaterial(agentid, 'filepath', type, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{"errcode":0,"errmsg":"ok","media_id": "2-G6nrLmr5EFSDC3MMfasdfb_-zK1dDdzmd0p7"}

Shortcut:

  • exports.addImage(agentid, filepath, callback);
  • exports.addVoice(agentid, filepath, callback);
  • exports.addVideo(agentid, filepath, callback);
  • exports.addFile(agentid, filepath, callback);

方法签名

方法 exports.addMaterial()
参数 agentid(String)

应用的id

参数 filepath(String)

文件路径

参数 type(String)

媒体类型,可用值有image、voice、video、file

参数 callback(Function)

回调函数

addMPNews

上传永久图文素材
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90
Examples:

api.addMPNews(agentid, mpnews, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{"errcode": "0","errmsg": "ok","media_id": "2-G6nrLmr5EC3MMfasdfb_-zK1dDdzmd0p7"}

方法签名

方法 exports.addMPNews()
参数 agentid(String)

应用的id

参数 mpnews(String)

图文消息的结构

参数 callback(Function)

回调函数

updateMPNews

更新永久图文素材
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=%E4%BF%AE%E6%94%B9%E6%B0%B8%E4%B9%85%E5%9B%BE%E6%96%87%E7%B4%A0%E6%9D%90
Examples:

api.updateMPNews(agentid, media_id, mpnews, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{"errcode": "0","errmsg": "ok"}

方法签名

方法 exports.updateMPNews()
参数 agentid(String)

应用的id

参数 media_id(String)

素材id

参数 mpnews(String)

图文消息的结构

参数 callback(Function)

回调函数

getMaterial

获取永久素材
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90
Examples:

api.getMaterial(agentid, 'media_id', callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的文件Buffer对象
  • res, HTTP响应对象

方法签名

方法 exports.getMaterial()
参数 agentid(String)

应用的id

参数 mediaId(String)

媒体文件的ID

参数 callback(Function)

回调函数

delMaterial

删除永久素材
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%88%A0%E9%99%A4%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90
Examples:

api.delMaterial(agentid, 'media_id', callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的文件Buffer对象
  • res, HTTP响应对象

Result:

{"errcode": "0","errmsg": "deleted"}

方法签名

方法 exports.delMaterial()
参数 agentid(String)

应用的id

参数 mediaId(String)

媒体文件的ID

参数 callback(Function)

回调函数

countMaterial

获取素材总数
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E7%B4%A0%E6%9D%90%E6%80%BB%E6%95%B0
Examples:

api.countMaterial(agentid, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的文件Buffer对象
  • res, HTTP响应对象

Result:

{"errcode": "0","errmsg": "ok", "total_count": 37,"image_count": 12, "voice_count": 10, "video_count": 3,  "file_count": 3, "mpnews_count": 6}

方法签名

方法 exports.countMaterial()
参数 agentid(String)

应用的id

参数 mediaId(String)

媒体文件的ID

参数 callback(Function)

回调函数

batchgetMaterial

获取素材列表
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E7%B4%A0%E6%9D%90%E5%88%97%E8%A1%A8
type 可为图片(image)、语音(voice)、视频(video)、普通文件(file)、图文消息(mpnews)
Examples:

api.batchgetMaterial(agentid, type, offset, count, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的文件Buffer对象
  • res, HTTP响应对象

Result:

{"errcode": "0","errmsg": "ok", "total_count": 37,"image_count": 12, "voice_count": 10, "video_count": 3,  "file_count": 3, "mpnews_count": 6}

方法签名

方法 exports.batchgetMaterial()
参数 agentid(String)

应用的id

参数 type(String)

媒体类型 可以为图文(mpnews)、图片(image)、音频(voice)、视频(video)、文件(file)

参数 offset(String)

从该类型素材的该偏移位置开始返回,0表示从第一个素材返回

参数 count(String)

返回素材的数量,取值在1到50之间

参数 callback(Function)

回调函数

api_media: API索引


uploadMedia

上传多媒体文件,分别有图片(image)、语音(voice)、视频(video)和普通文件(file)
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=上传媒体文件
Examples:

api.uploadMedia('filepath', type, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{"type":"image","media_id":"0000001","created_at":123456789}

Shortcut:

  • exports.uploadImage(filepath, callback);
  • exports.uploadVoice(filepath, callback);
  • exports.uploadVideo(filepath, callback);
  • exports.uploadFile(filepath, callback);

方法签名

方法 exports.uploadMedia()
参数 filepath(String)

文件路径

参数 type(String)

媒体类型,可用值有image、voice、video、file

参数 callback(Function)

回调函数

getMedia

根据媒体ID获取媒体内容
详情请见:http://qydev.weixin.qq.com/wiki/index.php?title=获取媒体文件
Examples:

api.getMedia('media_id', callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的文件Buffer对象
  • res, HTTP响应对象

方法签名

方法 exports.getMedia()
参数 mediaId(String)

媒体文件的ID

参数 callback(Function)

回调函数

api_menu: API索引


createMenu

创建自定义菜单
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=创建应用菜单

Menu:

{
 "button":[
   {
     "type":"click",
     "name":"今日歌曲",
     "key":"V1001_TODAY_MUSIC"
   },
   {
     "name":"菜单",
     "sub_button":[
       {
         "type":"view",
         "name":"搜索",
         "url":"http://www.soso.com/"
       },
       {
         "type":"click",
         "name":"赞一下我们",
         "key":"V1001_GOOD"
       }]
     }]
   }
 ]
}

Examples:

api.createMenu(menu, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{"errcode":0,"errmsg":"ok"}

方法签名

方法 exports.createMenu()
参数 menu(Object)

菜单对象

参数 callback(Function)

回调函数

getMenu

获取菜单
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=获取菜单列表

Examples:

api.getMenu(callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

// 结果示例
{
 "menu": {
   "button":[
     {"type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC","sub_button":[]},
     {"type":"click","name":"歌手简介","key":"V1001_TODAY_SINGER","sub_button":[]},
     {"name":"菜单","sub_button":[
       {"type":"view","name":"搜索","url":"http://www.soso.com/","sub_button":[]},
       {"type":"view","name":"视频","url":"http://v.qq.com/","sub_button":[]},
       {"type":"click","name":"赞一下我们","key":"V1001_GOOD","sub_button":[]}]
     }
   ]
 }
}

方法签名

方法 exports.getMenu()
参数 callback(Function)

回调函数

removeMenu

删除自定义菜单
详细请看:http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单删除接口
Examples:

api.removeMenu(callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{"errcode":0,"errmsg":"ok"}

方法签名

方法 exports.removeMenu()
参数 callback(Function)

回调函数

api_message: API索引


send

发送消息分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=发送接口说明
Examples:

api.send(to, message, callback);

To:

{
 "touser": "UserID1|UserID2|UserID3",
 "toparty": " PartyID1 | PartyID2 ",
 "totag": " TagID1 | TagID2 "
}

Message:
文本消息:

{
 "msgtype": "text",
 "text": {
   "content": "Holiday Request For Pony(http://xxxxx)"
 },
 "safe":"0"
}

图片消息:

{
 "msgtype": "image",
 "image": {
   "media_id": "MEDIA_ID"
 },
 "safe":"0"
}

图片消息:

{
 "msgtype": "image",
 "image": {
   "media_id": "MEDIA_ID"
 },
 "safe":"0"
}

语音消息:

{
 "msgtype": "voice",
 "voice": {
   "media_id": "MEDIA_ID"
 },
 "safe":"0"
}

视频消息:

{
 "msgtype": "video",
 "video": {
   "media_id": "MEDIA_ID"
   "title": "Title",
   "description": "Description"
 },
 "safe":"0"
}

文件消息:

{
 "msgtype": "file",
 "file": {
   "media_id": "MEDIA_ID"
 },
 "safe":"0"
}

图文消息:

{
 "msgtype": "news",
 "news": {
   "articles":[
     {
       "title": "Title",
       "description": "Description",
       "url": "URL",
       "picurl": "PIC_URL",
     },
     {
       "title": "Title",
       "description": "Description",
       "url": "URL",
       "picurl": "PIC_URL",
     }
   ]
 },
 "safe":"0"
}

MP消息:

{
 "msgtype": "mpnews",
 "mpnews": {
   "articles":[
     {
       "thumb_media_id": "id",
       "author": "Author",
       "content_source_url": "URL",
       "content": "Content"
       "digest": "Digest description",
       "show_cover_pic": "0"
     },
     {
       "thumb_media_id": "id",
       "author": "Author",
       "content_source_url": "URL",
       "content": "Content"
       "digest": "Digest description",
       "show_cover_pic": "0"
     }
   ],
   "media_id": "id"
 },
 "safe":"0"
}

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "ok",
 "invaliduser": "UserID1",
 "invalidparty":"PartyID1",
 "invalidtag":"TagID1"
}

方法签名

方法 exports.send()
参数 to(Object)

接受消息的用户

参数 message(Object)

消息对象

参数 callback(Function)

回调函数

api_tag: API索引


createTag

创建标签

详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=管理标签
Examples:

api.createTag(name, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "created",
 "tagid": "1"
}

方法签名

方法 exports.createTag()
参数 name(String)

标签名字

参数 callback(Function)

回调函数

updateTagName

更新标签名字

Examples:

api.updateTagName(id, name, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
  "errcode": 0,
  "errmsg": "updated"
}

方法签名

方法 exports.updateTagName()
参数 id(String)

标签ID

参数 name(String)

标签名称。最长64个字符

参数 callback(Function)

回调函数

deleteTag

删除标签

Examples:

api.deleteTag(id, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "deleted"
}

方法签名

方法 exports.deleteTag()
参数 id(Number)

标签ID

参数 callback(Function)

回调函数

listTags

获取标签列表

Examples:

api.listTags(callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "deleted"
}

方法签名

方法 exports.listTags()
参数 callback(Function)

回调函数

getTagUsers

获取标签成员

Examples:

api.getTagUsers(id, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
  "errcode": 0,
  "errmsg": "ok",
  "userlist": [
    {
        "userid": "zhangsan",
        "name": "李四"
    }
  ]
}

方法签名

方法 exports.getTagUsers()
参数 id(Number)

标签ID

参数 callback(Function)

回调函数

addTagUsers

增加标签成员

Examples:

var userIdList = ['id1', 'id2'];
api.addTagUsers(id, userIdList, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:
a)正确时返回

{
  "errcode": 0,
  "errmsg": "deleted"
}

b)若部分userid非法,则返回

{
  "errcode": 0,
  "errmsg": "invalid userlist failed"
  "invalidlist":"usr1|usr2|usr"
}

c)当包含的userid全部非法时返回

{
  "errcode": 40031,
  "errmsg": "all list invalid"
}

方法签名

方法 exports.addTagUsers()
参数 id(Number)

标签ID

参数 userIdList(Array)

用户ID列表

参数 callback(Function)

回调函数

deleteTagUsers

删除标签成员

Examples:

var userIdList = ['id1', 'id2'];
api.deleteTagUsers(id, userIdList, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:
a)正确时返回

{
  "errcode": 0,
  "errmsg": "deleted"
}

b)若部分userid非法,则返回

{
  "errcode": 0,
  "errmsg": "invalid userlist failed"
  "invalidlist":"usr1|usr2|usr"
}

c)当包含的userid全部非法时返回

{
  "errcode": 40031,
  "errmsg": "all list invalid"
}

方法签名

方法 exports.deleteTagUsers()
参数 id(Number)

标签ID

参数 userIdList(Array)

用户ID数组

参数 callback(Function)

回调函数

api_user: API索引


createUser

创建成员
详细请看:http://qydev.weixin.qq.com/wiki/index.php?title=管理成员

Examples:

api.createUser(user, callback);

User:

{
  "userid": "zhangsan",
  "name": "张三",
  "department": [1, 2],
  "position": "产品经理",
  "mobile": "15913215421",
  "gender": 1,
  "tel": "62394",
  "email": "zhangsan@gzdev.com",
  "weixinid": "zhangsan4dev"
}

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
  "errcode": 0,
  "errmsg": "created"
}

方法签名

方法 exports.createUser()
参数 user(Object)

成员信息

参数 callback(Function)

回调函数

updateUser

更新成员

Examples:

api.updateUser(user, callback);

User:

{
  "userid": "zhangsan",
  "name": "李四",
  "department": [1],
  "position": "后台工程师",
  "mobile": "15913215421",
  "gender": 1,
  "tel": "62394",
  "email": "zhangsan@gzdev.com",
  "weixinid": "lisifordev",
  "enable": 1
}

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "updated"
}

方法签名

方法 exports.updateUser()
参数 user(Object)

成员信息

参数 callback(Function)

回调函数

deleteUser

删除成员

Examples:

api.deleteUser(id, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "deleted"
}

方法签名

方法 exports.deleteUser()
参数 id(Number)

成员ID

参数 callback(Function)

回调函数

make

批量删除成员

Examples:

api.deleteUsers(["zhangsan", "lisi"], callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "deleted"
}

方法签名

方法 make()
参数 users(Array)

待删除的用户

参数 callback(Function)

回调函数

getUser

获取成员

Examples:

api.getUser(id, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
  "errcode": 0,
  "errmsg": "ok",
  "userid": "zhangsan",
  "name": "李四",
  "department": [1, 2],
  "position": "后台工程师",
  "mobile": "15913215421",
  "gender": 1,
  "tel": "62394",
  "email": "zhangsan@gzdev.com",
  "weixinid": "lisifordev",
  "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
  "status": 1
}

方法签名

方法 exports.getUser()
参数 id(Number)

成员ID

参数 callback(Function)

回调函数

getDepartmentUsers

获取部门成员

Examples:

api.getDepartmentUsers(departmentId, fetchChild, status, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
  "errcode": 0,
  "errmsg": "ok",
  "userlist": [
    {
      "userid": "zhangsan",
      "name": "李四"
    }
  ]
}

方法签名

方法 exports.getDepartmentUsers()
参数 departmentId(Number)

部门ID

参数 fetchChild(Number)

值:1/0,是否递归获取子部门下面的成员

参数 status(Number)

0获取全部员工,1获取已关注成员列表,2获取禁用成员列表,4获取未关注成员列表。status可叠加

参数 callback(Function)

回调函数

getDepartmentUsersDetail

获取部门成员(详情)

Examples:

api.getDepartmentUsersDetail(departmentId, fetchChild, status, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "ok",
 "userlist": [
   {
     "userid": "zhangsan",
     "name": "李四",
     "department": [1, 2],
     "position": "后台工程师",
     "mobile": "15913215421",
     "email": "zhangsan@gzdev.com",
     "weixinid": "lisifordev",
     "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
     "status": 1,
     "extattr": {"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]}
   }
 ]
}

方法签名

方法 exports.getDepartmentUsersDetail()
参数 departmentId(Number)

部门ID

参数 fetchChild(Number)

值:1/0,是否递归获取子部门下面的成员

参数 status(Number)

0获取全部员工,1获取已关注成员列表,2获取禁用成员列表,4获取未关注成员列表。status可叠加

参数 callback(Function)

回调函数

inviteUser

邀请成员关注

详情:http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AE%A1%E7%90%86%E6%88%90%E5%91%98#.E9.82.80.E8.AF.B7.E6.88.90.E5.91.98.E5.85.B3.E6.B3.A8
Examples:

api.inviteUser(id, invite_tips, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
 "errcode": 0,
 "errmsg": "ok",
 "type":1
}

方法签名

方法 exports.inviteUser()
参数 id(String)

userid

参数 invite_tips(String)

邀请的一句话

参数 callback(Function)

回调函数

getUserIdByCode

根据Code获取用户ID

详情:http://qydev.weixin.qq.com/wiki/index.php?title=根据code获取成员信息
Examples:

api.getUserIdByCode(code, callback);

Callback:

  • err, 调用失败时得到的异常
  • result, 调用正常时得到的对象

Result:

{
  "UserId": "USERID"
}

方法签名

方法 exports.getUserIdByCode()
参数 code(String)

OAuth授权获取的code

参数 callback(Function)

回调函数

getAuthorizeURL

获取授权页面的URL地址

方法签名

方法 exports.getAuthorizeURL()
参数 redirect(String)

授权后要跳转的地址

参数 state(String)

开发者可提供的数据

参数 scope(String)

作用范围,值为snsapi_userinfo和snsapi_base,前者用于弹出,后者用于跳转

util: API索引