user.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. const express = require('express');
  2. const crypto = require('crypto');
  3. const Message = require('../models/message').Message;
  4. const { processMessage } = require('../common/message');
  5. const { tokenStore } = require('../common/token');
  6. const router = express.Router();
  7. router.all('/:userPrefix/verify', (req, res, next) => {
  8. // 验证消息来自微信服务器:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
  9. const userPrefix = req.params.userPrefix;
  10. const { signature, timestamp, nonce, echostr } = req.query;
  11. const token = tokenStore.get(userPrefix).wechatVerifyToken;
  12. let tmp_array = [token, timestamp, nonce].sort();
  13. let tmp_string = tmp_array.join('');
  14. tmp_string = crypto.createHash('sha1').update(tmp_string).digest('hex');
  15. if (tmp_string === signature) {
  16. res.send(echostr);
  17. } else {
  18. res.send('verification failed');
  19. }
  20. });
  21. router.all('/:userPrefix/:description', async (req, res, next) => {
  22. const userPrefix = req.params.userPrefix;
  23. let message = {
  24. title: '无标题',
  25. description: req.params.description,
  26. };
  27. res.json(await processMessage(userPrefix, message));
  28. });
  29. router.all('/:userPrefix', async (req, res, next) => {
  30. const userPrefix = req.params.userPrefix;
  31. let message = {
  32. type: req.query.type || req.body.type,
  33. title: req.query.title || req.body.title || '无标题',
  34. description: req.query.description || req.body.description || '无描述',
  35. content: req.query.content || req.body.content,
  36. email: req.query.email || req.body.email,
  37. token: req.query.token || req.body.token,
  38. };
  39. let result = await processMessage(userPrefix, message);
  40. res.json(result);
  41. });
  42. module.exports = router;