Wechat Next 主要实现实现对 微信、企业微信 api 的基础访问功能,包括接口访问、错误处理、accessToken 管理、微信消息接收。没有做过多的封装,所有数据参数请参考微信文档。
npm install wechat-next
const { Wechat } = require('wechat-next')
const params = { appid, secret };
let token;
const api = new Wechat(params, {
saveAccessToken(accessTokenData, params){
token = accessTokenData;
},
getAccessToken(params){
return token;
}
});
await api.post('cgi-bin/menu/create', menus)
const menus = await api.get('cgi-bin/menu/get_current_selfmenu_info')
根据 acessToken
的不同处理方式,该api支持多种调用方法
如果想自行管理 accssToken
,可以将该库当作 request
使用。
const { Wechat } = require('wechat-next')
const api = new Wechat();
const accessToken = await api.getAccessToken({ appid, secret });
await api.post('cgi-bin/menu/create', {
access_token: accessToken.accessToken
}, menus)
const menus = await api.get('cgi-bin/menu/get_current_selfmenu_info', {
access_token: accessToken.accessToken
})
如果是单进程,可以直接由类自动处理 accessToken
获取、过期重试
const { Wechat } = require('wechat-next')
const params = { appid, secret };
const api = new Wechat(params);
await api.post('cgi-bin/menu/create', menus)
如果是多进程,或者分布式部署,初始化类时提供了 getAccessToken
, saveAccessToken
配置以供
accessToken 的存储。
const { Wechat } = require('wechat-next')
const params = { appid, secret };
const api = new Wechat(params, {
saveAccessToken(accessTokenData, params){
return saveAsync(accessTokenData);
},
getAccessToken(params){
return getAsync(params); //params 为初始化时的 params
}
});
微信api、企业微信api、oauth认证都继承自BaseApi
都拥有一样的基础功能
const { Wechat, WxWork } = require('wechat-next')
const wechatApi = new Wechat(params, { saveAccessToken, getAccessToken, request })
const wxWorkApi = new WxWork(params, { saveAccessToken, getAccessToken, request })
各自的 params 略有不同,主要提供默认的认证参数,比如 Wechat 是 { appid, secret }
,
WxWork 是 { corpid, corpsecret, agentid }
根据微信api文档定义未做更改。
如果未配置 params 则需要在访问方法(需授权)的参数中提供。
request
配置 axios 的默认值。
请求无需提前授权的 api,path
, config
为 axios 的参数
处理接口错误信息,抛出错误。
获取授权 accessToken
。
params
参考微信授权api,会合并初始化时的默认 params
自动处理授权后请求 api.request
如果提供了授权令牌参数 access_token
,则直接访问。
未提供则调用 api.getAccessToken
获得授权后访问。
自动处理过期重试。
get
方式访问 api.authorizeRequest
params
为 url query 参数
post
方式访问 api.authorizeRequest
params
为 url query 参数
data
为提交数据
const { WechatOauth } = require('wechat-next')
const oauth = new WechatOauth({ appid, secret })
微信内嵌网页获取认证 url
参数会合并初始化中的 params
参数参考
网页扫码认证 url 参数参考
小程序 jsCode 获取 openid、session_key
解密数据(小程序)
获取用户数据
接收微信,企业微信消息
const { Receiver } = require('wechat-next')
自定义处理微信 request 请求。 handler 支持返回 Promise
const { Receiver } = require('wechat-next')
const config = { appid: 'demo', token: 'demo', aes_key: 'demo' };
const http = require('http');
const server = http.createServer((req, res) => {
Receiver.handleRequest(
config,
req.method,
paseQuery(req),
parseBody(req),
function(messsage) => {
return 'ok';
}
).then(ret => {
res.statusCode = ret.status;
if(ret.type) res.setHeader('Content-Type', ret.type);
res.end(ret.body);
}).catch(err => {
res.statusCode = 500;
res.end('');
});
});
server.listen(3000);
koa 中间件
最终传入 Receiver.handleRequest
的 config 会合并 ctx.wechatConfig
如果有自定义 appid
的需求可以提前设置 ctx.wechatConfig
const { Receiver } = require('wechat-next')
app.use( Receiver.koa(config, async (message, ctx) => {
return 'ok';
})
express 中间件
最终传入 Receiver.handleRequest
的 config 会合并 req.wechatConfig
如果有自定义 appid
的需求可以提前设置 req.wechatConfig
const { Receiver } = require('wechat-next')
app.use( Receiver.express(config, (message, req, done) => {
done('ok');
})
const { Wechat } = require('wechat-next')
const wechatApi = new Wechat({ appid, secret })
const { WxWork } = require('wechat-next')
const wxWorkApi = new WxWork({ corpid, corpsecret, agentid })
微信内嵌网页获取认证 url
参数会合并初始化中的 params
参数参考
网页扫码认证 url 参数参考
获取用户数据
const { WxWorkProvider } = require('wechat-next')
const wxWorkProviderApi = new WxWorkProvider({ corpid, provider_secret })
获取用户数据
const { WxWorkSuite } = require('wechat-next')
const wxWorkSuiteApi = new WxWorkSuite({ suite_id, suite_secret, suite_ticket })