commit 57294ac13172b567747f56da4568743b99afac5d Author: Song Date: Tue Sep 1 15:21:10 2020 +0800 :tada: wechat server verification part completed diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..68e55d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea +node_modules +package-lock.json +.env \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a7cf23b --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# 微信消息推送 +## 描述 +利用测试号来给自己的微信推送消息。 + +https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..d41660d --- /dev/null +++ b/app.js @@ -0,0 +1,26 @@ +const express = require("express"); +const path = require("path"); +const cookieParser = require("cookie-parser"); +const logger = require("morgan"); +const http = require("http"); +require("dotenv").config(); + +const indexRouter = require("./routes"); + +const app = express(); + +app.use(logger("dev")); +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, "public"))); + +app.use("/", indexRouter); + +const port = parseInt(process.env.PORT || "3000"); +app.set("port", port); +const server = http.createServer(app); + +server.listen(port); + +module.exports = app; diff --git a/package.json b/package.json new file mode 100644 index 0000000..51ad219 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "wechat-message-push", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "dotenv": "^8.2.0", + "express": "~4.16.1", + "morgan": "~1.9.1" + }, + "devDependencies": { + "prettier": "^2.1.1" + } +} diff --git a/routes.js b/routes.js new file mode 100644 index 0000000..38face5 --- /dev/null +++ b/routes.js @@ -0,0 +1,23 @@ +const express = require("express"); +const router = express.Router(); +const crypto = require("crypto"); + +router.get("/", (req, res, next) => { + res.send("OK"); +}); + +router.get("/verify", (req, res, next) => { + // 验证消息来自微信服务器:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html + const { signature, timestamp, nonce, echostr } = req.body; + const token = process.env.TOKEN; + let tmp_array = [token, timestamp, nonce].sort(); + let tmp_string = tmp_array.join(""); + tmp_string = crypto.createHash("sha1").update(tmp_string).digest("hex"); + if (tmp_string === signature) { + res.send(echostr); + } else { + res.send("verification failed"); + } +}); + +module.exports = router;