share.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const Router = require('koa-router');
  2. const router = new Router();
  3. const path = require('path')
  4. const WeChat = require('../util/wechat')
  5. const fs = require('fs')
  6. const configLocal = path.join(__dirname, '../static/wechats.json')
  7. const wcConfig = {
  8. get () {
  9. return JSON.parse(fs.readFileSync(configLocal).toString())
  10. },
  11. set (data) {
  12. fs.writeFileSync(configLocal, JSON.stringify(data))
  13. }
  14. }
  15. router.get('/', async ctx => {
  16. let { name, uri, callback } = ctx.request.query
  17. let config = wcConfig.get().find(it => it.name === name)
  18. if (!config) {
  19. return ctx.body = '该服务号不存在'
  20. }
  21. let token = await WeChat.getAccessToken(config.AppID, config.AppSecret)
  22. let ticket = await WeChat.getTicket(token)
  23. let timestamp = WeChat.grentTimeStamp()
  24. let nonceStr = WeChat.grentNonceStr()
  25. let signature = await WeChat.getSignature(ticket, nonceStr, timestamp, uri)
  26. let result = {
  27. appId: config.AppID,
  28. timestamp,
  29. nonceStr,
  30. signature
  31. }
  32. ctx.body = `${callback}(${JSON.stringify(result)})`
  33. })
  34. router.post('/repect', async ctx => {
  35. let { data } = ctx.request.body
  36. data.forEach(item => {
  37. item.domains = item.domains || []
  38. })
  39. wcConfig.set(data)
  40. ctx.body = {
  41. code: 200
  42. }
  43. })
  44. module.exports = exports = { path: '/share', router };