Node.js开发微信公众号2 - 自定义菜单

news/2024/7/20 1:35:12 标签: node, nodejs, 微信游戏, 小程序

路由代码

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

 


http://www.niftyadmin.cn/n/1319193.html

相关文章

ORACLE的启动和利用数据字典

一、ORACLE的启动和关闭  1、在单机环境下  要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下  su - oracle    a、启动ORACLE系统  oracle>svrmgrl  SVRMGR>connect internal  SVRMGR>startup  SVRMGR>quit    b、关闭OR…

JDBC mysql 中文乱码

看到一篇很好的文章,转录于此 中文乱码似乎是程序编写中永恒的一个话题和难点,就比如MySQL存取中文乱码,但我想做任何事情,都要有个思路才行,有了思路才知道如何去解决问题,否则,即使一时解决了…

Node.js开发微信公众号3 - 获取用户信息

1.需要一个页面来授权重定向,重定向后的页面可以获取到用户的code router.get("/authentication", (req, res) > {// 配置的appidconst { appID } config// 你需要接受获取code的页面const redirect_uri urlencode("xxx")const scope &q…

Node.js开发微信公众号4 - 发送模板

1.先要在后台创建一个自定义模板 模板内容如下 {{first.DATA}} 姓名:{{keyword1.DATA}} 性别:{{keyword2.DATA}} 体温:{{keyword3.DATA}} {{remark.DATA}} 2.发送模板服务,此服务需要请求携带用户参数用户自定义模板内容 route…

黑马程序员-12 网络编程

------- android培训、java培训、期待与您交流! ---------- 传输协议UDP 将数据及源和目的封装到数据包中,不需要建立连接; 每个数据包的大小限制在64K以内; 因无连接,是不可靠协议; 不需要建立连接&#x…

前端面试题CSS-两盒子水平垂直居中

让子盒子在父盒子里水平垂直居中 只要回答一个就好了 1.定位 父盒子设置: position:relative; 子盒子-已知宽高: position:absolute;top:50%;left:50%;mar…

Java:定时启动线程

这里提供两种在指定时间后启动线程的方法。一是通过java.util.concurrent.DelayQueue实现;二是通过java.util.concurrent.ScheduledThreadPoolExecutor实现。1. java.util.concurrent.DelayQueue类DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中…

PL/SQL块定义部分--LOB类型

在Oracle的早期版本中,使用LONG 和 LONG RAW 类型存放大数据。从8i版本开始,Oracle引入了LOB数据类型,并且Oracle建议开发人员尽量去使用LOB类型而不去使用 LONG 和 LONG RAW 。LOB类型和LONG、LONG RAW类型相比有几个不同的地方。如&#xf…