最近在开发一个项目是用的 eggjs
同时又需要对接到微信公众平台,所以记录下自己 Egg
对接微信的过程
验证 Token
我们知道在微信开发时都需在公众开发配置中对 Token
验证一次,接下来谈谈验证的步骤
第一步确定验证 URL
比如我的是 https://www.jakehu.me/wechat
,那么先对 eggjs
路由改造
1 2 3 4 5
| // app/router.js
module.exports = app => { app.router.get('/wechat', app.controller.wechat.index); };
|
改造完路由后我们还必须对安全
这块进行设置,屏蔽对路由 /wechat
的 csrf
验证
1 2 3 4 5 6 7
|
config.security = { csrf: { ignore: '/wechat', }, };
|
第二步编写验证 Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
async index () { const query = this.ctx.request.query; const signature = query.signature; const timestamp = query.timestamp; const nonce = query.nonce; const echostr = query.echostr; if (await this.check(timestamp, nonce, signature, 'token')) { this.ctx.body = echostr; } else { this.ctx.body = 'It is not from weixin'; } }
async check (timestamp, nonce, signature, token) { const tmp = [ token, timestamp, nonce ].sort().join(''); const currSign = crypto.createHash('sha1').update(tmp).digest('hex'); return (currSign === signature); }
|
然后就可以在开发者配置
进行验证就好了
注:上面代码中的 token
即为你在开发者配置
页面中填写的 token
接入开发
第一步安装必要组件
这里我们用到了 co-wechat
插件
安装后对插件进行配置
1 2 3 4 5 6 7
|
config.wechat = { token: 'token', appid: 'appid', encodingAESKey: 'encodingAESKey', };
|
编写对接代码
首先是 Controller
的编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
const wechat = require('co-wechat'); module.exports = app => { class WechatController extends app.Controller { }
WechatController.prototype.wechat = wechat({ token: 'token', appid: 'appid', encodingAESKey: 'encodingAESKey', }).middleware(async (message, ctx) => { console.log(message); return { type: 'text', content: 'Hello world!' }; });
return WechatController; };
|
其次我们对路由再进行改造
1 2 3 4 5
|
module.exports = app => { app.router.post('/wechat', app.controller.wechat.wechat); };
|
到此就结束了,完美对接!!!
完美对接!!!