Wechat OpenAPI Node.js SDK.
yarn add @axolo/node-wechat
please see src
and test
for more api usage.
params
config | description |
---|---|
appMode | mp = MiniProgram, oa = OfficialAccount |
appId | Wechat appId |
appSecret | Wechat AppSecret |
eventToken | http event callback token |
eventAesKey | http event callback encode aes key |
baseUrl | base url of Wechat OpenAPI |
authTokenUrl | url of get wechat access token |
error | throw error settings |
axios | HTTP Client, use axios |
cache | cache settings, cache.manager use cache-manager |
logger | logger settings, use log4js |
return
A instance of Wechat
OpenAPI Node.js SDK.
more request options see axios.
params
parmas | description |
---|---|
api | querystring, Wechat OpenAPI |
request.method | HTTP Method |
request.params | HTTP querystring as Object by GET |
request.body | HTTP body as Object by POST/PATCH/PUT |
scope | scope or other options of api |
return
Get data with return code from Wechat OpenAPI.
See http event callback for help. This method use as middleware usualy.
params
params | description |
---|---|
signature | signature string |
timestamp | timestamp string |
nonce | random number |
echostr | random string |
return
event decrypted of callback. response echostr
if callback success.
const WechatSdk = require('@axolo/node-wechat');
const config = { appId: 'APP_ID', appSecret: 'APP_SECRET' };
const wechat = new WechatSdk(config);
wechat.execute('/user/info', {
params: { openid: 'openid' }
}).catch(err => {
console.log(err);
}).then(res => {
console.log(res);
});
- Get jsapiTicket (back-end)
const WechatSdk = require('@axolo/node-wechat');
const config = { appId: 'APP_ID', appSecret: 'APP_SECRET' };
const wechat = new WechatSdk(config);
wechat.getJsapiTicket().catch(err => {
console.log(err);
}).then(jsapiTicket => {
// output jsapiTicket to front-end
console.log(jsapiTicket);
});
- Config jsapi (front-end)
import crypto from 'crypto'
import querystring from 'query-string'
import shortid from 'shortid'
const wechatJsapiSign = ({ appId, jsapiTicket, jsApiList, debug = false }) => {
const nonceStr = shortid.generate()
const timestamp = parseInt(Date.now() / 1000)
const { href } = location
const url = href.substring(0, href.indexOf('#')) // spa hash mode
const params = { jsapi_ticket: jsapiTicket, noncestr: nonceStr, timestamp, url }
const plain = querystring.stringify(params, { encode: false })
const signature = crypto.createHash('sha1').update(plain, 'utf8').digest('hex')
const config = { appId, timestamp, nonceStr, signature, jsApiList, debug }
return config
}
// get and cache jsapiTicket from step 1
const config = wechatJsapiSign({ appId: 'APP_ID', jsapiTicket, jsApiList: [] })
wx.config(config)
yarn test ./test/execute.test.js # test execute
yarn test ./test/callback-koa.test.js # test callback
TIP: Please create .env
and .env.test
in project root before test.
appMode = mp
appId = APP_ID
appSecret = APP_SECRET
## http server for http event callback
httpPort = 7001
- mode: support
work wechat
. - test: Assertion Testing with Mocha or Jest.
- cache: support
memory
,redis
,mysql
, etc.
Yueming Fang