user.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. token: req.query.token,
  27. };
  28. res.json(await processMessage(userPrefix, message));
  29. });
  30. router.all('/:userPrefix', async (req, res, next) => {
  31. const userPrefix = req.params.userPrefix;
  32. let message = {
  33. type: req.query.type || req.body.type,
  34. title: req.query.title || req.body.title || '无标题',
  35. description: req.query.description || req.body.description || '无描述',
  36. content: req.query.content || req.body.content,
  37. email: req.query.email || req.body.email,
  38. token: req.query.token || req.body.token,
  39. };
  40. let result = await processMessage(userPrefix, message);
  41. res.json(result);
  42. });
  43. module.exports = router;