const express = require("express")
const router = express.Router()
const url = require("url")
const qs = require("qs")
const cy = require("crypto")
const TOKEN = "token"
const fxp = require("fast-xml-parser")
router.get("/", function(req, res) {
let query = url.parse(req.url).query
let params = qs.parse(query)
console.log("get请求来了")
if (!checkSignature(params, TOKEN)) {
//如果签名不对,结束请求并返回
res.end("signature fail")
} else {
res.end(params.echostr)
}
})
const checkSignature = (params, token) => {
let key = [ token, params.timestamp, params.nonce ].sort().join("")
let sha1 = cy.createHash("sha1")
sha1.update(key)
return sha1.digest("hex") === params.signature
}
router.post("/", function(req, res) {
console.log("post请求来了")
let postData = "" //预定义一个变量用来接收 post 过来的 xml 字符串
req.addListener("data", function(chunk) {
postData += chunk
})
req.addListener("end", function() {
let str = checkMsg(postData)
res.end(str)
})
})
const checkMsg = (xmlStr) => {
console.log(xmlStr)
let formatMsg = fxp.parse(xmlStr).xml
return formatMsg.MsgType === "event" ? eventMsg({ event: formatMsg.Event, formatMsg }) : otherMsg({ MsgType: formatMsg.MsgType, formatMsg })
}
const eventMsg = ({ event, formatMsg }) => {
console.log(event)
let resStr = ""
switch (event) {
case "subscribe":
resStr = `<xml>
<ToUserName><![CDATA[${ formatMsg.FromUserName }]]></ToUserName>
<FromUserName><![CDATA[${ formatMsg.ToUserName }]]></FromUserName>
<CreateTime>${ new Date().getTime() }</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[关注自动回复的第一条消息]]></Content>
</xml>`
break
case "unsubscribe":
resStr = "success"
break
default:
resStr = "success"
}
return resStr
}
const otherMsg = ({ MsgType, formatMsg }) => {
console.log(MsgType)
let answer = ""
switch (MsgType) {
case "text":
if (formatMsg.Content === "你好") {
answer = "我不好"
} else if (formatMsg.Content === "你叫什么") {
answer = "你脸这么大啊,还问我叫什么,你叫啥"
} else {
answer = "让你调戏我,滚蛋,哥是个纯爷们儿,只喜欢御姐萝莉"
}
break
default:
answer = "不好意西,俺不认西~~~~~,攻城狮木给俺设置对应的回复"
}
return `<xml>
<ToUserName><![CDATA[${ formatMsg.FromUserName }]]></ToUserName>
<FromUserName><![CDATA[${ formatMsg.ToUserName }]]></FromUserName>
<CreateTime>${ new Date().getTime() }</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[${ answer }]]></Content>
</xml>`
}
const app = express()
app.use(router)
app.listen(2000, function() {
console.log("server is running at http://127.0.0.1:2000")
})
评论0