AX
axolo/node-wechat
Wechat OpenAPI Node.js SDK.
node-wechat
Wechat OpenAPI Node.js SDK.
Install
yarn add @axolo/node-wechatAPI
please see src and test for more api usage.
constructor(config)
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.
execute(api, request = {}, scope = {})
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.
callback({ signature, timestamp, nonce, echostr })
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.
Example
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);
});How to config jsapi
- 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)Test
yarn test ./test/execute.test.js # test execute
yarn test ./test/callback-koa.test.js # test callbackTIP: Please create .env and .env.test in project root before test.
.env
appMode = mp
appId = APP_ID
appSecret = APP_SECRET.env.test
## http server for http event callback
httpPort = 7001TODO
- mode: support
work wechat. - test: Assertion Testing with Mocha or Jest.
- cache: support
memory,redis,mysql, etc.
Yueming Fang