co-wechat-api
Version:
微信公共平台Node库API,ES6版本
388 lines (363 loc) • 10.2 kB
JavaScript
'use strict';
const { postJSON } = require('./util');
/**
* 获取用户基本信息。可以设置lang,其中zh_CN 简体,zh_TW 繁体,en 英语。默认为en
* 详情请见:<http://mp.weixin.qq.com/wiki/index.php?title=获取用户基本信息>
* Examples:
* ```
* api.getUser(openid);
* api.getUser({openid: 'openid', lang: 'en'});
* ```
*
* Result:
* ```
* {
* "subscribe": 1,
* "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
* "nickname": "Band",
* "sex": 1,
* "language": "zh_CN",
* "city": "广州",
* "province": "广东",
* "country": "中国",
* "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
* "subscribe_time": 1382694957
* }
* ```
* @param {String|Object} options 用户的openid。或者配置选项,包含openid和lang两个属性。
*/
exports.getUser = async function (options) {
const { accessToken } = await this.ensureAccessToken();
if (typeof options !== 'object') {
options = {
openid: options,
lang: 'en'
};
}
// https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID
var url = this.prefix + 'user/info?openid=' + options.openid + '&lang=' + options.lang + '&access_token=' + accessToken;
return this.request(url, {dataType: 'json'});
};
/**
* 批量获取用户基本信息
* Example:
* ```
* api.batchGetUsers(['openid1', 'openid2'])
* api.batchGetUsers(['openid1', 'openid2'], 'en')
* ```
* Result:
* ```
* {
* "user_info_list": [{
* "subscribe": 1,
* "openid": "otvxTs4dckWG7imySrJd6jSi0CWE",
* "nickname": "iWithery",
* "sex": 1,
* "language": "zh_CN",
* "city": "Jieyang",
* "province": "Guangdong",
* "country": "China",
* "headimgurl": "http://wx.qlogo.cn/mmopen/xbIQx1GRqdvyqkMMhEaGOX802l1CyqMJNgUzKP8MeAeHFicRDSnZH7FY4XB7p8XHXIf6uJA2SCunTPicGKezDC4saKISzRj3nz/0",
* "subscribe_time": 1434093047,
* "unionid": "oR5GjjgEhCMJFyzaVZdrxZ2zRRF4",
* "remark": "",
* "groupid": 0
* }, {
* "subscribe": 0,
* "openid": "otvxTs_JZ6SEiP0imdhpi50fuSZg",
* "unionid": "oR5GjjjrbqBZbrnPwwmSxFukE41U",
* }]
* }
* ```
* @param {Array} openids 用户的openid数组。
* @param {String} lang 语言(zh_CN, zh_TW, en),默认简体中文(zh_CN)
*/
exports.batchGetUsers = async function (openids, lang = 'zh_CN') {
const { accessToken } = await this.ensureAccessToken();
var url = this.prefix + 'user/info/batchget?access_token=' + accessToken;
var data = {};
data.user_list = openids.map(function (openid) {
return {openid, lang};
});
return this.request(url, postJSON(data));
};
/**
* 获取关注者列表
* 详细细节 http://mp.weixin.qq.com/wiki/index.php?title=获取关注者列表
* Examples:
* ```
* api.getFollowers();
* // or
* api.getFollowers(nextOpenid);
* ```
* Result:
* ```
* {
* "total":2,
* "count":2,
* "data":{
* "openid":["","OPENID1","OPENID2"]
* },
* "next_openid":"NEXT_OPENID"
* }
* ```
* @param {String} nextOpenid 调用一次之后,传递回来的nextOpenid。第一次获取时可不填
*/
exports.getFollowers = async function (nextOpenid) {
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
nextOpenid = nextOpenid || '';
var url = this.prefix + 'user/get?next_openid=' + nextOpenid + '&access_token=' + accessToken;
return this.request(url, {dataType: 'json'});
};
/**
* 设置用户备注名
* 详细细节 http://mp.weixin.qq.com/wiki/index.php?title=设置用户备注名接口
* Examples:
* ```
* api.updateRemark(openid, remark);
* ```
* Result:
* ```
* {
* "errcode":0,
* "errmsg":"ok"
* }
* ```
* @param {String} openid 用户的openid
* @param {String} remark 新的备注名,长度必须小于30字符
*/
exports.updateRemark = async function (openid, remark) {
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=ACCESS_TOKEN
var url = this.prefix + 'user/info/updateremark?access_token=' + accessToken;
var data = {
openid: openid,
remark: remark
};
return this.request(url, postJSON(data));
};
/**
* 创建标签
* 详细细节 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN
* Examples:
* ```
* api.createTags(name);
* ```
* Result:
* ```
* {
* "id":tagId,
* "name":tagName
* }
* ```
* @param {String} name 标签名
*/
exports.createTags = async function (name){
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/tags/create?access_token=ACCESS_TOKEN
var url = this.prefix + 'tags/create?access_token=' + accessToken;
var data = {
tag: {
name: name
}
};
return this.request(url, postJSON(data));
};
/**
* 获取公众号已创建的标签
* 详细细节 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN
* Examples:
* ```
* api.getTags();
* ```
* Result:
* ```
* {
* "tags":[{
* "id":1,
* "name":"每天一罐可乐星人",
* "count":0 //此标签下粉丝数
* },{
* "id":2,
* "name":"星标组",
* "count":0
* },{
* "id":127,
* "name":"广东",
* "count":5
* }
* ]
* }
* ```
*/
exports.getTags = async function (){
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/tags/get?access_token=ACCESS_TOKEN
var url = this.prefix + 'tags/get?access_token=' + accessToken;
return this.request(url);
};
/**
* 编辑标签
* 详细细节 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN
* Examples:
* ```
* api.updateTag(id,name);
* ```
* Result:
* ```
* {
* "errcode":0,
* "errmsg":"ok"
* }
* ```
* @param {String} id 标签id
* @param {String} name 标签名
*/
exports.updateTag = async function (id, name) {
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/tags/update?access_token=ACCESS_TOKEN
var url = this.prefix + 'tags/update?access_token=' + accessToken;
var data = {
tag: {
id: id,
name: name
}
};
return this.request(url, postJSON(data));
};
/**
* 删除标签
* 详细细节 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN
* Examples:
* ```
* api.deleteTag(id);
* ```
* Result:
* ```
* {
* "errcode":0,
* "errmsg":"ok"
* }
* ```
* @param {String} id 标签id
*/
exports.deleteTag = async function (id){
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/tags/delete?access_token=ACCESS_TOKEN
var url = this.prefix + 'tags/delete?access_token=' + accessToken;
var data = {
tag: {
id: id
}
};
return this.request(url, postJSON(data));
};
/**
* 获取标签下粉丝列表
* 详细细节 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN
* Examples:
* ```
* api.getUsersFromTag(tagId,nextOpenId);
* ```
* Result:
* ```
* {
* "count":2,//这次获取的粉丝数量
* "data":{//粉丝列表
* "openid":[
* "ocYxcuAEy30bX0NXmGn4ypqx3tI0",
* "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y"
* ]
* },
* ```
* @param {String} tagId 标签id
* @param {String} nextOpenId 第一个拉取的OPENID,不填默认从头开始拉取
*/
exports.getUsersFromTag = async function (tagId, nextOpenId){
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/user/tag/get?access_token=ACCESS_TOKEN
var url = this.prefix + 'user/tag/get?access_token=' + accessToken;
var data = {
tagid: tagId,
next_openid: nextOpenId || ''//第一个拉取的OPENID,不填默认从头开始拉取
};
return this.request(url,postJSON(data));
};
/**
* 批量为用户打标签
* 详细细节 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN
* Examples:
* ```
* api.batchTagging(openIdList,tagId);
* ```
* Result:
* ```
* {
* "errcode":0,
* "errmsg":"ok"
* }
* ```
* @param {Array} openIdList openId列表
* @param {String} tagId 标签id
*/
exports.batchTagging = async function (openIdList, tagId) {
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging?access_token=ACCESS_TOKEN
var url = this.prefix + 'tags/members/batchtagging?access_token=' + accessToken;
var data = {
openid_list: openIdList || [],
tagid: tagId
};
return this.request(url,postJSON(data));
};
/**
* 批量为用户取消标签
* 详细细节 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN
* Examples:
* ```
* api.batchUnTagging(openIdList,tagId);
* ```
* Result:
* ```
* {
* "errcode":0,
* "errmsg":"ok"
* }
* ```
* @param {Array} openIdList openId列表
* @param {String} tagId 标签id
*/
exports.batchUnTagging = async function (openIdList, tagId) {
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/tags/members/batchuntagging?access_token=ACCESS_TOKEN
var url = this.prefix + 'tags/members/batchuntagging?access_token=' + accessToken;
var data = {
openid_list: openIdList || [],
tagid: tagId
};
return this.request(url,postJSON(data));
};
/**
* 获取用户身上的标签列表
* 详细细节 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN
* Examples:
* ```
* api.getIdList(openId);
* ```
* Result:
* ```
* {
* "tagid_list":[//被置上的标签列表 134,2]
* }
* ```
*/
exports.getIdList = async function (openId) {
const { accessToken } = await this.ensureAccessToken();
// https://api.weixin.qq.com/cgi-bin/tags/getidlist?access_token=ACCESS_TOKEN
var url = this.prefix + 'tags/getidlist?access_token=' + accessToken;
var data = {
openid: openId
};
return this.request(url, postJSON(data));
};