From b2d31d4d77835858e3743bc9a726452207e937d3 Mon Sep 17 00:00:00 2001 From: Song Date: Tue, 1 Sep 2020 16:28:09 +0800 Subject: [PATCH] :tada: push part done --- app.js | 4 ++++ package.json | 1 + routes.js | 24 ++++++++++++++++++++++++ utils.js | 21 +++++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 utils.js diff --git a/app.js b/app.js index d41660d..3ace53e 100644 --- a/app.js +++ b/app.js @@ -6,9 +6,13 @@ const http = require("http"); require("dotenv").config(); const indexRouter = require("./routes"); +const requestToken = require("./utils").requestToken; const app = express(); +requestToken(app); +setInterval(() => requestToken(app), 100 * 60 * 1000); + app.use(logger("dev")); app.use(express.json()); app.use(express.urlencoded({ extended: false })); diff --git a/package.json b/package.json index dca2db5..c9fb773 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "start": "node ./app.js" }, "dependencies": { + "axios": "^0.20.0", "cookie-parser": "~1.4.4", "debug": "~2.6.9", "dotenv": "^8.2.0", diff --git a/routes.js b/routes.js index e9893a5..9f94f5a 100644 --- a/routes.js +++ b/routes.js @@ -1,6 +1,7 @@ const express = require("express"); const router = express.Router(); const crypto = require("crypto"); +const axios = require("axios"); router.get("/", (req, res, next) => { res.send("OK"); @@ -20,4 +21,27 @@ router.get("/verify", (req, res, next) => { } }); +router.get("/push", (req, res, next) => { + // Reference: https://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl + let content = req.query.content || req.body.content; + console.log(`Get content: ${content}`); + let access_token = req.app.access_token; + let request_data = { + touser: process.env.OPEN_ID, + template_id: process.env.TEMPLATE_ID, + }; + request_data.data = { text: content }; + axios + .post( + `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${access_token}`, + request_data + ) + .then((response) => { + res.json(response.data); + }) + .catch((error) => { + res.json(error); + }); +}); + module.exports = router; diff --git a/utils.js b/utils.js new file mode 100644 index 0000000..f20ddfa --- /dev/null +++ b/utils.js @@ -0,0 +1,21 @@ +const axios = require("axios"); + +module.exports = { + requestToken: function (app) { + let token = ""; + axios + .get( + `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${process.env.APP_ID}&secret=${process.env.APP_SECRET}` + ) + .then((res) => { + if (res.data && res.data.access_token) { + console.log("Get token: ", res.data.access_token); + token = res.data.access_token; + app.access_token = token; + } else { + console.error(res.data); + } + }); + return token; + }, +};