路由代码
const { deleteMenu, createMenu } = require("../utils/menu")
router.get("/menu", async (req, res, next) => {
try {
// 先获取access_token
const { access_token } = await accessToken.fetchAccessToken()
// 一定要记得创建前先删除菜单
await deleteMenu(access_token)
// 创建菜单
await createMenu(access_token)
res.send({
state: "success",
msg: "创建菜单成功",
})
} catch (error) {
console.log("自定义菜单创建失败:" + error)
next(error)
}
})
核心创建菜单代码
const rp = require("request-promise-native") //发送请求
class Menu {
constructor() {}
deleteMenu(access_token) {
const url = `https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=${access_token}`
return new Promise((resolve, reject) => {
rp({ method: "GET", url, json: true })
.then((result) => {
console.log("删除菜单成功")
console.log(result)
resolve()
})
.catch((err) => {
console.log("删除菜单失败")
console.log(err)
reject(err)
})
})
}
createMenu(access_token) {
const url = `https://api.weixin.qq.com/cgi-bin/menu/create?access_token=${access_token}`
const menuData = {
// 创建一个按钮,点击跳转到对应url
button: [
{
type: "view",
name: "微信授权登录",
url: "xxxx",
},
],
}
const options = {
url,
method: "POST",
json: true,
headers: {
"content-type": "application/json",
},
body: menuData,
}
return new Promise((resolve, reject) => {
rp(options)
.then((result) => {
console.log("创建菜单成功")
console.log(result)
resolve()
})
.catch((err) => {
console.log("创建菜单失败")
console.log(err)
reject(err)
})
})
}
}
const menu = new Menu()
module.exports = menu